,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,/74,软 件 介 绍,第4讲 Mathematica编程简介,软 件 介 绍第4讲 Mathematica编程简介,4.1 Mathematica编程简介,1.Mathematica文件可保存数据也可保存命令,2.基本程序结构,每个单元中的命令可自动执行,因此在每个单元中可有三种基本结构:顺序、分支、循环。,4.1 Mathematica编程简介,4.1.1 基本概念,4.1.2 选择结构(分支结构),4.1.3 循环结构,4.1.4 全局变量与局部变量,4.1.5 输入与输出,4.1.1 基本概念,4.1.1 基本概念,1.关系运算符、关系表达式与关系函数,关系表达式是指用关系运算符将两个表达式连接起来的式子(例如a+b 0),关系运算符又称比较运算符,用来对两个表达式的值进行比较,比较的结果是一个逻辑值(True或False),这个结果就是关系表达式的值。,4.1.1 基本概念,4.1.1 基本概念,1.关系运算符、关系表达式与关系函数,x=y,Equalx,y,x,y,Unequalx,y,x y,Greaterx,y,x,y,GreaterEqualx,y,4.1.1 基本概念,2.逻辑运算符、逻辑表达式与逻辑函数,对于较为复杂的条件,必须使用逻辑表达式。逻辑表达式是指用逻辑运算符连接若干关系表达式或逻辑值而成的式子。逻辑表达式的值也是一个逻辑值。,p&q,p,q,Andp,q,p|q,p,q,Orp,q,!p,p,Notp,2.逻辑运算符、逻辑表达式与逻辑函数,2.逻辑运算符、逻辑表达式与逻辑函数,p&q,p,q,Andp,q,p|q,p,q,Orp,q,!p,p,Notp,【例3-1】验证逻辑分配律:p,(q,r)=(p,q),(p,r),a=p,b=(p,a=b,LogicalExpanda=LogicalExpandb,2.逻辑运算符、逻辑表达式与逻辑函数,【例3-2】判断闰年,闰年的条件是:被4整除但不能被100整除,或者能被400整除。,y=2000;,L=(Mody,4=0&(!Mody,100=0)|(Mody,400=0),【例3-2】判断闰年,4.1.2 选择结构(分支结构),实现选择结构的函数有If函数、Which函数与Switch函数三种。,1.If函数,If函数的语法格式为:,If条件,语句1,语句2,注:省略格式:,If条件,语句1,If条件,语句2,条件,T,语句,1,F,语句,2,4.1.2 选择结构(分支结构)条件T语句1F语句2,4.1.2 选择结构(分支结构),1.If函数,If函数的语法格式为:,If条件,语句1,语句2,【例3-3】使用If函数,IfRandomInteger,1,6=3,0,-1,注1:其中随机函数的格式如下:,RandomInteger,1,6 返回16之间的随机整数,RandomReal,1,6,20 返回16之间的随机实数,Random 返回01之间的随机实数,条件,T,语句,1,F,语句,2,4.1.2 选择结构(分支结构)条件T语句1F语句2,注2:If函数格式中的语句1或语句2都可以是以分号相隔的命令列表,【例3-4】,IfRandom=0.5,x=Random;y=1;Printx+y,Print0,注2:If函数格式中的语句1或语句2都可以是以分号相隔的命,注3:If函数可以嵌套,【例3-5】铁路托运行李,从甲地到乙地,规定每张客票托运费计算方法是行李重量不超过50kg时,0.25元/kg,超过50kg而不超过100kg时,其超过部分按0.35元/kg收费,超过100kg时,其超过部分按0.45元/kg收费。编写程序,输入行李重量,计算并输出托运的费用。,分析:设行李重量为,w,kg,应付运费为,x,元,则运费公式为:,注3:If函数可以嵌套,根据以上分析,画出流程图如图所示。,编写代码如下:,w=40;,x=Ifw=50,0.25 w,Ifw=100,0.35 w-5,0.45 w-15,输入,w,输入行李重量,如果,w=50,真,x,0.25*w,假,如果,w=100,真,x,0.25*50+0.35*(w,50),假,x,0.25*50+0.35*50+0.45*(w,100),输出,x,输出托运费,根据以上分析,画出流程图如图所示。输入w输入行李重,2.Which函数,Which函数的语法格式为:,Which,条件1,表达式1,条件2,表达式2,.,注:其中表达式可以是命令列表,其值为最后表达式的值,True,条件,1,表达式,1 ,条件,1,成立时返回的值,条件,2,表达式,2 ,条件,2,成立时返回的值,2.Which函数True条件1表达式1 条件1成立时,3.Switch函数,Switch函数的语法格式为:,Switch表达式,值1,表达式1,值2,表达式2,.,Switch表达式,值1,表达式1,值2,表达式2,.,_,表达式n+1,表达式,值1,表达式1 表达式的值与值1相等时计算表达式1,值2,表达式2 表达式的值与值2相等时计算表达式2,3.Switch函数表达式值1表达式1 表达式的值与值,3.Switch函数,Switch函数的语法格式为:,Switch表达式,值1,表达式1,值2,表达式2,.,_,表达式n+1,【例3-6】,x=RandomInteger,1,60,SwitchModx,4,0,a,1,b,2,c,3,d,表达式,值1,表达式1 表达式的值与值1相等时计算表达式1,值2,表达式2 表达式的值与值2相等时计算表达式2,3.Switch函数表达式值1表达式1 表达式的值与值,4.1.3 循环结构,循环是指在程序设计中,从某处开始有规律地反复执行某一程序块的现象,重复执行的程序块称为“循环体”。,使用循环可以避免重复不必要的操作,简化程序,节约内存,从而提高效率。,Mathematica提供的循环结构函数有:For、Do、While。,4.1.3 循环结构,1.For函数,For函数的语法格式为:,Fori=初值,i=终值,i增量,循环体,For(i=初值,i=终值,i增量),循环条件成立吗,循环体,循环条件真时执行的命令序列,1.For函数For(i=初值,i=终值,i增量),1.For函数,Fori=初值,i=终值,i增量,循环体,【例3-7】使用For函数:,Fori=1,i=5,i+,Printi,Fors=0;i=5,i=25,i=i+2,s=s+i;,s,Fors=0;i=5,i=25,i=i+2,s=s+i;Prints;,For(i=初值,i=终值,i增量),循环条件成立吗,循环体,循环条件真时执行的命令序列,1.For函数For(i=初值,i=终值,i增量),【例3-8】我国古代数学家张丘建在 算经 里提出一个世界数学史上有名的百鸡问题:,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、母、雏各几何?,解答:设公鸡x只,母鸡y只,小鸡z只,依题义可以列出以下方程组:,在这2个方程中,由于有3个未知数,属于不定方程,无法直接求解。下面用穷举法,将各种可能的组合全部一一测试,将符合条件的组合输出即可,【例3-8】我国古代数学家张丘建在 算经 里提出一个世界数学,流程图如下所示。,For x=1,x=100,x+,For y=1,y=100,y+,z=100-x-y;,If 5*x+3*y+z/3=100,Printx,y,z,x从1到100,y从1到100,z,100-x-y,若5*x+3*y+z/3=100,T,输出x,y,z,流程图如下所示。x从1到100y从1到100z100-x-,【例3-9】输出能被37整除的三位整数。,str=;,Forn=100,n=1000,n+,IfModn,37=0,AppendTostr,n,str,【例3-9】输出能被37整除的三位整数。,【例3-10】输出九九乘法表,p=;,Fori=1,i=9,i+,q=;,Forj=1,j=i,j+,AppendToq,i*j,AppendTop,q,MatrixFormp,【例3-10】输出九九乘法表,【例3-11】找出11000之间的全部“同构数”,分析:如果一个数出现在其平方数的右端,则称此数为同构数。,如:1在1,2,=1的右端,5在5,2,=25的右端,25在25,2,=625的右端等等。一个1位数是同构数的条件是:x=Modx2,10,一个2位数是同构数的条件是:x=Modx2,100等,,据此画出流程图,如图所示。,n从1到1000,L1 n=Modn 2,10,L2 n=Modn 2,100,L3 n=Modn 2,1000,如果L1 Or L2 Or L3,T,输出n,【例3-11】找出11000之间的全部“同构数”n从1到1,【例3-11】找出11000之间的全部“同构数”,Forn=1,n=1000,n+,L1=(n=Modn2,10);,L2=(n=Modn2,100);,L3=(n=Modn2,1000);,IfL1|L2|L3,Printn,n从1到1000,L1 n=Modn 2,10,L2 n=Modn 2,100,L3 n=Modn 2,1000,如果L1 Or L2 Or L3,T,输出n,【例3-11】找出11000之间的全部“同构数”n从1到1,2.While函数,While函数的语法格式为:,While条件,循环体,【例3-12】,s=0;i=5;,Whilei=25,s=s+i;i=i+2;,s,条件,循环体,2.While函数条件循环体,【例3-13】编程求满足下列不等式的最小自然数n的值。,s=0;n=1;,Whiles=5,s=s+1/n;n+,n,【例3-13】编程求满足下列不等式的最小自然数n的值。,【例3-14】“完备数”是指一个数恰好等于它的因子之和,如6的因子为1、2、3,而6=1+2+3,因而6就是完数。编制程序,找出11000之间的全部“完备数”。,分析:根据所提问题可知,要想知道一个自然数是否为完数,首先必须找出其所有因数。从2开始到这个数的最大因数为止(偶数不大于其值的二分之一,奇数不大于其值的三分之一),进行整除判断,凡是可以被整除的数均为这个数的因数。据此画出流程图。,n从1到1000,如果n为偶数,真,t n/2,假,t n/3,a 2,s 1,a=t,如果a是n的因子,T,s s+a,a a+1,如果s=n,T,输出n,【例3-14】“完备数”是指一个数恰好等于它的因子之和,如6,【例3-14】“完备数”是指一个数恰好等于它的因子之和,如6的因子为1、2、3,而6=1+2+3,因而6就是完数。编制程序,找出11000之间的全部“完备数”。,Forn=1,n=1000,n+,t=IfModn,2=0,n/2,n/3;,a=2;s=1;,Whilea=t,IfModn,a=0,s=s+a;,a+;,Ifs=n,Printn,n从1到1000,如果n为偶数,真,t n/2,假,t n/3,a 2,s 1,a=t,如果a是n的因子,T,s s+a,a a+1,如果s=n,T,输出n,【例3-14】“完备数”是指一个数恰好等于它的因子之和,如6,【例3-14】“完备数”是指一个数恰好等于它的因子之和,如6的因子为1、2、3,而6=1+2+3,因而6就是完数。编制程序,找出11000之间的全部“完备数”。,Forn=1,n=1000,n+,t=IfModn,2=0,n/2,n/3;,a=2;s=1;,Whilea=t,IfModn,a=0,s=s+a;,a+;,Ifs=n,Printn,【例3-14】“完备数”是指一个数恰好等于它的因子之和,如6,3.Do函数,Do函数是使用最方便的循环函数,其语法格式为:,(1)执行k次循环体,Do循环体,k,(2)执行imax次循环体,i从1变到imax,步长为1,Do循环体,i,imax,相当于:Fori=