您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > Mathematica-教程09Mathematica程序设计
►Down◙Main程序设计顺序结构条件结构循环结构迭代函数程序跳转控制输入输出函数模块块►Down◄Up◙Main程序与编程顺序结构在Mathematica中的顺序结构就是复合表达式,即一串用分号隔开的表达式.x=2;y=4;z=6?x?y?z说明:In[1]就是一个复合表达式,由3个表达式组成,其中最后一个表达式不带分号,输出只显示最后一个表达式的执行结果。再通过查看变量得知,3个表达式都被执行了。在In[5]中,最后一个表达式也带分号,这时没有结果被显示。►Down◄Up◙Main条件结构If型结构If型结构是最为常用的条件结构,具体格式如下:If[test,then]当条件test成立时执行表达式then,当条件不成立时返回Null(没有结果显示)。If[test,then,else]当条件test成立时执行表达式then,当条件不成立时执行表达式else。If[test,then,else,unknown]当条件test成立时执行表达式then,当条件不成立时执行表达式else,不能判定条件是否成立时执行表达式unknown►Down◄Up◙Main注意:允许条件判定失败的情况出现,这时执行表达式unknown,没有表达式unknown时Mathematica将整个条件结构作为结果返回,其中被执行的表达式,在简单的例子中只是一个数学表达式.其实,也可以由多个表达式复合组成,允许有复杂的结构.被执行表达式的执行结果将作为If结构的结果返回,可以将结果赋值给其他变量.复杂的情况将在后面的综合应用中介绍,这里先举几个简单的例子.►Down◄Up◙Main利用If结构定义分段函数f[x_]:=If[x0,x,-x];f[2];f[-5];f[0]说明:In[1]中使用If型结构定义了一个分段函数,当x0时函数值等于x,否则函数值等于一x,实际就是求x的绝对值。具有这种类型定义式的函数再进行其他运算时可能失败,例如不能继续求不定积分,但可以求定积分、导函数(分段点除外),也可以用于绘图。If型结构可以嵌套►Down◄Up◙Mainf[x_]=If[x0,1,If[x==0,0,-1]];f[0];f[-3]x=2;f[x_]:=If[x0,1,If[x==0,0,-1]];?f说明:利用嵌套能定义有多个表达式的分段函数,但这种函数不能求定积分了,不过还可以求导和绘图.定义这类函数时应使用“:=”,本例有意改用=是想说明以下一些问题.In[1]用=定义时,等号右边的表达式被立即执行,因为x无值无法判定条件是否成立,按约定将整个If结构保留作为求值结果赋给f[x],这样定义与使用:=效果相同.这里定义的是符号函数但是,在In[4]已经键入x=2后,再用=定义函数时,If结构立即被执行,得到求值结果为1给f[x],In[6]查看f后知道f[x]恒等于1,显然出错了.►Down◄Up◙MainWhich型结构Which[test1,value1,test2,value2,...]当条件test1成立时执行表达式value1,当条件test1不成立但条件test2成立时,执行表达式value2依此类推.被执行表达式的执行结果将作为Which结构的结果返回,可以赋值给其他变量。如果遇到有一个条件无法判定时,则将整个条件结构作为结果返回。最后一个条件可以使用True,使最后一个表达式成为缺省的表达式。当所有条件都不成立时,返回Null作为结果。►Down◄Up◙Main说明:In[1]中x无值,无法判定条件是否成立,整句作为结果输出。In[2]赋值x=0,但是In[3]中的条件都不成立,返回Null,没有结果显示。In[4]使用了缺省值,因为x=0时,两个测试条件都不成立,于是返回缺省位0.使用这种结构定义分段函数比If结构方便.►Down◄Up◙Main利用Which型结构定义分段函数求导输出结果作为导函数表达式只在分段点处不正确求积分则失败►Down◄Up◙MainSwitch型结构Switch[expr,form1,value1,form2,value2,…]首先对判别expr求值,首次遇到可匹配的formk,则执行“valuek.被执行表达式的执行结果将作为Switch结构的结果返回,可以赋值给其他变量。如果所有的匹配尝试都失败,则将整个Switch结构作为结果输出,但可能与原结构式不同,因为“表达式”变成了它的“值”。如果最后一个匹配式为“_”,则最后一个表达式成为缺省的表达式。►Down◄Up◙Mainf[x_]:=Switch[x,1,Plot[t^2,{t,0,1}],2,Plot[t^3,{t,-1,1}]];f[2]f[0]说明:In[1]中利用Switch结构定义了一个绘图函数,求f[2]的结果是执行Switch结构,表达式x被求值为2,与formi匹配,执行valuei是绘图,结果得到如图所示的图形.再求f[0],不能匹配,结果输出整个结构式,但是表达式x被用0替换。注意:如果在Plot表达式中变量t仍用x,则求f[2]会失败,读者可以自行验证并弄清原因。►Down◄Up◙Main在Switch型结构中使用缺省表达式sqrt0[x_?Positive]:=Switch[Sqrt[x],_Integer,Print[Integer,Sqrt[x]],_Rational,Print[Rational,Sqrt[x]],_,Print[other,Sqrt[x]]]sqrt0[4]sqrt0[4/9]sqrt0[3]sqrt0[0.25]sqrt0[-4]►Down◄Up◙MainIn[1]定义了一个正数开平方的函数sqrt0,输出结果分成3类:整数,分数,其他的数.其中“Integer”表示能与任何整数匹配,“Rational”表示能与任何分数(不包括整数)匹配.最后的匹配式为“_”能与任何表达式匹配,因此最后的表达式是缺省的表达式,当求值结果不是整数和分数时,最后的表达式肯定被执行.函数Print[expr1,expr2,...]用于向屏幕输出一系列表达式,两个表达式之间不留空格(空格可用字符串产生),输出的字符串用双引号括起来.这种输出显示是由程序编制者控制的(Print函数的输出),不是Mathematica的自动输出Print函数返回结果为Null),改变了用户的被动地位,可以用这种方法显示用户想要的某些中间结果.由于定义函数时限定自变量为正数,因此最后求sqrt0[-4]失败.►Down◄Up◙Main条件判别式的基本组成部分(1)一般逻辑运算符=大于等于(也可使用基本输入模板输入≥)小于=小于等于(也可使用基本输入模板输入≤)==等于(也可使用基本输入模板输入==)!=不等于(也可使用基本输入模板输入≠)&&逻辑与||逻辑或!逻辑非与C语言略有不同,允许使用诸如a≤x≤yb型判别式,但是True与False不能用1与0代替►Down◄Up◙Main(2)两种逻辑等号Mathematica还引入了逻辑等号“===”和与之对应的不等号“=!=现在介绍“===与“==”的区别。===的等价形式是:SameQ[exprl,expr2]。而“==”的等价形式是:Equal[exprl,expr2]。两者的区别首先在于,凡是最后一个字母为“Q”的函数只能返回True或False,但是Equal还可能返回判定失败作为第三种结果。除此之外,还有其他不同。以下通过例子说明。►Down◄Up◙Main说明:In[1]中判定“x==y”,Mathematica不能肯定也不否定,认为判定失败,因此Out[1]将原句作为结果输出.In[2]使用“x===y”,因不能判定其相等,就认为不等,因此返回结果False.In[3]中用“==”,认为2=2.0成立.In[4]中,使用“===”则认为2=2.0不成立.In[5]中先求左边的函数值再判定,即判定2=2.0.In[6]先计算两边表达式再判定,两种等号都能成立.注意最后的In[7]Mathematica不能判定它们相等,这就说明,有时又未必与常规理解一致,弄不清时可以通过试验确定►Down◄Up◙Main总之,使用===时判定更为严格,而==允许出现判定失败的情况.(3)常用的判别函数除了以上常用的运算符外,Mathematica还提供了许多判别函数,最常用的介绍如下。FreeQ[expr,form]判定在表达式expr中没有子表达式与form匹配MermberQ[expr,form]判定在表达式expr中有第1层元素与form匹配。MemberQ[expr,form,levelspec]判定在表达式expr的由层号levelspec指定的层中有元素与form匹配。►Down◄Up◙MainNumericQ[expr]判定表达式expr是一个数量NumberQ[expr]判定表达式expr是一个数IntegerQ[expr]判定表达式expr是一个整数EvenQ[expr]判定表达式expr是一个偶数Odd[expr]判定表达式expr是一个奇数PrimeQ[expr]判定表达式expr是一个素数►Down◄Up◙MainNumberQ[-3]NumberQ[2/3]NumberQ[1.2]NumberQ[2-3I]NumberQ[Sqrt[2]]NumberQ[Sin[2]]注意:函数NumberQ只能识别头为:Integer,Rational,Real,Complex的4类数,不能识别所有的数。但函数NumericQ除了能识别以上4类数外还能识别Pi,e,Sqrt[2],Sin[2]等,能识别具有属性NumericFunction的函数当自变量是数时的函数值。►Down◄Up◙Main循环结构For型结构For[start,test,incr,body]首先执行给循环变量赋初值的表达式start,然后测试循环结束的条件test,test为真时执行循环体body然后执行表达式incr改变循环变量的值,再跳转到测试test,如此循环执行,当test为假时结束。C语言中的++,--,+=等运算符也可以使用。注意:For型结构执行结束后总是返回结果为Null,因此没有Out[n]型输出显示,这与If型结构不同。►Down◄Up◙Main说明:In[1]先建立一个4维向量A,如果省略这一句直接执行第二句则失败
本文标题:Mathematica-教程09Mathematica程序设计
链接地址:https://www.777doc.com/doc-6890196 .html