Mathematica編程語句與例題_第1頁
Mathematica編程語句與例題_第2頁
Mathematica編程語句與例題_第3頁
Mathematica編程語句與例題_第4頁
Mathematica編程語句與例題_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Mathematica編程語句與例題編程語句與例題 8.1全局變量、局部變量、過程全局變量、局部變量、過程 8.1.1全局變量全局變量 在Mathematica中鍵入的各種命令或在Mathematica的程序語句中, 變量被賦值后, 必須用Mathematica清除變量的命令才能使其還原為符號的變量, 稱為全局變量全局變量。察看某變量是否為全局變量,可以鍵入命令:?變量名變量名Global變量名變量名 說明該變量是全局變量,否則,就不是全局變量。 例如例如:要知道變量w是否為全局變量,可以鍵入: ? w鍵入執(zhí)行命令后,顯示結(jié)果 Globalw w = 2 說明w是全局變量,且有數(shù)值2。8.1.

2、2 局部變量局部變量o 在在Mathematica的命令或程序中出現(xiàn)的任何合法的變量的命令或程序中出現(xiàn)的任何合法的變量名符號,如果該變量名所代表的變量沒有被賦值,則它就作名符號,如果該變量名所代表的變量沒有被賦值,則它就作為數(shù)學算式中的符號參與數(shù)學的公式推導和運算;如果該變?yōu)閿?shù)學算式中的符號參與數(shù)學的公式推導和運算;如果該變量被賦值了,則用該變量所賦的值參與對應(yīng)的數(shù)學公式推導量被賦值了,則用該變量所賦的值參與對應(yīng)的數(shù)學公式推導和運算。因此,當用戶在做符號運算時使用的符號含有被賦和運算。因此,當用戶在做符號運算時使用的符號含有被賦了值的變量名,則就會出現(xiàn)察覺不到的錯誤。為克服這種錯了值的變量名,

3、則就會出現(xiàn)察覺不到的錯誤。為克服這種錯誤,可以在使用誤,可以在使用Mathematica的命令之前的命令之前, 先用先用Clear 變量變量1,變量變量2,將要使用的所有變量名做清除處將要使用的所有變量名做清除處理理, 就可以避免上述錯誤。就可以避免上述錯誤。o 不同于全局變量不同于全局變量, 稱變量的賦值效果只在某一模塊內(nèi)有效的稱變量的賦值效果只在某一模塊內(nèi)有效的變量為變量為局部變量局部變量。模塊是模塊是Mathematica為使用局部變量而建立的基本結(jié)構(gòu)為使用局部變量而建立的基本結(jié)構(gòu)Mathematica 中中Module模塊的命令為模塊的命令為:Module變量表變量表, 表達式表達式

4、例如例如: 在Mathematica鍵入 In4:= u=5; In5: = s=Moduleu, v=1, u=1; v=u+v+3 Out5= 5 In6:= Printu, , v, ,s Out6= 5 v 5在在Mathematica中使用局部變量很簡單中使用局部變量很簡單, 只要把涉及到的局部只要把涉及到的局部變量用大括弧變量用大括弧 括起來括起來, 放在放在Module模塊命令的模塊命令的變量表變量表位置位置, 并把相應(yīng)的語句寫成語句序列放在并把相應(yīng)的語句寫成語句序列放在Module模塊命令的模塊命令的表達式位置即可。表達式位置即可。例如例如: Mathematica中有如下命令

5、中有如下命令 In7:=s=Sinx; In8:=u= Cosx; In9:=Ds*u, x Out9= Cos2x - Sin2x命令中的變量命令中的變量s, u的值將會影響隨后的命令的值將會影響隨后的命令, 如果寫成如果寫成 In10:= Modules, u, x, s=Sinx;u= Cosx; Ds*u, x Out10= Cos2x$1 - Sin2x$1 此時命令中的變量此時命令中的變量s, u就是局部變量就是局部變量, 它們的值將不會影響隨它們的值將不會影響隨后的命令。后的命令。 8.1.3 過程過程在Mathematica中,一個用分號隔開的表達式序列稱為一個復合表達式復合表

