函数、公式推导等都都是非常繁琐的事情,随着计算机技术的发展,很多比较繁杂是公式、实验、推导等都可以借助计算机,今天小编就给各位推荐一款功能非常强大的数学函数推导分析软件——
Maxima,Maxima软件是一款采用LISP编写计算机代数系统可以帮助你在电脑上分析函数的工具,Maxima软件是美国一家公司开发的,其前身是MIT的Macsyma,在最初的运算中,主要用于计算代数,因此您也可以将其看作是一个计算机代数运算系统,经过多年的发展,该软件的功能已经非常强大了,并不仅仅是运算那么简单;Maxima现在已经广泛运用于高级函数分析,支持初等函数、代数、常量、变量、矩阵、微分、积分、等方面的分析,让数学研究方面的朋友可以获得一个更加智能的计算工具,同时该软件在绘制函数图像方面的功能也是非常先进的,支持二维作图、数据作图,需要的朋友可以下载试试!
官方介绍
Maxima 的前身是DOE-Macsyma 。DOE-Macsyma 是由麻省理工学院(MIT)在美国能源部的支持下于60年代末创造的一中 CAS ,它是用 LISP 实现的。Macsyma在当时是非常创新的软件。现在流行的商业计算机代数系统软件Maple及Mathematica,都是受到Macsyma的启发而设计出来的。MIT 1982年的时候决定把 Macsyma 变成一个关闭源码的程序,Macsyma 走上商业化的道路,于是产生了很多 Macsyma 的分支。自1982年开始,Bill Schelter教授默默地开始开发一个开放源码版的Macsyma,他把这个软件叫做Maxima。因为版权的问题,Maxima一直不能公开发行,只有少数人知道有这个软件的存在。1998年,Maxima终于得到公开发行的许可,这已是Schelter教授努力了16年之后的事。Schelter教授在2001年去世,不过已经正式成为合法开放源码软件,因此陆续有支持开放源码的程序设计师,学者投入Maxima的开发工作。Maxima原本是纯文字界面,这在数学式子的显示上就没有Maple或Mathematica等软件来得美观。不过Maxima也有几种图形界面。第一个选择是使用GNU的TeXmacs。TeXmacs是一套所见即所得的文书处理程序,可以很方便的编辑数学式子。它同时也提供许多数学软件一个美观的界面,Maxima就是其中之一。其他可能的选择还有wxMaxima, imaxima等等。
软件功能
1、最大值
Maxima是全功能的计算机代数系统(CAS)。CAS是一个程序,可以通过重新排列公式并找到解决问题的公式来解决数学问题,而不仅仅是输出结果的数值。换句话说,Maxima 可以作为一个计算器,给出变量的数值表示,也可以提供分析解决方案。此外,它还提供了一系列不能解析解的等式或方程组的数值分析方法。
2、waxMaxima
wxMaxima是一个图形用户界面,提供Maxima的全部功能和灵活性。 wxMaxima为用户提供了图形显示和许多功能,使Maxima更容易使用。例如,wxMaxima允许一个简单的右键点击导出任何单元格的内容(或者,如果需要,公式的任何部分)作为文本,LaTeX或MathML规范。事实上,整个工作簿可以导出为HTML文件或LaTeX文件。wxMaxima的文档,包括用于说明其使用方面的工作簿,可以在wxMaxima 帮助站点以及帮助菜单中进行在线。
3、水平和垂直光标
有时希望允许选择多个单元格或只允许单元格的一部分用于导出或拖放。然而,在一个单元格的中间开始这样的一个动作并将其结束在另一个单元格的中间几乎肯定会导致意想不到的结果。因此,在这种情况下,waxMaxima将把选择扩展到完整的单元格。
wxMaxima通过定义两种类型的游标来提供拖放的灵活性。wxMaxima将在需要时自动切换:
-能够选择任意数量的全部单元格的水平光标。通过在两个单元格之间移动光标或单击两个单元格之间的空格来激活该光标。要选择一组相邻单元格,请单击顶部单元格左侧(但不在三角形内)的括号中,然后拖动光标,以便突出显示该单元格和下一单元格(或单元格范围)。然后使用ctrl + enter 或shift + enter来执行突出显示的单元格。
-在单元格内工作的垂直光标。通过使用鼠标指针或光标键移动单元格内的光标来激活该光标,并且在文本编辑器中与光标非常相似。
只要光标在单元格内部,搜索操作将会将其范围限制在当前单元格中。
4、命令自动完成
wxMaxima包含通过菜单(单元格/完成字)触发的自动完成功能,或者通过按下组合键Ctrl + k。自动完成是上下文相关的,如果在ezUnits的单位规范内激活,它将提供适用单位的列表。除了完成当前命令或变量的名称之外,自动完成能够显示大多数命令的模板,指示该程序期望的参数的类型(和含义)。要激活此功能,请按Shift + Ctrl + k或选择相应的菜单项(单元格/显示模板),下图中的样式需要下载TeXmacs。
5、内含MAXIMA的教程
在图形界面的wxmaxima中选择帮助,可以直接查看官网或查看下载包里教程文件夹,双击.wxm后缀的文件则直接在MAXIMA中打开,注意,它们都是英文的。
软件特色
作图
Maxima调用外 部程序来实现 作图,默认 的外部程序是Gnuplot。Gnuplot是一个 很强大的基于 命令行的函数及数 据作图程序 ,集成了计算 、拟合、脚 本编程等功能 ,包括Maxima,Octave等在 内的一些软件均使用Gnuplot作为 后台程序实现作 图功能。对于那 些经常用到数学 作图的用户, 我建议直接使用Gnuplot,因为它有更灵活的设置和更强大的功能。
特殊函数
Maxima提供有 常用的特殊函数 。这里不介绍每 个函数的具体 用法,可以参考 任何一本数理 方程教材
边值问题
函数bc2(solution,xval_1,yval_1,xval_2,yval_2)用来 求解二 阶微分方 程的边 值问题 ,其中solution是ode2解得 的通 解,xval_1、yval_1xval_2和yval_2分别 为自 变量和 因变 量在第 一点和第二点的取值
一阶或二阶常微分方程通解
(eqn, dvar, ivar)函数用来解一阶或者二阶常 微分方程,其中eqn是待解方程,dvar是因变量,ivar是自变量。
对角矩阵
对于具 有相 同元 素的 对角 矩阵 ,还 有更 简便的 输入 方法 。diagmatrix (n, x)函数返 回一 个对 角元素 为x的n × n对 角矩 阵。单 位矩 阵 可以 用diagmatrix (n, 1)表 示 。另 外, 单位 矩 阵还 可以 通过ident (n)获得
交互式输入
使用entermatrix(m,n)函数可以 进行交互式的矩阵 输入,Maxima将每 个元素一一读入。 如果行列维数相同,Maxima会主动询问 矩阵是否为对 角、对称、反对 称或者一般矩 阵,这样可以 有效减少输入次数
使用教程
1、把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
2、声明定义方程和变量
变量可以用一个冒号来赋值,而方程需要用":="来定义。以下的程序是用来演示怎么去使用它们:
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
3、符号计算方法
我们可以使用 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$$
4、公式求解
我们可以用方程“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]
5、二维和三维画图
Maxima提供了二维和三维画图功能,并且有更多的功能在同一个图表里。"plot2d"和"plot3d"用起来非常直接。第二个(或者第三个,在使用plot3d的时候)参数就是一系列x(和y)的数值,用来定义画图的取值范围。
plot2d(x^2-x+3,[x,-10,10]);
plot2d([x^2, x^3, x^4 -x +1] ,[x,-10,10]);
f(x,y):= sin(x) + cos(y);
plot3d(f(x,y), [x,-5,5], [y,-5,5]);
6、极限
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
7、微分
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
8、积分
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
9、累加和累乘
sum 和 product 是用于计算累加和累乘的方法。当需要简化结果的时候,可以使用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
10、展开级数
级数展开可以通过方法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]);