Mathematica编程语句与例题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例7: 用函数描述如下结果:任给一个整数x, 显示它被3除的余数。 解: Mathematica自定义函数:


In[19]:=f[x_]:=Switch[Mod[x,3], 0, Print["0 is the remainder on division of" ,x ,"by 3"], 1, Print["1 is the remainder on division of" ,x ,"by 3"], 2, Print["2 is the remainder on division of" ,x ,"by 3"] ] In[20]:= f[126] Out[20]= 0 is the remainder on division of 126 by 3 In[21]:= f[346] Out[21]= 1 is the remainder on division of 346 by 3 In[22]:= f[599] Out[22]= 2 is the remainder on division of 599 by 3
8.1.3 过程
在Mathematica中,一个用分号隔开的表达式序列称为一个复合表达式,它 也称为一个过程。 例如: In[11]:=s=1;u=s+3;u*u Out[11]=16 ★Mathematica的过程可以作为Module模块命令的表达式,如果不关心局部 变量问题,可以把一个过程用小括号括起来构成一个整体,这样可以用由小 括号括起来的过程来定义一个函数。 例如:已知有n个元素的一个数表x={a1,a2,…,an},定义一个计算此类数表最 大数与最小数平方差的函数,用过程来定义可以写为: In[12]:=g[x_]:=(m =Max[x];n = Min[x];m*m - n*n) 如果不用小括号括起来,而是写为 In[13]:=g[x_]:=m =Max[x];n = Min[x];m*m-n*n 则In[13]定义的g[x]实际上是Max[x],不是数表最大数与最小数平方差函数, 应该注意过程加小括号与不加括号的区别。本例题还可以用模块来定义函数: In[14]:=g[x_]:=Module[{m, n}, m =Max[x];n = Min[x];m*m-n*n]
在Mathematica中使用局部变量很简单, 只要把涉及到的局部变量用 大括弧{ }括起来, 放在Module模块命令的{变量表}位置, 并把相 应的语句写成语句序列放在Module模块命令的表达式位置即可。 例如: Mathematica中有如下命令 In[7]:=s=Sin[x]; In[8]:=u= Cos[x]; In[9]:=D[s*u, x] Out[9]= Cos[x]2-Sin[x]2
8.3循环控制语句


Mathematica的循环控制语句有三种语句: Do 语句,For语句,While语句。 为处理有时需要中途退出循环语句的问题, Mathematica 还提供了在执 行循环语句时退出循环体的语句: Return[expr] 退出函数所有过程和循环,返回expr值 Break[] 结束本层循环 Continue[ ] 转向本层For语句或While语句的下一次循环
例6: 写出分段函数
0 10 2 x 30 f ( x) 30 ( x 20) / 2 20 20 2( x 50) 0
x0 0 x 10 10 x 20 20 x 40 40 x 50 50 x 60 x 60
在Mathematica的循环结构中,使用如下表示式,可以达到简洁,快速的目的. k++ 表示赋值关系 k = k+1 , ++k 表示先处理k的值,再做赋值 k=k+1 k-表示赋值关系 k = k-1 --k 表示先处理k的值,再做赋值 k=k-1 {x,y}={y,x} 表示交换x与y 值 x+=k 表示 x = x + k x*=k 表示 x = x * k
不同于全局变量, 称变量的赋值ematica 中Module模块的命令为: Module[{变量表}, 表达式 ] 例如: 在Mathematica键入

