译文

10分钟教程:用Maxima解决数学问题

翻译:jizecn | 2008-07-30 23:12:54 | 阅读3006 | 来源

大约有5万人读了我的另一篇叫做“3 swesome free math programs”的文章。其中一部分人大概已经下载并安装了Maxima。如果你是其中一人,但是却不太擅长这类CAS(计算机代数系统)软件的话,Maxima可能让你感觉很复杂,并且很难掌握,甚至仅仅是简单的高中代数问题都会无从下手。事实上,Maxima用起来没有那么可怕,10分钟的教程足以让你明白它的用法,找到正确的方向。一旦你开始了第一步,对于实际问题中的特定的功能,你只要去搜寻它的文档就可以了。或者,你可以用以下这种形式(问号 + 一个字符串)去得到相应帮助(比如 ? integrate)。这个教程将会结合实际动手,使用一些简单的例子来讲解怎么去计算一些常见的问题。当然,这仅仅是冰山一脚。Maxima能做很多很多的其他事情,但是在开头阶段,接触这些问题足以帮助你明白并且让你能够使用。并且,最后一点,你不会牺牲超过10分钟的时间。

把Maxima当做计算器用

你可以把Maxima当作一个快速的并且可靠的计算器用。它的精度在计算机硬件的限度内可以是任意的。跟很多编程语言一样,在Maxima,你需要输入一个或者多个指令和表达式,并以分号"$$"分隔。

(%i1) 9+7;
(%o1) 16
(%i2) -17*19;
(%o2) -323
(%i3) 10/2;
(%o3) 5

上一次计算的结果可以用“%”符号来表示,而且之前的任意一次的输入和输出可以通过符号 “%i”(输出)或者“%o”(输出)来表示。

 

(%i4) % - 10;
(%o4) -5
(%i5) %o1 * 3;
(%o5) 48

简单一点,从这里起,我们将会省略掉那些标有号码的输入和输出,并且用 a => sign 来表示输出。分数情况下,分子和分母都是整数的情况下,maxima会返回一个相应的简化的分数或者一个整数。这些可以通过一些使用“float”方法来验证(或者bfloat,在大的浮点数字的情况下):

8/2;
=> 4
8/2.0;
=> 4.0
2/6;
=> displaystyle frac{1}{3}
float(1/3);
=> 0.33333333333333
1/3.0;
=> 0.33333333333333
26/4;
=> displaystyle frac{13}{2}
float(26/4);
=> 6.5

如上所述,在这里,大数值的数字不是个问题:

13^26;
=> 91733330193268616658399616009
13.0^26
=> displaystyle 9.1733330193268623text{ }10^_{+28}
30!;
=> 265252859812191058636308480000000
float((7/3)^35);
=> displaystyle 7.5715969098311943text{ }10^_{+12}


一些定量和常见的方程

这里是一些常见的定量数值,在日常使用中会经常用到:
  • %e - Euler’s Number
  • %pi - displaystyle pi
  • %phi - the golden mean (displaystyle frac{1+sqrt{5}}{2})
  • %i - the imaginary unit (displaystyle sqrt{-1})
  • inf - real positive infinity (infty)
  • minf - real minus infinity (-infty)
  • infinity - complex infinity

我们可以用它们中的一些在一些常见的方程里:

sin(%pi/2) + cos(%pi/3);
=> displaystyle frac{3}{2}
tan(%pi/3) * cot(%pi/3);
=> 1
float(sec(%pi/3) + csc(%pi/3));
=> 3.154700538379252
sqrt(81);
=> 9
log(%e);
=> 1


声明定义方程和变量

变量可以用一个冒号来赋值,而方程需要用":="来定义。以下的程序是用来演示怎么去使用它们:

a:7; b:8;
=> 7
=> 8
sqrt(a^2+b^2);
=> sqrt{113}
f(x):= x^2 -x + 1;
=> x^2 -x + 1
f(3);
=> 7
f(a);
=> 43
f(b);
=> 57

请注意,Maxima只提供自然对数计算功能 log. 默认情况下,不提供 log10,但是你可以自己定义,如下:

log10(x):= log(x)/log(10);
=> displaystyle log10(x):=frac{log(x)}{log(10)};
log10(10)
=> 1


符号计算方法

我们可以使用 factor 来进行因数分解:

factor(30!);
=> displaystyle 2^{26},3^{14},5^7,7^4,11^2,13^2,17,19,23,29

或者多项式的因子计算

factor(x^2 + x -6);
=> (x-2)(x+3)

然后,展开

expand((x+3)^4);
=> displaystyle x^4+12,x^3+54,x^2+108,x+81

简化有理数表达式:

ratsimp((x^2-1)/(x+1));
=> x-1

简化三角方程:

trigsimp(2*cos(x)^2 + sin(x)^2);
=> displaystyle cos ^2x+1

类似的,展开三角表达方程:

