ica,那么以下幾點請你一定牢牢記住:
?如果你是第一次使用MathematMathematica中大寫小寫是有區別的,如Name、name、NAME等是不同的變量名或函數名。
系統所提供的功能大部分以系統函數的形式給出,內部函數一般寫全稱,而且一定是以大寫英文字母開頭,如Sin[x],Conjugate[z]等。
乘法即可以用*,又可以用空格表示,如2 3=2*3=6 ,x y,2 Sin[x]等;乘冪可以用“^”表示,如x^0.5,Tan[x]^y。
自定義的變量可以取幾乎任意的名稱,長度不限,但不可以數字開頭。
當你賦予變量任何一個值,除非你明顯地改變該值或使用Clear[變量名]或“變量名=.”取消該值為止,它將始終保持原值不變。
一定要注意四種括號的用法:()圓括號表示項的結合順序,如(x+(y^x+1/(2x)));[]方括號表示函數,如Log[x],BesselJ[x,1];{}大括號表示一個“表”(一組數字、任意表達式、函數等的集合),如{2x,Sin[12 Pi],{1+A,y*x}};[[]]雙方括號表示“表”或“表達式”的下標,如a[[2,3]]、{1,2,3}[[1]]=1。
Mathematica的語句書寫十分方便,一個語句可以分為多行寫,同一行可以寫多個語句(但要以分號間隔)。當語句以分號結束時,語句計算后不做輸出(輸出語句除外),否則將輸出計算的結果。
一.數的表示及計算
1.在Mathematica中你不必考慮數的精確度,因為除非你指定輸出精度,Mathematica總會以絕對精確的形式輸出結果。例如:你輸入
In[1]:=378/123,系統會輸出Out[1]:=126/41,如果想得到近似解,則應輸入
In[2]:=N[378/123,5],即求其5位有效數字的數值解,系統會輸出Out[2]:=3.073
2,另外Mathematica還可以根據你前面使用的數字的精度自動地設定精度。
Mathematica與眾不同之處還在于它可以處理任意大、任意小及任意位精度的數值,如100^7000,2^(-2000)等數值可以很快地求出,但在其他語言或系統中這是不可想象的,你不妨試一試N[Pi,1000]。
Mathematica還定義了一些系統常數,如上面提到的Pi(圓周率的精確值),還有E(自然對數的底數)、I(復數單位),Degree(角度一度,Pi/180),Infinity(無窮大)等,不要小看這些簡單的符號,它們包含的信息遠遠大于我們所熟知的它們的近似值,它們的精度也是無限的。
?
二.“表”及其用法
“表”是Mathematica中一個相當有用的數據類型,它即可以作為數組,又可以作為矩陣;除此以外,你可以把任意一組表達式用一個或一組{}括起來,進行運算、存儲。可以說表是任意對象的一個集合。它可以動態地分配內存,可以方便地進行插入、刪除、排序、翻轉等等幾乎所有可以想象到的操作。
如果你建立了一個表,你可以通過下表操作符[[]](雙方括號)來訪問它的每一個元素,如我們定義table={2,Pi,Sin[x],{aaa,A*I}}為一個表,那么table[[1]]就為2,table[[2]]就是Pi,而table[[3,1]]表示嵌套在table中的子表{aaa,A*I}的第一個元素即aaa,table[[3,2]]表示{aaa,A*I}第二個元素即A*I。總之,表每一層次上并列的部分用逗號分割,表可以無窮嵌套。
你可以通過Append[表,表達式]或Prepend[表,表達式]把表達式添加到表的最前面或最后面,如Append[{1,2,3},a]表示{1,2,3,a}。你還可以通過Union[表1,表2,......],Jion[表1,表2,......]來把幾個表合并為一個表,二者不同在于Union在合并時刪除了各表中重復的元素,而后者僅是簡單的合并;你還可以使用Flatten[表]把表中所有子表"抹平"合并成一個表,而Patition[表,整數n]把表按每n個元素分段作為子表,集合成的表。如Flatten[{1,2,{Sin[x],dog},{{y}}}]表示{1,2,Sin[x],y},而Partition[{1,2,Sin[x],y},2]把表每兩個分段,結果為{{1,2},{Sin[x],y}};還可以通過Delete[表,位置]、Insert[表,位置]來向表中按位置插入或刪除元素,如要刪除上面提到的table中的aaa,你可以用Delete[table,{3,1}]來實現;Sort[表]給出了表中各元素的大小順序,Reverse[表]、RotateLeft[表,整數n]、RotateRight[表,整數n]可以分別將一個表進行翻轉、左轉n個元素、右轉n個元素等操作,Length[表]給出了表第一個層次上的元素個數,Position[表,表達式]給出了表中出現該表達式的位置,Count[表,表達式]則給出表達式出現的次數。各種表的操作函數還有很多,這里就不再一一介紹了。
?
三.圖形函數
Mathematica的圖形函數十分豐富,用寥寥幾句就可以畫出復雜的圖形,而且可以通過變量和文件存儲和顯示圖形,具有極大的靈活性。
圖形函數中最有代表性的函數為Plot[表達式,{變量,下限,上限},可選項],(其中表達式還可以是一個"表達式表",這樣可以在一個圖里畫多個函數);變量為自變量;上限和下限確定了作圖的范圍;可選項可要可不要,不寫系統會按默認值作圖,它表示對作圖的具體要求。例如Plot[Sin[x],{x,0,2*Pi},AspectRatio-1]表示在0 .二維函數作圖 Plot[函數f,{x,xmin,xmax},選項] 在區間{x,xmin,xmax}上,按選項的要求畫出函數f的圖形 Plot[{函數1,函數2},{x,xmin,xmax},選項] 在區間{x,xmin,xmax}上,按選項的要求畫出幾個函數的圖形? 圖一.用Plot生成x*Sin[1/x]的圖形 .二維參數畫圖函數 ParametricPlot[{x[t],y[t]},{t,t0,t1},選項] 畫一個X軸,Y軸坐標為{x[t],y[t]},參變量t在[t0,t1]中的參數曲線 圖二.用ParametricPlot生成的圖形 ? .三維函數作圖 Plot3D[f[x,y],{x,x0,x1},{y,y0,y1},選項] 在區域上,畫出空間曲面f[x,y]. 圖3.用Plot3D生成的Sin[x]*Cos[y]的三維圖形 除Plot,二維參數方程作圖的ParametricPlot[{x(t),y(t)},{t,下限,上限},可選項]、三維作圖的Plot3D[二維函數表達式,{變量1,下限,上限}, {變量2,下限,上限},可選項}]、三維參數方程作圖的ParametricPlot3D[{x(u,v),y(u,v),z(u,v)},{u,下限,上限},{v,下限,上限},可選項]外,還有畫二維等高線圖ContourPlot[二元表達式,{變量1,下限,上限}, {變量2,下限,上限},可選項}]、畫二維密度圖的DensityPlot[二元表達式,{變量1,下限,上限}, {變量2,下限,上限},可選項}]等等不一而足。 除使用上述函數作圖以外,Mathematica還可以象其他語言一樣使用圖形元語言作圖,如畫點函數Point[x,y],畫線函數Line[x1,y1,x2,y2],畫圓的Circle[x,y,r],畫矩形和多邊形的Rectangle和Polygon,字符輸出的Text[字符串,輸出坐標],還有顏色函數RGBColor[red,green,blue]、Hue[],GrayLevel[gray]來描述顏色的亮度、灰度、飽和度,用PointSize[相對尺度]、Thickness[相對尺度]來表示點和線的寬度。總之Mathematica可以精確地調節圖形的每一個特征。 四.數學函數的用法 Mathematica系統內核提供了豐富的數學計算的函數,包括極限、積分、微分、最值、極值、統計、規劃等數學的各個領域,復雜的數學問題簡化為對函數的調用,極大地提高了解決問題的效率。 Mathematica提供了所有的三角、反三角、雙曲、反雙曲、各種特殊函數(如貝塞爾函數系、橢圓函數等),各種復數函數(如Im[z],Re[z],Conjugate[z], Abs[z],Arg[z]),各種隨機函數(如Random[n]可以通過不同的參數產生任意范圍內整型、實型任意分布的隨機數),矩陣運算函數(如求特征值特征向量的EigenVector[],EigenValue[],求逆的Inverse[]等)。 Mathematica還提供了大量數學操作的函數,如取極限的Limit[f[x],{x,a}],求微分的D[f[x],x],全微分的Dt[f[x],x],不定積分的Integrate[f[x],x]和定積分的Integrate[f[x],{x,a,b}],解任意方程的Solve[lhs=rhs,x]及微分方程的DSolve[lhs=rhs,x],解冪級數和付立葉展開的Series[f[x]],Fourier[f[x]]及其逆變化InverseSeries,InverseFourier, 求和函數Sum[],求積函數Product[],以上函數均可以適用于多維函數或多維方程。 Mathematica中還有相當數量的數值計算函數,最常用的是N[表達式,整數]可以求出表達式精確到指定有效數字的數值解,還有如數值求積分的NIntegrate[],求方程數值根的NSolve[]和NDSolve[],最小、最大值的NFindMinimum[]和NFindMaximum[]等等。 Mathematica還有各種表達式操作的函數,如取分子、分母的 Numerator[expr] , Denormator[expr],取系數的Coefficient[expr],因式分解的Factor[expr],以及展開的Expand[expr]和ExpandAll[expr],表達式化簡的Simplify[expr]等。expr代表一個任意的表達式。 . 求極限 計算函數極限的一般形式是: Limit[expr,x->x0] x->x0時函數的極限 Limit[expr,x->x0,Direction->-1] x->時函數的極限 Limit[expr,x->x0, Direction->1] x->時函數的極限 In[1]:= Out[1]:=1 . 微商和微分 在Mathematica中能方便地計算任何函數表達式的任意階微商(導數).如果f是一元函數,D[f,x]表示;如果f是多元函數,D[f,x]表示.微商函數的常用形式如下: D[f,x] ? ? Out[1]:= 下面列出全微分函數Dt的常用形式及其意義: Dt[f] 全微分 Dt[f,x] 全導數 Dt[f,x1,x2,…] 多重全導數 In[1]:=Dt[x^2+y^2] Out[1]:= . 不定積分和定積分 Integreate函數主要計算只含有1“簡單函數”的被積函數. “簡單函數”包括有理函數、指數函數、對數函數和三角函數與反三角函數。不定積分一般形式如下: Integrate[f,x] 計算不定積分 Integrate[f,x,y] 計算不定積分 Integrate[f,x,y,z] 計算不定積分 In[1]:= Out[1]:= In[2]:= Out[2]:= 2.定積分 計算定積分的命令和計算不定積分是同一個Integrate函數,在計算定積分時,除了要給出變量外還要給出積分的上下限。當定積分算不出準確結果時,用N[%]命令總能得到其數值解.Nintegrate也是計算定積分的函數,其使用方法和形式和Integrate函數相同.用Integrate函數計算定積分得到的是準確解,Nintegrate函數計算定積分得到的是近似數值解.計算多重積分時,第一個自變量相應于最外層積分放在最后計算. Integrate[f,{x,a,b}] 計算定積分 NIntegrate[f,{x,a,b}] 計算定積分 Integrate[f,{x,a,b},{y,c,d}] 計算定積分 NIntegrate[f,{x,a,b},{y,c,d}] 計算定積分 In[1]:= Out[1]:= In[2]:= Out[2]:= In[3]:= Out[3]:= . 冪級數 冪級數展開函數Series的一般形式: Series[expr,{x,x0,n}] 將expr在x=x0點展開到n階的級數 Series[expr,{x,x0,n},{y,y0,m}] 先對y展開到m階再對x展開n階冪級數 In[1]:= Out[1]:= In[2]:= Out[2]:= In[3]:= Out[3]:= . 常微分方程 Dsolve[eqns,y[x],x] 解y(x)的微分方程或方程組eqns,x為變量 Dsolve[eqns,y,x] 在純函數的形式下求解 NDsolve[eqns,y[x],x,{xmin,xmax}] 在區間{xmin,xmax}上求解變量x的數的形式下求解常微分方程和常微分方程組eqns的數值解 In[1]:= Out[1]:= In[2]:= Out[2]:= In[3]:= .線性代數 In[1]:= Out[1]:= (*矩陣每一行元素用一對{}括起來*) In[2]:= Out[2]:= In[3]:= (*IndentityMatrix[n]生成n維矩陣*) Out[3]:= In[4]:= (*生成對角元素為表元素的對角矩陣*) Out[4]:= In[5]:= (*TableForm[m]或MatrixForm[m]按矩陣形式輸出m*) Out[5]:= 一個矩陣可用一個變量表示,如In[2]所示U是一個矩陣,則U[[I]]表示U的第I行的N個元素;Transpose[U][[j]]表示U的第J行的M個元素;U[[I,j]]或a[I,j]表示U的第I行第J列元素;U[[{i1,i2,…,ip},{j1,j2,…,jq}]]表示由行為{i1,i2,…,ip}和列為{j1,j2,…,jq}組成的子矩陣. A為矩陣,c為標量,c與A中的每一個元素相加 A,B為同階矩陣或向量,A與B的對應元素相加 A為矩陣,c為標量,c與A中的每個元素相乘 向量U與V的內積 矩陣A與矩陣B相乘,要求A的列數等于B的行數 計算矩陣M的行列式的值 M的轉置矩陣(或) 計算矩陣M的逆矩陣() 計算矩陣A的全部(準確解)特征值 計算矩陣A的全部(數值解)特征值 計算矩陣A的全部(準確解)特征向量 計算矩陣A的全部(數值解)特征向量 計算矩陣A的所有(準確解)特征值和特征向量 計算矩陣A的所有(數值解)特征值和特征向量
意義 NullSpace[A]
?
?
?
In[1]:=D[x^x,x]
?
?
?
?
?
?
?
用Series展開后,展開項中含有截斷誤差
?
求解常微分方程和常微分方程組的函數的一般形式如下:
Out[3]:=
?
定義一個矩陣,可用函數Table或Array.當矩陣元素能用一個函數表達式時,用函數Table在定義矩陣大小的同時也給每個矩陣元素定義確定的值.用函數Range只能定義元素為數值的向量.Array只能用于定義向量、矩陣和張量,并規定矩陣和張量的元素下標從1開始.Array的一般形式: Array[向量元素名,n,f] 定義下標從f開始的有n個元素的向量,當f是1時可省略. Array[矩陣元素名,{m,n}] 定義m行n列的矩陣.其中:矩陣元素名是一個標識符,表示矩陣元素的名稱,當循環范圍是{u,v,w}時定義一個張量. Table[表達式f,循環范圍] 表達式f表示向量或矩陣元素的通項公式;循環范圍定義矩陣的大小. 循環范圍的一般形式:{循環變量名,循環初值,循環終值,循環步長}. 在Array或Table的循環范圍表示方法略有區別.請在下面的實例中注意觀察.
?
?
表達式
意義
A+c
A+B
cA
U.V
A.B
Det[M]
Transepose[M]
Inverse[M]
Eigenvalus[A]
Eigenvalus[N[A]]
Eigenvectors[A]
Eigenvectors[N[A]]
Eigensystem[A]
Eigensystem[N[A]]
?
?
在Mathematica中用LinerSolve[A,B],求解滿足AX=B的一個解.如果A的行列式不為零,那么這個解是方程組的唯一解; 如果A的行列式是零,那么這個解是方程組的一個特解,方程組的全部解由基礎解系向量的線性組合加上這個特解組成. NullSpace[A]計算方程組AX=0的基礎解系的向量表,用LinerSolve[A,B]和NullSpace[A]聯手解出方程組AX=B的全部解. Mathematica中還有一個美妙的函數RowReduce[A],它對A的行向量作化間成梯形的初等線性變換.用RowReduce可計算矩陣的秩,判斷向量組是線性相關還是線性無關和計算極大線性無關組等工作.
解方程組函數
RowReduce[A]
作行的線性組合化簡A,A為m行n列的矩陣
LinerSolve[A,B]
求解滿足AX=B的一個解,A為方陣
求解方程組AX=0的基礎解系的向量表, A為方陣
例:已知A=,計算A的秩,計算AX=0的基礎解系.
In[1]:= In[2]:=
Out[2]:= (*顯然,A的秩是2*)
In[3]:=
Out[3]:= (*A的兩個線性無關解*)
五.程序流程控制
?
循環語句有For[賦初值,循環條件,增量語句,語句塊]表示如果滿足循環條件,則執行語句塊和增量語句,直到不滿足條件為止,While[test,block]表明如果滿足條件test則反復執行語句塊block,否則跳出循環,Do[block,{i,imin,imax,istep}]與前者功能是相同的。還有Goto[lab], Label[lab]提供了程序中無條件跳轉,Continue[]和Break[]提供了繼續循環或跳出循環的控制,Catch[語句塊1]和Throw[語句塊2]提供了運算中對異常情況的處理。另外,在程序中書寫注釋可以用一對"(* *)"括起來,注釋可以嵌套。
?
六.其他
?
1. 使用幫助,Mathematica的幫助文件提供了Mathematica內核的基本用法的說明,十分詳細,可以參照學習。
2. 你可以使用"? 符號名"或"??符號名"來獲得關于該符號(函數名或其他)的粗略或詳細介紹。符號名中還可以使用通配符,例如?M*,則系統將給出所有以M開頭的關鍵詞和函數名,再如??For將會得到關于For語句的格式和用法的詳細情況。
3. 在Mathematica的編輯界面中輸入語句和函數,確認光標處于編輯狀態(不斷閃爍),然后按Insert鍵來對這一段語句進行求值。如果語句有錯,系統將用紅色字體給出 出錯信息,你可以對已輸入的語句進行修改,再運行。如果運行時間太長,你可以通過Alt+.(Alt+句號)來中止求值。
4. 對函數名不確定的,可先輸入前面幾個字母(開頭一定要大寫),然后按Ctrl+K,系統會自動補全該函數名。
?
七.應用例子
量子一維、二維簡諧振子問題
量子一維簡諧振子圖像
量子二維簡諧振子圖像
評論
查看更多