Mathematica和Matlab都可以实现某个方案,不同之处在于对不同的问题,处理的方法繁琐程度不一样,这个需要对二者使用一段时间后才有体会。软件掌握多少都不算多,类似的软件还有MathCAD、Maple等,关键在处理具体问题的时候那种软件更适合,或者那种软件处理问题普遍性强,而Mathematica和Matlab分别代表了符号计算和数据处理(或者数值计算)的两个方面普遍适用的软件。
以下对Mathematica和Matlab做一些简单的介绍,无法详尽介绍。
Mathematica:符号计算强,便于公式推导和函数式制图。
[1]
Mathematica界面的窗口和菜单栏是分离式的,便于边计算边对照查看文档,其公式可以复制为公式格式,可直接粘贴于Word等文本中,而且有书写助手、数学助手等,便于以公式的形式输入,但该功能在大量符号计算中可能作用不大,编写代码的执行效率肯定比手动输入公式要高的多。见下图
[2]
输入和输出都是在同一个界面,便于查看每条代码的结果。
[3]
语法规则丰富,同一条代码可用多种形式表达,不同书写形式执行变量多样。例如:Apply[f, {x, y}]等同于f@@{x, y}也等同于f[x, y]
[4]
函数使用方式丰富,调用函数可以编写专门的文件,也可直接在输入界面中调用。可把想到的代码都写成函数的形式,包括各种形式的代码,便于调用,尤其是在试验不同方案的时候特别适用。
[5]
内置函数功能使用复杂,例如条件查找矩阵坐标,需要Position[data,Condition,1,Heads->False],其中Condition又需要编制。
[6]
将所有的算法最终转化为表达式,以函数的形式体现。例如绘图将表达式的变量范围指定即可,便于函数制图。
[7]
优点:映射和函数功能强大,自主性强。
[8]
缺点:无动态矩阵,需要预先指定矩阵的维度,更新已有数据维度需要函数操作。
Matlab:数据处理强,便于数据处理,当然Mupad和Maple也弥补了Matlab再符号计算方面的一些缺陷。
[1]
Matlab界面集成Workspace、Current Folder等,便于查看工作记录、图形和内存,以及其他可设置项,其Toolbox功能丰富强大。见下图
[2]
输入和输出界面分离,编码和输出分离查看。
[3]
语法规则固定,可稍微变化,便于结构化查看。
[4]
函数适用格式固定,复杂的代码需专门编制函数文件,简单的函数只能计算或调用内部函数。
[5]
内置函数使用简单,例如条件查找矩阵坐标,find(condition),condition虽需要编制,但是较为简单。
[6]
将所有的算法最终转化为数据,以数据的形式体现。例如绘图要先赋值变量,通过变量计算数值,最后绘图,便于数据制图。
[7]
优点:向量化编程和数据处理功能强大,规范化编码逐条执行强。
[8]
缺点:自定义函数太弱。
举例对比:绘制以下图形
(*Mathematica*)
meshgrid[x_List,
y_List]:={ConstantArray[x,Length[x]],Transpose@ConstantArray[y,Length[y]]};(*定义函数meshgrid,其功能将数据矩阵化*)
{xx, yy} =
meshgrid[Range[-2, 2, .1], Range[-4, 4, .2]]; (*调用函数meshgrid *)
c =
xx*Exp[-xx^2 - yy^2]; (*数值计算*)
pts =
Flatten[{xx, yy, c}, {2, 3}];(*压平数据结构,Matlab似乎无此功能*)
ListPlot3D[pts, PlotRange -> All, AxesLabel ->
Automatic, ImagePadding -> 20, Mesh -> 35, InterpolationOrder
-> 2, ColorFunction -> "Rainbow", Boxed -> False];
(*图形绘制*)
该段代码中使用了函数自定义,自定义函数调用。从中看出,自定义函数功能非常强大,甚至连最后的ListPlot整段语句或者这整块代码都自定义为一个函数,函数多次嵌套非常方便,同时输出的图形较为美观。同时也看出编码的复杂性,很多功能要自己实现,最大化的开放了对问题的解决方式。
Mathematica的绘图功能远不止这些,在动画方面比Matlab强很多,尤其是绘制可调节参数图形方面,Matlab可以说基本无法实现。
%Matlab
[X,Y] =
meshgrid(-2:.1:2, -4:.2:4);%矩阵化数据
Z = X .*
exp(-X.^2 - Y.^2);%数值计算
surf(X,Y,Z);%图形绘制
该段代码使用了内置函数meshgrid(Mathematica中没有,需要自己定义)。从中看出,内置函数功能函数非常强大,简单便捷的几行代码就实现了Mathematica复杂编码才能实现的功能。同时也看出其图形输出的美观色彩配置不够美观,虽然可以修改,但多数色带(colormap)效果不如Mathematica。
Matlab的自带函数功能远不止这些,在数据处理方面的函数其强大丰富是Mathematica无法相比的,例如Matlab中极坐标数据向直角坐标转化pol2cart就可以实现,Mathematica要实现该功能仍然要自定义函数。
结论:
通过以上看出,要解决某个问题,两种软件都可以解决,使用那种软件根据需要选择。
我自认为较好的解决方案是数据处理用Matlab,然后将数据导入Mathematica可视化处理。符号计算就是Mathematica了。