trigexpand(sin(2*x)+cos(2*x));
=> displaystyle -sin ^2x+2,cos x,sin x+cos ^2x

请注意,2x在Maxima中不是乘法表达式,相应的,它要求明确使用 2*x。如果你想使用TeX来生成相应的表达式,你可以使用方程tex:

 tex(%);

=> $$-sin ^2x+2,cos x,sin x+cos ^2x$$

公式求解

我们可以用方程“solve”轻松的解一个,或者一组公式:

solve(x^2-4,x);
=> displaystyle left[ x=-2 , x=2 right]
%[2]
=> x=2
solve(x^3=1,x);
=> displaystyle left[ x={{sqrt{3},i-1}over{2}} , x=-{{sqrt{3},i+1}over{2}}  , x=1 right]
trigsimp(solve([cos(x)^2-x=2-sin(x)^2], [x]));
=> displaystyle left[ x=-1 right]
solve([x - 2*y = 14, x + 3*y = 9],[x,y]);
=> left[ left[ x=12 , y=-1 right]  right]

二维和三维画图

Maxima提供了二维和三维画图功能,并且有更多的功能在同一个图表里。"plot2d"和"plot3d"用起来非常直接。第二个(或者第三个,在使用plot3d的时候)参数就是一系列x(和y)的数值,用来定义画图的取值范围。

plot2d(x^2-x+3,[x,-10,10]);

2dplot.png

plot2d([x^2, x^3, x^4 -x +1] ,[x,-10,10]);

many_2dplot.png

f(x,y):= sin(x) + cos(y);
plot3d(f(x,y), [x,-5,5], [y,-5,5]);

3dplot.png

极限

limit((1+1/x)^x,x,inf);
=> %e
limit(sin(x)/x,x,0);
=> 1
limit(2*(x^2-4)/(x-2),x,2);
=> 8
limit(log(x),x,0,plus);
=> -infty
limit(sqrt(-x)/x,x,0,minus);
=> -infty

微分

diff(sin(x), x);
=> displaystyle cos(x)
diff(x^x, x);
=> displaystyle x^{x},left(log x+1right)

我们能使用一个任选的数字来定义微分计算的阶数,从而来计算更高阶的微分方程:

diff(tan(x), x, 4);
=> displaystyle 8,sec ^2x,tan ^3x+16,sec ^4x,tan x

积分

Maxima提供了一些类型的几分计算。当计算不定积分时候:

integrate(1/x, x);
=> displaystyle log(x)

定积分的情况下,只需要把后两个参数定义成积分的范围:

integrate(x+2/(x -3), x, 0,1);
=> displaystyle -2,log 3+2,log 2+{{1}over{2}}
integrate(%e^(-x^2),x,minf,inf);
=> sqrt{% pi}

如果方程integrate不能计算一个积分的时候,你可以运行数值计算,用一个合适的方程(例如:romberg):

romberg(cos(sin(x+1)), x, 0, 1);
=> 0.57591750059682

累加和累乘

sumproduct 是用于计算累加和累乘的方法。当需要简化结果的时候,可以使用simpsum选项。注意,你也可以用product来定义你自己的方程。

sum(k, k, 1, n);
=> displaystyle sum_{k=1}^{n}{k}
sum(k, k, 1, n), simpsum;
=> displaystyle {{n^2+n}over{2}}
sum(1/k^4, k, 1, inf), simpsum;
=> displaystyle {{%pi^{4}}over{90}}
fact(n):=product(k, k, 1, n);
=> fact(n):=product(k,k,1,n)
fact(10);
=> 3628800

展开级数

级数展开可以通过方法taylor来进行(最后一个参数用于定义展开深度),或者用powerseries:

niceindices(powerseries(%e^x, x, 0));
=> displaystyle sum_{i=0}^{infty }{{{x^{i}}over{i!}}}
taylor(%e^x, x, 0, 5);
=> displaystyle 1+x+{{x^2}over{2}}+{{x^3}over{6}}+{{x^4}over{24}}+{{x^5}over{120 }}+cdots

当taylor的输出需要用图形表示的时候,trunc方法和plot2d一起使用(去解决泰勒级数尾部输出的+cdots符号问题):

plot2d([trunc(%), %e^x], [x,-5,5]);

taylor.png

我希望这个能对你有帮助,而且希望它能帮你快速开始使用Maxima。CAS是非常清大的工具,如果你想学会正确的使用它们,你会很快发现它很值得所投入的时间。

翻译的很烂,望多包涵。纯属练笔,同时自己也在学习这个软件。其中很多大学的术语已经忘记了。

分享:

标签:maxima,

本文共有2 条评论:

1楼 Barret 评论于 2008-09-25 10:05:45

%e - Euler’s Number

这不该是自然对数的底吗?

2楼 冬篱 评论于 2009-02-10 00:57:49

十分有用!

添加评论