6、達式,它也稱為一個過程過程。例如例如: In11:=s=1;u=s+3;u*u Out11=16 Mathematica的過程可以作為Module模塊命令的表達式,如果不關(guān)心局部變量問題,可以把一個過程用小括號括起來構(gòu)成一個整體,這樣可以用由小括號括起來的過程來定義一個函數(shù)。例如例如:已知有n個元素的一個數(shù)表x=a1,a2,an,定義一個計算此類數(shù)表最大數(shù)與最小數(shù)平方差的函數(shù),用過程來定義可以寫為: In12:=gx_:=(m =Maxx;n = Minx;m*m - n*n) 如果不用小括號括起來,而是寫為 In13:=gx_:=m =Maxx;n = Minx;m*m-n*n則In13定義

7、的gx實際上是Maxx,不是數(shù)表最大數(shù)與最小數(shù)平方差函數(shù),應(yīng)該注意過程加小括號與不加括號的區(qū)別。本例題還可以用模塊來定義函數(shù): In14:=gx_:=Modulem, n, m =Maxx;n = Minx;m*m-n*n 8.2條件控制語句條件控制語句lMathematica涉及條件選擇的語句有好幾種,這里介紹常用的三種語句: if 語句語句, Which 語句語句,Switch 語句語句。8.2.1 If 語句語句lIf 語句的一般形式為語句的一般形式為: If 條件條件, 語句或語句列語句或語句列具體形式有l(wèi) 命令形式命令形式1:If 條件條件, 語句語句1 功能:功能:如果條件成立,則

8、執(zhí)行對應(yīng)的語句1,并將語句執(zhí)行結(jié)果作為If語句的值,如果條件不成立,不執(zhí)行語句1。l 命令形式命令形式2:If 條件條件, 語句語句1, 語句語句2 功能:功能:根據(jù)條件的成立與否確定執(zhí)行哪一個語句,具體執(zhí)行為:條件成立時,執(zhí)行語句1,否則,執(zhí)行語句2,并將語句執(zhí)行結(jié)果作為If語句的值。l 命令形式命令形式3:If 條件條件, 語句語句1, 語句語句2, 語句語句3功能:功能:根據(jù)條件的成立與否確定執(zhí)行哪一個語句, 具體執(zhí)行為:條件成立時,執(zhí)行語句1,條件不成立時,執(zhí)行語句2,否則,執(zhí)行語句3, 并將語句執(zhí)行結(jié)果作為If語句的值。例例1:用用Mathematica命令描述下面問題命令描述下面問

9、題:先產(chǎn)生一個函數(shù)先產(chǎn)生一個函數(shù)0,1內(nèi)的內(nèi)的隨機實數(shù)隨機實數(shù),再判斷該隨機數(shù)是否小于再判斷該隨機數(shù)是否小于0.5, 如果小于如果小于0.5, 則將此則將此隨機數(shù)顯示出來隨機數(shù)顯示出來,否則顯示否則顯示”*”。n解解: Mathematica 命令為: In1:= p= Random; Ifp0.5, p, “*”O(jiān)ut1=0.202857In2:= If(p=Random)0.5, p, “*”)Out2= *例例2: 寫出分段函數(shù)的Mathematica自定義函數(shù)形式,并畫出其在3,3上的圖形n解解: 因此Mathematica 命令為: In3:= fx_:=Ifx1, x+Sinx,

10、x*Cosx (或或fx_:=Ifx0時方程有兩個實根; 當0,two real roots,0,two real roots, w0,two complex w0,two complex roots,wroots,w = 0,duplicate roots ) = 0,duplicate roots )In9:=g0,1,2In9:=g0,1,2Out9= two real rootsOut9= two real rootsIn10:=g3,1,2In10:=g3,1,2Out10= two complex rootsOut10= two complex rootsIn11:=g3,0,0I

