1 Maxima 初步认识
Maxima 是什么
计算机代数软件可以进行多项式化简、分解因式、分式化简、通分、积分、微分等公式推导.
这种运算又称为"符号计算", 与"数值计算"相对.
著名的计算机代数系统有 Maple、Mathematica、Maxima.
-
Maxima 是一个免费的计算机代数软件, 可安装在各种不同的操作系统中.
-
具有计算机代数系统必须的各种功能。
-
用 Lisp 语言编制, 是一个有悠久历史的软件, 开发历史可追溯至 1968 年到 1982 年之间在 MIT 开发的 DOE Macsyma, 后来转由 Texas 大学 William F. Schelter 教授维护, 在 1998 年转为 GNU GPL 版权协议.
安装与运行
在 MS Windows 系统中, 可以下载安装 wxMaxima 软件(http://maxima.sourceforge.net/).
比如, 文件 maxima-clisp-sbcl-5.42.0-win64.exe.
wxMaxima 运行界面是一个窗口形式, 在窗口中逐行输入命令, 命令以分号结尾, 用 Shift+RETURN 键运行每行命令.
命令用 $
结尾则不显示命令的结果.
可以用 %
访问上一个公式的输出;
用 %i1
, %o1
等访问历史的输入与输出.
用 %th(k)
访问向上数第 k 个结果.
用冒号定义一个变量.
精确计算
四则运算符号用 +
-
*
/
, 乘方用 ^
表示.
Maxima 中不带小数点的四则计算结果保存为有理式, 不作近似.
如
12/5 + 6*(2^3 + 1/11);
结果为
2802
55
\frac{2802}{55}
552802
(%i7) p1 : 3*p^2*(1-p) + p^3;
3 2
(%o7) p + 3 (1 - p) p
(%i8) p2: 10*p^3*(1-p)^2+5*p^4*(1-p) + p^5;
5 4 2 3
(%o8) p + 5 (1 - p) p + 10 (1 - p) p
(%i9) expand(p1);
2 3
(%o9) 3 p - 2 p
(%i10) expand(p2);
5 4 3
(%o10) 6 p - 15 p + 10 p
(%i11) p3: expand(p2-p1);
5 4 3 2
(%o11) 6 p - 15 p + 12 p - 3 p
(%i12) factor(p3);
2 2
(%o12) 3 (p - 1) p (2 p - 1)
近似计算
为了求以上结果的近似值, 用 numer
函数开关, 或 float
函数.
如
float(%);
或
12/5 + 6*(2^3 + 1/11), numer;
结果为 50.94545454545455.
(%i17) float(%o2);
(%o17) 50.945454545454545
(%i18) 12/5 + 6*(2^3 + 1/11), numer;
(%o18) 50.945454545454545
这样, Maxima 可以当作一个高级计算器使用.
数值类型
Maxima 的数值类型有整数、有理数、普通浮点数、高精度的浮点数.
普通浮点数如 1.2, 1.2E-3.
高精度浮点数如 1.2B0, 1.2B-3, 有效位数用变量 fpprec
控制.
函数 float(x)
把 x 转为浮点型, 函数 bfloat(x)
将 x
转为高精度浮点型.
有高精度浮点数参加运算的算式结果为高精度浮点数;
没有高精度浮点数但有浮点数算式结果为浮点数.
特殊常数
用 %e
、%pi
表示
e
e
e 和
π
\pi
π, 用 %i
表示虚数单位.
inf, minf, 分别表示
+
∞
,
−
∞
+\infty, - \infty
+∞,−∞.
infinity 表示复数无穷大.
复数
用 %i
表示虚数单位, 如此可以输入复数.
如
(%i24) z1: 5+3*%i;
(%o24) 3 %i + 5
用 realpart
和 imagpart
返回复数的实部和虚部.
(%i25) realpart(z1);
(%o25) 5
(%i26) imagpart(z1);
(%o26) 3
用 conjugate
返回复数的复共轭.
(%i27) conjugate(z1);
(%o27) 5 - 3 %i
用 abs 求复数模, 用 carg 和求辐角.
(%i28) abs(z1);
(%o28) sqrt(34)
(%i29) carg(z1);
3
(%o29) atan(-)
5
rectform
把复数表为直角坐标形式.
如
(%i33) rectform(z1);
(%o33) 3 %i + 5
polarform
把复数表为极坐标形式.
(%i35) polarform(z1);
%i atan(3/5)
(%o35) sqrt(34) %e
列表
用方括号把逗号分隔的数值组合在一起作为一个列表.
(%i36) [2,3,4] + [7,8,9];
(%o36) [9, 11, 13]
[2,3,4] + [7,8,9]