用 Maxima 进行符号计算

相比 Matlab, 自由的数学软件 Octave 的另一个弱势是它不能进行符号计算. 我于是寻找开源的符号计算系统, 找到了 Maxima. 下面是官方网站的介绍(翻译)

Maxima 是一个符号和数值计算系统, 它可以进行微分, 积分, 泰勒级数, 拉普拉斯变换, 常微分方程, 线性方程组, 多项式, 集合,列表, 向量, 矩阵, 张量的各种计算. Maxima 利用精确的分数, 任意精度的整数, 和可变长度的浮点数来产生高精度的数值结果.Maxima 可以对函数和数据进行二维和三维绘图.

看上去和 Octave 的很多功能是有重叠的, 不过我只想试试它的符号计算功能. 我找出大一的教材《数学分析简明教程》第二版 上册(邓东皋 尹小玲 编著), 不定积分的习题, 让我小小惊讶的是, Maxima 全部轻松搞定. 找个复杂点的例子Page 191, 7(1)

$$\int \frac{dx}{x(1+2\sqrt{x}+\sqrt[3]{x})}$$

在终端输入 maxima 命令, 在 Maxima 提示符下, 输入

(%i4) integrate(1/(x*(1+2*sqrt(x)+x^(1/3))),x);

得到输出

                                                     1/6
                                                  4 x    - 1
                           1/3    1/6        atan(----------)        1/6
         log(x)   3 log(2 x    - x    + 1)         sqrt(7)      log(x    + 1)
(%o4) 6 (------ - ------------------------ - ---------------- - -------------)
           6                 8                  4 sqrt(7)             4

这是在字符终端哦. 仔细看一下就知道它是什么式子. 很神奇的字符界面哈哈. maxima有一个图形界面工具 wxMaxima, 在wxMaxima 里输入上述命令, 然后 Shift+Enter 得到

非常清晰.

我在想, 大一的时候会这个工具多好啊, 可以用来验证自己的计算是不是正确. 如果想偷懒, 直接抄结果XD

Octave 解线性方程组

$Octave$ 解线性方程组的能力还没有 $matlab$ 强. 对于方程 \(A\times X=B\), $Octave$ 要求 \(A\) 是方阵, \(B\) 是向量; 而 matlab 并没有这些要求, 假设 \(A\) 是 \(m\times n\), \(B\) 是 \(m\times k\), 则可以用 $matlab$ 算出 \(X\), 它是 \(n\times k\) 的.

$Octave$ 解方程组的式子为 \(A\backslash B\). 下面提供两个例子

octave:1> # 
octave:1> A=[0,2,0,1;2,2,3,2;4,-3,0,1.;6,1,-6,-5]

A =

   0   2   0   1
   2   2   3   2
   4  -3   0   1
   6   1  -6  -5

octave:2> B=[0;-2;-7;6]

B =

   0
  -2
  -7
   6


octave:3> A\B

ans =

  -0.50000
   1.00000
   0.33333
  -2.00000

先生成一个随机方阵 $C$ 和随机向量 $D$ 并解方程 $$C\times x=D$$

octave:1> C=rand(5,5)
C =

   0.847817   0.122730   0.298340   0.652850   0.985631
   0.880412   0.618896   0.590534   0.485949   0.763285
   0.358464   0.384306   0.469336   0.909417   0.554835
   0.306760   0.672447   0.043989   0.371049   0.692044
   0.314791   0.410965   0.487560   0.485444   0.892830

octave:2> D=rand(5,1)
D =

   0.50708
   0.99851
   0.31515
   0.70781
   0.66774

octave:3> C\D
ans =

   0.32657
   0.77660
   0.32264
  -0.50477
   0.37354