11、n11:=g3,0,0Out11=duplicate rootsOut11=duplicate roots 例例5 任給向量x=(x1,x2,xn),定義一個可以計算如下三種向量范數(shù)的函數(shù):n解解:n In12:= normx_,p_:=Whichp=1,SumAbsxi,i,1,Lengthx, p=2,SqrtSumAbsxi2,i,1, Lengthx, True,MaxAbsx In13:=x=3, -4, 0; In14:= normx,1 Out14=7 In15:= normx,2 Out15=5 In16:= normx,0 Out16=4iniiniixMaxxxxxx212

12、11例例6: 寫出分段函數(shù)的Mathematica自定義函數(shù)形式,并畫出其在0,60上的圖形。n解解: 因此Mathematica 命令為: In17:=fx_:= Whichx=0,0,x=10,10+2x,x=20,30,x=40,30-(x-20)/2, x=50,20,x60,0 nIn18:= Plotfx,x,0,6000102010301020( )30(20)/22040204050202(50)5060060 xxxxf xxxxxxx 8.2.3 Switch 語句語句l命令形式:命令形式:Switch表達式表達式, 模式模式1,語句語句1,模式模式2,語句語句2, . 模

13、式模式n,語句語句n l功能功能: 先計算表達式,然后按模式1,模式2,的順序依次比較與表達式結(jié)果相同的模式,找到的第一個相同的模式,則將此模式對應(yīng)的語句計算計算結(jié)果作為Switch語句的結(jié)果。 Switch語句是根據(jù)表達式的執(zhí)行結(jié)果來選擇對應(yīng)的執(zhí)行語句,它類似于一般計算機語言的Case語句 例例7: 用函數(shù)描述如下結(jié)果:任給一個整數(shù)x, 顯示它被3除的余數(shù)。解解: Mathematica: Mathematica自定義函數(shù)自定義函數(shù): :l In19:=fxIn19:=fx_:=SwitchModx,3,_:=SwitchModx,3, 0, Print0 is the remainder

14、on division of ,x ,by 3, 0, Print0 is the remainder on division of ,x ,by 3, 1, Print1 is the remainder on division of ,x ,by 3, 1, Print1 is the remainder on division of ,x ,by 3, 2, Print2 is the remainder on division of ,x ,by 3 2, Print2 is the remainder on division of ,x ,by 3 l In20:= f126 In2

15、0:= f126 l Out20= 0 is the remainder on division of 126 by 3Out20= 0 is the remainder on division of 126 by 3l In21:= f346 In21:= f346 l Out21= 1 is the remainder on division of 346 by 3Out21= 1 is the remainder on division of 346 by 3l In22:= f599 In22:= f599 l Out22= 2 is the remainder on division

16、 of 599 by 3Out22= 2 is the remainder on division of 599 by 38.3循環(huán)控制語句循環(huán)控制語句lMathematica的循環(huán)控制語句有三種語句的循環(huán)控制語句有三種語句: Do 語句語句,For語句語句,While語句語句。 為處理有時需要中途退出循環(huán)語句的問題為處理有時需要中途退出循環(huán)語句的問題, Mathematica 還提供了在執(zhí)還提供了在執(zhí)行循環(huán)語句時退出循環(huán)體的語句行循環(huán)語句時退出循環(huán)體的語句:l Returnexpr 退出函數(shù)所有過程和循環(huán)退出函數(shù)所有過程和循環(huán),返回返回expr值值l Break 結(jié)束本層循環(huán)結(jié)束本層循環(huán)l

17、Continue 轉(zhuǎn)向本層轉(zhuǎn)向本層For語句或語句或While語句的下一次循環(huán)語句的下一次循環(huán)在在Mathematica的循環(huán)結(jié)構(gòu)中的循環(huán)結(jié)構(gòu)中,使用如下表示式使用如下表示式,可以達到簡潔可以達到簡潔,快速的目的快速的目的.lk+ 表示賦值關(guān)系表示賦值關(guān)系 k = k+1 , l+k 表示先處理表示先處理k的值的值,再做賦值再做賦值 k=k+1lk- 表示賦值關(guān)系表示賦值關(guān)系 k = k-1l-k 表示先處理表示先處理k的值的值,再做賦值再做賦值 k=k-1 lx,y=y,x 表示交換表示交換x與與y 值值lx+=k 表示表示 x = x + klx*=k 表示表示 x = x * k8.3.

