跳转到内容

Maxima/数字

来自维基教科书,开放的书籍,开放的世界
(%i1) load(to_poly);
(%o1)  home/a/maxima/share/to_poly_solve/to_poly.lisp
(%i2) r;
(%o2) r 
(%i3) isreal_p(r);
(%o3) true     /*  When I use unspecified variables, Maxima seems to assume that they are real */ 
(%i4) z:x+y*%i;
(%o4) %i y + x
(%i5) isreal_p(z);
(%o5) isreal_p(%i y) /* maxima can't check if it is real or not */
(%i6) isreal_p(x);
(%o6) true
(%i7) isreal_p(y);
(%o7) true
(%i8) complex_number_p(z); 
(%o8) false 
(%i9) declare(z, complex);
(%o9) done
(%i10) complex_number_p(z);
(%o10)   false /* still not complex */                                                                                                              true


随机数

[编辑 | 编辑源代码]
  bfloat(random(10^fpprec) / 10^fpprec); /* random bfloat with fpprec decimal digits in the range 0 to 1 */

数字类型

[编辑 | 编辑源代码]

二进制数

[编辑 | 编辑源代码]
(%i1) ibase;
(%o1) 10
(%i2) obase;
(%o2) 10
(%i3) ibase:2;
(%o3) 2
(%i4) x=1001110;
(%o4) x=78


复数辐角的主值,用 carg 函数产生 (-pi, pi] 范围内的结果。可以通过将负值加上 2*pi 映射到 [0, 2*pi)

carg_t(z):=
 block(
 [t],
 t:carg(z)/(2*%pi),  /* now in turns */
 if t<0 then t:t+1, /* map from (-1/2,1/2] to [0, 1) */
 return(t)
)$

可以根据复数点的辐角来排序复数点列表

l2_ordered: sort(l2, lambda([z1,z2], is(carg(z1) < carg(z2))))$


有理数

[编辑 | 编辑源代码]
  • rat
  • ratp

有理化,限制分母:[1]

limit_denominator(x, max_denominator):=
block([p0, q0, p1, q1, n, d, a, q2, k, bound1, bound2, ratprint: false],
 [p0, q0, p1, q1]: [0, 1, 1, 0],
 [n, d]: ratexpand([ratnum(x), ratdenom(x)], 0),
 if d <= max_denominator then x else
 (catch(
   do block(
     a: quotient(n, d),
     q2: q0+a*q1,
     if q2 > max_denominator then throw('done),
     [p0, q0, p1, q1]: [p1, q1, p0+a*p1, q2],
     [n, d]: [d, n-a*d])),
 k: quotient(max_denominator-q0, q1),
 bound1: (p0+k*p1)/(q0+k*q1),
 bound2: p1/q1,
 if abs(bound2 - x) <= abs(bound1 - x) then bound2 else bound1))$

谓词函数

[编辑 | 编辑源代码]
(%i1) is(0=0.0);
(%o1) false

比较

(%i1) a:0.0$
(%i2)is(equal(a,0));
(%o2) true


谓词函数列表(参见末尾的 p)

  • abasep
  • alphacharp
  • alphanumericp
  • atom
  • bfloatp
  • blockmatrixp
  • cequal
  • cequalignore
  • cgreaterp
  • cgreaterpignore
  • charp
  • clessp
  • clesspignore
  • 来自 to_poly 包的 complex_number_p
  • constantp
  • constituent
  • diagmatrixp
  • digitcharp
  • disjointp
  • elementp
  • emptyp
  • evenp
  • featurep
  • floatnump (比较:isreal_p)
  • if
  • integerp
  • intervalp
  • is
  • 来自 to_poly 包的 isreal_p
  • lcharp
  • listp
  • listp
  • lowercasep
  • mapatom
  • matrixp
  • matrixp
  • maybe
  • member
  • nonnegintegerp
  • nonscalarp
  • numberp
  • oddp
  • operatorp
  • ordergreatp
  • orderlessp
  • picture_equalp
  • picturep
  • poly_depends_p
  • poly_grobner_subsetp
  • polynomialp
  • prederror
  • primep
  • ratnump
  • ratp
  • scalarp
  • sequal
  • sequalignore
  • setequalp
  • setp
  • stringp
  • subsetp
  • subvarp
  • symbolp
  • symmetricp
  • taylorp
  • unknown
  • uppercasep
  • zeroequiv
  • zeromatrixp
  • zn_primroot_p


参见

  • declare[2]
    • property
      • 有理数、无理数、实数、虚数、复数
      • 偶数、奇数
      • 递减、递增
      • evenfun、oddfun

有一些函数和运算符对整数很有用

初等数论

[编辑 | 编辑源代码]

在 Maxima 中,有一些初等函数,例如阶乘 n!和双阶乘 n!!定义为 其中 是不大于 的最大整数

整除性

[编辑 | 编辑源代码]

对整数最重要的函数中的一些与整除性有关

gcd, ifactor, mod, divisors... 

它们在帮助中都有很好的文档。您可以使用“?”命令查看它。

函数 ifactors 接受正整数并返回一对列表:素数因子及其指数。例如

a:ifactors(8);
[[2,3]]

这意味着:

其他函数

[编辑 | 编辑源代码]

连分数

(%i6) cfdisrep([1,1,1,1]);
(%o6) 1+1/(1+1/(1+1/1))
(%i7) float(%), numer;
(%o7) 1.666666666666667
  1. stackoverflow 问题:使用 limit-denominator 有理化数字
  2. maxima 手册:类别声明和推断
华夏公益教科书