In[4]:= u=5; In[5]: = s=Module[{u, v=1}, u=1; v=u+v+3] Out[5]= 5 In[6]:= Print[u, " ", v, " " ,s] Out[6]= 5 v 5
例如:要知道变量w是否为全局变量,可以键入: ?w 键入执行命令后,显示结果 Global`w w=2 说明w是全局变量,且有数值2。
8.1.2 局部变量
在Mathematica的命令或程序中出现的任何合法的变量 名符号,如果该变量名所代表的变量没有被赋值,则它就作 为数学算式中的符号参与数学的公式推导和运算;如果该变 量被赋值了,则用该变量所赋的值参与对应的数学公式推导 和运算。因此,当用户在做符号运算时使用的符号含有被赋 了值的变量名,则就会出现察觉不到的错误。为克服这种错 误,可以在使用Mathematica的命令之前, 先用 Clear[ 变量1,变量2,…]将要使用的所有变量名做清除处 理, 就可以避免上述错误。

例5 任给向量x=(x1,x2,…,xn),定义一个可以计算如下三中向量范数 2 n n 的函数:
x 1 xi
i 1
x2
x
i 1
i
x

Max xi
解:
In[12]:= norm[x_,p_]:=Which[p==1,Sum[Abs[x][[i]],{i,1,Length[x]}], p==2,Sqrt[Sum[Abs[x][[i]]^2,{i,1, Length[x]}]], True,Max[Abs[x]]] In[13]:=x={3, -4, 0}; In[14]:= norm[x,1] Out[14]=7 In[15]:= norm[x,2] Out[15]=5 In[16]:= norm[x,0] Out[16]=4
8.2条件控制语句

Mathematica涉及条件选择的语句有好几种,这里介绍常用的三种语 句: if 语句, Which 语句,Switch 语句。
8.2.1 If 语句 If 语句的一般形式为: If[ 条件, 语句或语句列] 具体形式有 命令形式1:If [条件, 语句1] 功能:如果条件成立,则执行对应的语句1,并将语句执行结果作为If 语句的值,如果条件不成立,不执行语句1。 命令形式2:If [条件, 语句1, 语句2] 功能:根据条件的成立与否确定执行哪一个语句,具体执行为:条件 成立时,执行语句1,否则,执行语句2,并将语句执行结果作为If 语句的值。 命令形式3:If [条件, 语句1, 语句2, 语句3] 功能:根据条件的成立与否确定执行哪一个语句, 具体执行为:条件成 立时,执行语句1,条件不成立时,执行语句2,否则,执行语句3, 并将语 句执行结果作为If语句的值。
句n,True,"字符串"] 功能:由条件1开始按顺序依次判断相应的条件是否成立,若第 一个成立的条件为条件k,则执行对应的语句k,若直到条件n 都不成立时,则返回符号字符串。
例4:写出一元二次方程ax2+bx+c=0判别根的类型的Mathematica自定义函 数形式。 解:一元二次方程根的判别式为 =b2 -4ac,当>0时方程有两个实根; 当 <0时方程有两个复根; 当=0时方程有两个实重根, 它有多于两种的选 择,故可以用Which语句表示。
8.2.2 Which 语句
命令形式1:Which[条件1,语句1,条件2,语句2, ... ,条件n,语
句n] 功能:由条件1开始按顺序依次判断相应的条件是否成立,若第 一个成立的条件为条件k,则执行对应的语句k。
命令形式2:Which[条件1,语句1,条件2,语句2, ... ,条件n,语
8.2.3 Switch 语句

命令形式:Switch[表达式, 模式1,语句1,模式2,语句 2, ... 模式n,语句n ] 功能: 先计算表达式,然后按模式1,模式2,…,的顺序依 次比较与表达式结果相同的模式,找到的第一个相同的 模式,则将此模式对应的语句计算计算结果作为Switch 语句的结果。 Switch语句是根据表达式的执行结果 来选择对应的执行语句,它类似于一般计算机语言的 Case语句
x sin x f ( x) x cos x x 1 x 1
的Mathematica自定义函数形式,并画出其在[3,3]上的图形 解: 因此Mathematica 命令为:
In[3]:= f[x_]:=If[x<1, x+Sin[x], x*Cos[x]] (或f[x_]:=If[x<1,x+Sin[x],x*Cos[x],"err"]) In[4]:= Plot[f[x],{x,-3, 3}]
Mathematica 编程
8.1全局变量、局部变量、过程
8.1.1全局变量
在Mathematica中键入的各种命令或在Mathematica的程序语句 中, 变量被赋值后, 必须用Mathematica清除变量的命令才能使其 还原为符号的变量, 称为全局变量。察看某变量是否为全局变量, 可以键入命令: ?变量名 Global`变量名… 说明该变量是全局变量,否则,就不是全局变量。
例1:用Mathematica命令描述下面问题:先产生一个函数[0,1]内的 随机实数,再判断该随机数是否小于0.5, 如果小于0.5, 则将此 随机数显示出来,否则显示”*”。 解: Mathematica 命令为: In[1]:= If[(p=Random[])<0.5,p,"*"] Out[1]=0.202857 In[2]:= If[(p=Random[])<0.5,p,"*"] Out[2]= * 例2: 写出分段函数
的Mathematica自定义函数形式,并画出其在[0,60]上的图形。 解: 因此Mathematica 命令为:
In[17]:=f[x_]:= Which[x<=0,0,x<=10,10+2x,x<=20,30,x<=40,30-(x-20)/2, x<=50,20,x<=60,20-(x-50)*2,x>60,0 ] In[18]:= Plot[f[x],{x,0,60}]
例3 定义一个函数描述下面问题:任给一个函数y(x),如果y(x)
的一阶导数为零,则输出符号###,否则,输出y (x)+ 5
解: Mathematica 命令为: In[5]:=f[y_,x_]:=Module[{s},s=D[y,x];If[s==0,Return["###"]]; s =s+5;Return[s]] In[6]:= f[3,x] Out[6]= ### In[7]:= f[Tan[x],x] Out[7]=5 + Sec2[x]
Mathematica命令为 In[8]:=g[a_, b_, c_]:=(w=b^2-4*a*c;Which[w>0,"two real roots",w<0,"two complex roots",w == 0,"duplicate roots" ]) In[9]:=g[0,1,2] Out[9]= two real roots In[10]:=g[3,1,2] Out[10]= two complex roots In[11]:=g[3,0,0] Out[11]=duplicate roots

命令中的变量s, u的值将会影响随后的命令, 如果写成 In[10]:= Module[{s, u, x}, s=Sin[x];u= Cos[x]; D[s*u, x]] Out[10]= Cos[x$1]2 - Sin [x$1]2 此时命令中的变量s, u就是局部变量, 它们的值将不会影响随后的 命令。
相关文档
最新文档