18、1 Do 語句語句Do 語句的一般形式為 Do循環(huán)體循環(huán)體,循環(huán)范圍循環(huán)范圍具體形式有l(wèi)命令形式命令形式1:Doexpr, n 功能:功能:循環(huán)執(zhí)行n次表達式expr 。l命令形式命令形式2:Doexpr, i, imin, imax 功能:功能:按循環(huán)變量i 為imin,imin+1,imin+2,imax循環(huán)執(zhí)行imax-imin+1次表達式expr。l命令形式命令形式3:Doexpr, i, imin, imax,d 功能:功能:按循環(huán)變量i 為imin,imin+d,imin+2d,imin+nd,循環(huán)執(zhí)行(imax-imin)/d +1次表達式expr。l命令形式命令形式4:Doex

19、pr, i, imin, imax, j, jmin, jmax 功能:功能:對循環(huán)變量i為imin,imin+1,imin+2,imax每個值, 再按循環(huán)變量j的循環(huán)執(zhí)行表達式expr。這是通常所說的二重循環(huán)命令,類似的,可以用在Do命令中再加循環(huán)范圍的方法得到多重循環(huán)命令。例例8 找出300至500之間同時能被3和11整除的自然數(shù)。n解解: Mathematica 命令為: In23:= DoIfModi,13= 0 & Modi,3= 0,Printi,i,300,500 312 351 390 429 Out23= 468n例例9 找出方程在0,100內(nèi)的整數(shù)解。n解解:nIn

20、24:= Doz =100 x - y; If5x+3y+z/3=100,Printx= ,x, y=,y, z=,z, x,0,100,y,0,100n得解x= 0 y= 25 z= 75x= 4 y= 18 z= 78x= 8 y= 11 z= 81x= 12 y= 4 z= 84100335100zyxzyx 例例10 對自然數(shù)對自然數(shù)k從從1開始到開始到10,取取s=1做賦值做賦值s =s*k,并顯示對應(yīng)的值并顯示對應(yīng)的值,直到直到s的值的值5終止。終止。 解解: In25:= s=1;Dos*=k;Prints;Ifs5,Break, k,1,10 1 2 68.3.2 For 語句

21、語句 l命令形式:命令形式:Forstat,test,incr,bodyl功能功能:以stat為初值,重復計算incr和body直到test為False終止 。這里start為初始值,test為條件,incr為循環(huán)變量修正式,body為循環(huán)體,通常由incr項控制test的變化。l注意注意: 上述命令形式中的start可以是由復合表達式提供的多個初值,如果循環(huán)體生成 Break 語句,則退出For循環(huán); 如果循環(huán)體生成Continue 語句,則由incr的增量進入For語句的下一次循環(huán)。l n例例11 指出語句指出語句For i=1;t=x,i*i10,i+,t-;Printt的初的初始值始值

22、,條件條件,循環(huán)變量修正式和循環(huán)體循環(huán)變量修正式和循環(huán)體, 分析執(zhí)行過程和分析執(zhí)行過程和顯示結(jié)果。顯示結(jié)果。n解解: 初始值為初始值為i=1;t=x, i為循環(huán)變量;條件為為循環(huán)變量;條件為i*i10;循;循環(huán)變量修正式為環(huán)變量修正式為i+;n循環(huán)體為循環(huán)體為t-;Printt;執(zhí)行過程為;執(zhí)行過程為:n 先把變量先把變量i賦初值賦初值1,變量變量t賦初值賦初值x, 因為因為1*110滿足滿足i*i10,故執(zhí)行故執(zhí)行i+, t-;Printt的操作的操作, i+ 對對i做加做加1操作操作,使使i取值為取值為2, 執(zhí)行循環(huán)體執(zhí)行循環(huán)體t-后后,t值變?yōu)橹底優(yōu)閤-1,Printt的顯的顯示結(jié)果為示

