You are on page 1of 7

Mathematica使用经验总结

摘要
本文是一篇老师教的和自己平时用Mathematica的一个小小的总结。
对于Mathematica这样一个强大的软件来说,我的水平还远远不够,还有
很多东西要去发现,要去创造,只有才能将数学软件的强大力量发挥出
来,而不仅仅把它当成一个强大的计算器。
本文由pdf格式打印,如需要原文件,请与wubinbb@163.com联系。
作者水平有限,不妥之处,敬请告知,谢谢。
一、令人激动的实用命令
1、实用交互命令
这些命令被执行后弹出一个窗口,等待用户由键盘输入表达式或字符串,单击OK按钮
后返回键入的内容给Mathematica。
命令如下:
Input[ ] 返回用户由键盘输入的表达式;
Input[”prompt”] 在弹出窗口的上半部显示提示字符串;
InputString[ ] 限制输入内容为字符串;
InputString[”prompt”] 带有提示字符串。
给出一个例子,如图:

之后x的值被赋成35。

2、提取矩阵元素命令
矩阵是一个2层表每行是一个子表,所以适用于表的命令对矩阵也有效。
另外有两个很方便的命令,“M[[All,j]]提取矩阵的第j列元素组成一个表,Tr[[M,
List]]提取矩阵M主对角线的元素组成一个表”,它们避免了用循环的方法提取元素,从而
提高了效率!
3、一个很棒的关于表的命令
这个命令如下:
Select[List,crit] 从表List中选出满足判断函数的所有元素得到一个新表;
Select[List,crit,n] 从表中选出满足判断函数的前n个元素得到一个新表。
我曾想利用Eratosthenes筛法写一个求素数的程序,当时却苦于它的实现;直到我发
现了Select,忽然觉得一切都很简单,代码如下:
counter  10^2;
n  Sqrt[counter];
temp  result  Table[i, {i, 2, counter}];
For[j  1, j  n, j , temp  result[[ j ]]; result  {temp}  Select[result, (!
IntegerQ[#/temp]) &]]
result
其中,可以通过改变counter的值来改变求素数的范围。

4、一些外部程序包中的命令
1、Mathematica自带的外部程序中有求极限的同名函数,增强了解题能力。
外部程序文件Limit.m位于
Mathematica\4.2\AddOns\StandardPackages\Calculus目录下
使得原Limit不能解决的问题Limit[(1  1/n)^(n^2)/Exp[n], n - ]得到
解决。
Calculus‘Limit‘
Limit[(1  1/n)^(n^2)/Exp[n], n - ]

2、在标准程序包集的代数程序包子集中,有解不等式的程序文件。
外部程序文件InequalitySolve.m位于
Mathematica\4.2\AddOns\StandardPackages\Albegra目录下
InequalitySolve[不等式(或等式)组,变量组] 用于解不等式(或等式
)组。
调用如下:
Albegra‘InequalitySolve‘
InequalitySolve[(x^2-3)(x^2-4)(x^2-5)0, x]

5、一个让人兴奋的键盘命令
“Ctrl+k”能自动补齐命令,你只需对命令有一个大体的印象,无需记清每个命令的拼
写,输入命令的前几个字母(比如是Ploy)后键入”Ctrl+k”就会弹出以Ploy开始的命令列
表,大大的方便了用户!
二、关于Mathematica本身的使用

1、用符合传统习惯的输入方式
通过cell菜单选择Default Input FormatType选项,改成TraditionalForm之后,
Mathematica就能识别sin(x)等等这些用符合传统习惯输入的函数了。
如图:

2、在Mathematica中输入汉字
Mathematica3/4/4.1中如果使用中文,需要先选中所在的cell,或者选中输入的中文乱
码,在菜单format font中选中对应的中文字体后才能正确显示。
最新的4.2/5.0在国际化有较大的改进,可以直接输入中文。
如图:

三、一些技巧简介
1、如何制做动画
以一道试题为例(原题为西安交大理学院赫孝良老师2002年考试时所出的第2题):
画出旋转的马鞍面
解答为:Table[Plot3D[x^2-y^2,{x,-2,2},{y,-2,2},PlotRange-{-4,
4},ViewPoint-{t-4,t/2,Sin[t]}],{t,0,8,0.5}]
(答案由西安交通大学的王郑耀提供)
下面我做一些简要分析:
实际上,该答案生成了一个从不同角度观察的图象表。t由0到8步长为0.5,总共生
成了17幅图象,再由“ViewPoint-{t-4,t/2,Sin[t]”看到观察角度随t的变化而变化,由此我们
得到了各个角度的静态图象,那么将它们连续的播放出来就成了动画。
方法如下:

还能把它存储成. gif动画类型的图片放进网页里。
其实,只要把多幅图象放在一个表里面都是以幻灯片形式播放的,如果图片连续效果
够好、速度够快,就成了动画。

四、一些符号比较及其注意事项
1、在变换规则中用n_.代替n_
在带有参数的变换规则中有这样一种情况
如图:
在In[1]中,Mathematica没有把x看成x 1 ,所以第一项没有变换。为此,
Mathematica给出了解决办法:用n_.代替n_,得到In[2]的情况。
类似有x_y_.中y不出现时则有y0,而x_ y_.中y不出现时则y1。

2、:与的比较
:与=的差别有两个:
第一个差别如图:

因为开始时已经定义x5,当使用””定义fx时,立即将右边的数学表达式进行求值,
将x5带入,因而Mathematica记忆的f[x_]10;当使用”:”定义gx时,Mathematica总是
将输入的函数定义式原样记忆,因而g[x_]5x。所以,f[5]10,g[5]25。
如果事先没有定义x5,则不会出现上述问题。
第二个差别如图:
前一个函数定义后右边的积分立即被求出,而后一个函数在定义后并不进行积分,再
求函数值时才进行积分。所以求g[3]时,将x3代入,g[3](13)^2d(3),从而
Mathematica报错。
总之,使用“”时立即对右边的数学表达式进行计算,使用“:” 时右边的数学表达式不
变,当求函数值时才进行计算。定义函数时,两种等号都可以便用,应当弄清两者的差别
适当选用,不要造成定义函数必须使用“:” 的错觉。
另外,“-”和“:”也是类似的情况。

3、两种积分的比较
求定积分有两中方法:使用N[Integrate[f,{x,a,b},n] 或 使用NIntegrate[f,{x,
a,b}]
前者首先试图求符号解,然后再求近似解;后者使用数值积分的方法直接求近似解。
究竟选哪个,这首先需要了解两者各自的特点:前者首先试图求符号解,当然花费的
时间较多,但安全可靠:后者直接求解数值,节约运行时间,但可靠性就差了。
如图:
另外,有一些类似的命令(比如:Sum和NSum)具有同样的情况。

4、Plot[ xdx,{x,-4,4}]中的 xdx用Evaluate[ xdx]替换


因为Mathematica并不事先求出Plot[ xdx,{x,-4,4}]中的 xdx,而是将x取值后带入。比
如当x=4时,那么命令变成:Plot[ 4d4,{x,-4,4}],自然得不到结果。用Evaluate[ xdx]替
换 xdx后,Mathematica事先求出 xdx的值为(x^2)/2,从而将x的值代入时能得到结果。

五、Mathematica4.0-5.0的一个很棒的更新
“ConstrainedMin和ConstrainedMax”被具有更好性能的“Minimize, Maximize,
NMinimize 和 NMaximize”所取代。
以“Minimize”为例简要说明如下:
格式为:Minimize[ f ,约束条件列表,变量列表]
其中多个约束条件用&&隔开,支持xIntegers类型的条件,支持整数规划,但还目前
不支持混合规划。

参考文献:

1、李尚志,陈发来,吴耀华,张韵华著,数学实验,高等教育出版
社,1999
2、丁大正编著,科学计算强档Mathematica 4教程,北京电子工业出
版社,2002.3
3、王郑耀个人主页,
http://wangzhengyao.xiloo.com/chinese/mathematica/m_index.htm

You might also like