跳轉到內容

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 手冊:類別宣告和推斷
華夏公益教科書