23、結(jié)果為“-1+x”。進入第二次循環(huán)時。進入第二次循環(huán)時,先判別條件是先判別條件是否成立否成立,因為有因為有2*210滿足條件滿足條件i*i10不滿足條件i*i10,故退出For循環(huán)。8.3.3 While 語句語句 l命令形式:命令形式:Whiletest,bodyl功能:功能:當當test為True時,計算body,重復對test的判斷和body的計算,直到test不為True時終止 。這里test為條件, body為循環(huán)體,通常由body控制test值的變化。如果test不為True,則循環(huán)體不做任何工作l注意注意: 上述命令中,如果循環(huán)體生成 Break 語句,則退出While循環(huán)。例例

24、12:12: 用割線法求解方程x3-2x2+7x+4=0的根,要求誤差|xk-xk-1|10-12,x2=x1-(x1-In28:= WhileAbsx0-x110-12,x2=x1-(x1-x0)x0)* *fx1/(fx1-fx0);x0=x1;x1=x2fx1/(fx1-fx0);x0=x1;x1=x2l In29:= Nx1,12In29:= Nx1,12l Out29= -0.487120155928Out29= -0.487120155928)()()(1112121110kkkkkkkxfxfxfxxxxxx例例1313 編制編制2020以內(nèi)整數(shù)加法自測程序以內(nèi)整數(shù)加法自測程序解

25、解: :In30:=For i=1,i=10,i+, In30:=For i=1,i=10,i+, t=RandomInteger,0,10; t=RandomInteger,0,10; s=RandomInteger,0,10; s=RandomInteger,0,10; Printt,+,sPrintt,+,s,=; ,=; y=Input; y=Input; Whiley!=t+sWhiley!=t+s, , Printt,+,sPrintt,+,s,=,y, Wong !Try again!;,=,y, Wong !Try again!;Printt,+,sPrintt,+,s,=;

26、y=Input ;,=; y=Input ;Printt,+,sPrintt,+,s,=,y, Good ,=,y, Good l 執(zhí)行結(jié)果為執(zhí)行結(jié)果為3+0=3+0=3+0=3 Good3+0=3 Good7+3=12 Wong!Ttry7+3=12 Wong!Ttry again! again!7+3=10 Good7+3=10 Good例例14 韋達(韋達(VieTa)在)在1593年首次給出了如下關(guān)于圓周率年首次給出了如下關(guān)于圓周率 的關(guān)系式(韋達公式)的關(guān)系式(韋達公式)n試用韋達公式來寫出計算圓周率試用韋達公式來寫出計算圓周率 近似值的近似值的Mathematica命令。命令。解解

27、: n利用利用Mathematica自定義函數(shù)命令可以輸入自定義函數(shù)命令可以輸入Mathematica命令為命令為:In31:= vietak_:=Moduleu, u=NProductCosPi/2(n+1),n,1,k,20; Return2/u In32:= Tablen, v=vietan, NPi,20- v ,n,1,10,2 Out32= 1, 3.0614674589207181738, 0.0801251946690750646, 3, 3.1365484905459392638, 0.0050441630438539746, 5, 3.1412772509327728681

28、, 0.0003154026570203704, 7, 3.1415729403670913841, 0. 0000197132227018543, 9, 3.141591421511199974, 1.232078593264 10-6 lim2coscoslimcos2121212111kvietakvietakknknknnnn令121cos2nn8.3.4 迭代語句迭代語句在數(shù)值計算中在數(shù)值計算中,經(jīng)常遇到要進行迭代計算經(jīng)常遇到要進行迭代計算,即利用迭代格式即利用迭代格式: xk+1= (x k), 已知已知x 0 來求出迭代序列來求出迭代序列x 1,x 2,這里迭代函數(shù)這里迭代函數(shù)

29、為已知函數(shù)為已知函數(shù),Mathematica 有有如下幾個命令處理這類問題如下幾個命令處理這類問題:l命令形式命令形式1:Nest迭代函數(shù)迭代函數(shù) , 迭代初值迭代初值x0,迭代次數(shù)迭代次數(shù)n 功能:根據(jù)迭代初值功能:根據(jù)迭代初值x0及迭代格式及迭代格式:xk+1= (xk), 計算出計算出xn ,并將此值作為并將此值作為 Nest語句的值。語句的值。l命令形式命令形式2:NestList迭代函數(shù)迭代函數(shù) , 迭代初值迭代初值x0,迭代次數(shù)迭代次數(shù)n 功能:根據(jù)迭代初值功能:根據(jù)迭代初值x0及迭代格式及迭代格式:xk+1= (xk), 計算出計算出x 1,x 2,xn ,并并將將 x 0,x

30、1,x 2,xn 作為作為NestList語句的值。語句的值。例例1515 根據(jù)迭代格式根據(jù)迭代格式:x:xk+1k+1=lg(x=lg(xk k+2),+2),及迭代初值及迭代初值x0=1.0,x0=1.0,(1)(1)計算出計算出x7 ,x7 ,(2)(2)顯示顯示 x0,x1,x2,x7 x0,x1,x2,x7 (3)(3)顯示顯示lg(x+2)lg(x+2)的的1,21,2次自復合函數(shù)次自復合函數(shù)l 解解: Mathematica: Mathematica命令為命令為In33:=qxIn33:=qx_:=Log10,x+2 _:=Log10,x+2 In34:=Nestq,1.,7In

31、34:=Nestq,1.,7Out34=0.375816 Out34=0.375816 In35:=NestListq,1.,7In35:=NestListq,1.,7Out35=1.,0.477121, 0.393947, 0.379115, 0.376415, Out35=1.,0.477121, 0.393947, 0.379115, 0.376415, 0.375922, 0.375832, 0.3758160.375922, 0.375832, 0.375816In36:=NestListqIn36:=NestListq, x, 2 , x, 2 Out36= Out36= 1010

32、22,102,LogLogxLogLogLogxLogx讀寫 Mathematica 文件 l當使用基于文本的 Mathematica 界面時,就需要經(jīng)常讀寫含有定義和結(jié)果的文件. 讀文件 l顯示文件 factors 的內(nèi)容 lIn1:= l讀入一個文件,返回值是文件的最后一個表達式 lIn2:=lOut2= l 當 Mathematica 找不到所要文件時,它顯示一個信息,返回值為 $Failed l In3:= l Out3= $Failed l Mathematica 的輸入文件可以包含任意數(shù)目的表達式. 每個表達式必須從新的一行開始,它 可以占有許多行. 在交互式的 Mathemati

33、ca 對話中,當表達式完成后 就進行處理. 但是在一個文件中,可以在任何位置插入一個空行, 這不產(chǎn)生任何影響.l用 file 時,Mathematica 把新表達式加在文件之后,而用 expr file 時,Mathematica 清除文件中所有內(nèi)容,然后把 expr 寫入文件.當用 或 向文件寫入表達式時,這些表達式一般是用輸入形式,以便再將他們讀入 Mathematica. 有時需要用別的形式保存表達式,這可以通過將這些表達式包含在 OutputForm 等格式指令中來實現(xiàn).l這是按輸出形式將一個表達式寫入文件 tmplIn8:= l此時 tmp 文件中的表達式是輸出形式lIn9:= l使用文件的最常用目的是保存 Mathematica 對象的定義,以便在隨后的 Mathematica 對話中再讀入它們. 算符 和 將表達式保存在文件中. 也可以用函數(shù) Save 按適當?shù)男问饺ケ4?Mathematica 對象的完整定義以便在隨后 的 Mathematica 對話中執(zhí)行. 寫出定義 l給符號 a 指定一個值 lIn10:=lOut10=l用 Save 將a的定義寫入文件lIn11:= l這是在文件中保存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論