2012年12月16日 星期日

Mathematica函數及使用方法(2)

十四、繪圖函數
  二維作圖
Plot[f,{x,xmin,xmax}] 一維函數f[x]在區間[xmin,xmax]上的函數曲線
Plot[{f1,f2..},{x,xmin,xmax}] 在一張圖上畫幾條曲線
ListPlot[{y1,y2,..}] 繪出由離散點對(n,yn)組成的圖
ListPlot[{{x1,y1},{x2,y2},..}] 繪出由離散點對(xn,yn)組成的圖
ParametricPlot[{fx,fy},{t,tmin,tmax}] 由參數方程在參數變化範圍內的曲線
ParametricPlot[{{fx,fy},{gx,gy},...},{t,tmin,tmax}]
在一張圖上畫多條參數曲線
選項:
PlotRange->{0,1} 作圖顯示的值域範圍
AspectRatio->1/GoldenRatio生成圖形的縱橫比
PlotLabel ->label 標題文字
Axes ->{False,True} 分別制定是否畫x,y軸
AxesLabel->{xlabel,ylabel}x,y軸上的說明文字
Ticks->None,Automatic,fun用什麼方式畫軸的刻度
AxesOrigin ->{x,y} 坐標軸原點位置
AxesStyle->{{xstyle}, {ystyle}}設置軸線的線性顏色等屬性
Frame ->True,False 是否畫邊框
FrameLabel ->{xmlabel,ymlabel,xplabel,yplabel}
邊框四邊上的文字
FrameTicks同Ticks 邊框上是否畫刻度
GridLines 同Ticks 圖上是否畫柵格線
FrameStyle ->{{xmstyle},{ymstyle}設置邊框線的線性顏色等屬性
ListPlot[data,PlotJoined->True] 把離散點按順序連線
PlotSytle->{{style1},{style2},..}曲線的線性顏色等屬性
PlotPoints->15 曲線取樣點,越大越細緻

三維作圖
Plot3D[f,{x,xmin,xmax}, {y,ymin,ymax}]
二維函數f[x,y]的空間曲面
Plot3D[{f,s}, {x,xmin,xmax}, {y,ymin,ymax}]
同上,曲面的染色由s[x,y]值決定
ListPlot3D[array] 二維資料陣array的立體高度圖
ListPlot3D[array,shades]同上,曲面的染色由shades[資料]值決定
ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax}]
二元數方程在參數變化範圍內的曲線
ParametricPlot3D[{{fx,fy,fz},{gx,gy,gz},...},{t,tmin,tmax}]
多條空間參數曲線
選項:
ViewPoint ->{x,y,z} 三維視點,默認為{1.3,-2.4,2}
Boxed -> True,False 是否畫三維長方體邊框
BoxRatios->{sx,sy,sz} 三軸比例
BoxStyle 三維長方體邊框線性顏色等屬性
Lighting ->True 是否染色
LightSources->{s1,s2..} si為某一個光源si={{dx,dy,dz},color}
color為燈色,向dx,dy,dz方向照射
AmbientLight->顏色函數 慢散射光的光源
Mesh->True,False 是否畫曲面上與x,y軸平行的截面的截線
MeshStyle 截線線性顏色等屬性
MeshRange->{{xmin,xmax}, {ymin,ymax}}網格範圍
ClipFill->Automatic,None,color,{bottom,top}
指定圖形頂部、底部超界後所畫的顏色
Shading ->False,True 是否染色
HiddenSurface->True,False 略去被遮住不顯示部分的資訊
   
等高線
ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}]
二維函數f[x,y]在指定區間上的等高線圖
ListContourPlot[array] 根據二維陣列array數值畫等高線
選項:
Contours->n 畫n條等高線
Contours->{z1,z2,..} 在zi處畫等高線
ContourShading -> False 是否用深淺染色
ContourLines -> True 是否畫等高線
ContourStyle -> {{style1},{style2},..}等高線線性顏色等屬性
FrameTicks 同上
 
密度圖
DensityPlot[f,{x,xmin,xmax},{y,ymin,ymax}]
二維函數f[x,y]在指定區間上的密度圖
ListDensityPlot[array] 同上
 
圖形顯示
Show[graphics,options] 顯示一組圖形物件,options為選項設置
Show[g1,g2...] 在一個圖上疊加顯示一組圖形物件
GraphicsArray[{g1,g2,...}]在一個圖上分塊顯示一組圖形物件
SelectionAnimate[notebook,t]把選中的notebook中的圖畫迴圈放映
 
選項:(此處選項適用於全部圖形函數)
Background->顏色函數 指定繪圖的背景顏色
RotateLabel -> True 豎著寫文字
TextStyle 此後輸出文字的字體,顏色大小等
ColorFunction->Hue等 把其作用於某點的函數值上決定某點的顏色
RenderAll->False 是否對遮擋部分也染色
MaxBend 曲線、曲面最大彎曲度
 
繪圖函數(續)
  圖元函數
Graphics[prim, options]
prim為下面各種函數組成的表,表示一個二維圖形物件
Graphics3D[prim, options]
prim為下面各種函數組成的表,表示一個三維圖形物件
SurfaceGraphics[array, shades]表示一個由array和shade決定的曲面物件
ContourGraphics[array]表示一個由array決定的等高線圖物件
DensityGraphics[array]表示一個由array決定的密度圖物件
 
以上定義圖形物件,可以進行對變數賦值,合併顯示等操作,也可以存檔
 
Point[p] p={x,y}或{x,y,z},在指定位置畫點
Line[{p1,p2,..}]經由pi點連線
Rectangle[{xmin, ymin}, {xmax, ymax}] 畫矩形
Cuboid[{xmin,ymin,zmin},{xmax,ymax,zmax}]由對角線指定的長方體
Polygon[{p1,p2,..}] 封閉多邊形
Circle[{x,y},r] 畫圓
Circle[{x,y},{rx,ry}] 畫橢圓,rx,ry為半長短軸
Circle[{x,y},r,{a1,a2}] 從角度a1~a2的圓弧
Disk[{x, y}, r] 填充的園、橢圓、圓弧等參數同上
Raster[array,ColorFunction->f] 顏色柵格
Text[expr,coords] 在座標coords上輸出運算式
PostScript["string"] 直接用PostScript圖元語言寫
Scaled[{x,y,..}] 返回點的座標,且均大於0小於1
 
顏色函數(指定其後繪圖的顏色)
GrayLevel[level] 灰度level為0~1間的實數
RGBColor[red, green, blue] RGB顏色,均為0~1間的實數
Hue[h, s, b] 亮度,飽和度等,均為0~1間的實數
CMYKColor[cyan, magenta, yellow, black] CMYK顏色
 
其他函數(指定其後繪圖的方式)
Thickness[r] 設置線寬為r
PointSize[d] 設置繪點的大小
Dashing[{r1,r2,..}] 虛線一個單元的間隔長度
ImageSize->{x, y} 顯示圖形大小(圖元為單位)
ImageResolution->r 圖形解析度r個dpi
ImageMargins->{{left,right},{bottom,top}}四邊的空白
ImageRotated->False 是否旋轉90度顯示
  —————————————————————————————————————
十五、流程控制
分支
If[condition, t, f] 如果condition為True,執行t段,否則f段
If[condition, t, f, u] 同上,即非True又非False,則執行u段
Which[test1,block1,test2,block2..] 執行第一為True的testi對應的blocki
Switch[expr,form1,block1,form2,block2..]
執行第一個expr所匹配的formi所對應的blocki段
迴圈
Do[expr,{imax}] 重複執行expr imax次
Do[expr,{i,imin,imax}, {j,jmin,jmax},...]多重迴圈
While[test, body] 迴圈執行body直到test為False
For[start,test,incr,body]類似於C語言中的for,注意","與";"的用法相反
examp: For[i=1;t =x,i^2<10,i++,t =t+i;Print[t]]
異常控制
Throw[value] 停止計算,把value返回給最近一個Catch處理
Throw[value, tag] 同上,
Catch[expr] 計算expr,遇到Throw返回的值則停止
Catch[expr, form] 當Throw[value, tag]中Tag匹配form時停止
 其他控制
Return[expr] 從函數返回,返回值為expr
Return[ ] 返回值Null
Break[ ] 結束最近的一重迴圈
Continue[ ] 停止本次迴圈,進行下一次迴圈
Goto[tag] 無條件轉向Label[Tag]處
Label[tag] 設置一個中斷點
Check[expr,failexpr] 計算expr,如果有出錯資訊產生,則返回failexpr的值
Check[expr,failexpr,s1::t1,s2::t2,...]當特定資訊產生時則返回failexpr
CheckAbort[expr,failexpr]當產生abort資訊時放回failexpr
Interrupt[ ] 中斷運行
Abort[ ] 中斷運行
TimeConstrained[expr,t] 計算expr,當耗時超過t秒時終止
MemoryConstrained[expr,b]計算expr,當耗用記憶體超過b位元組時終止運算
互動式控制
Print[expr1,expr2,...] 順次輸出expri的值
examp: Print[ "X=" , X//N , " " ,f[x+1]];
Input[ ] 產生一個輸入對話方塊,返回所輸入任意運算式
Input["prompt"] 同上,prompt為對話方塊的提示
Pause[n] 運行暫停n秒
  —————————————————————————————————————
十六、函數編程
(*函數編程是Mathematica中很有特色也是最靈活的一部分,它充分體現了 *)
(*Mathematica的“一切都是運算式”的特點,如果你想使你的Mathematica程 *)
(*序快於高階語言,建議你把本部分搞通*)
 
純函數
Function[body]或body& 一個純函數,建立了一組對應法則,作用到後面的運算式上
Function[x, body] 單引數純函數
Function[{x1,x2,...},body]多引數純函數
#,#n 純函數的第一、第n個引數
## 純函數的所有引數的序列
examp: ^& [2,3] 返回第一個參數的第二個參數次方
 
映射
Map[f,expr]或f/@expr 將f分別作用到expr第一層的每一個元上得到的列表
Map[f,expr,level] 將f分別作用到expr第level層的每一個元上
Apply[f,expr]或f@@expr 將expr的“頭”換為f
Apply[f,expr,level] 將expr第level層的“頭”換為f
MapAll[f,expr]或f//@expr把f作用到expr的每一層的每一個元上
MapAt[f,expr,n] 把f作用到expr的第n個元上
MapAt[f,expr,{i,j,...}] 把f作用到expr[[{i,j,...}]]元上
MapIndexed[f,expr] 類似MapAll,但都附加其映射元素的位置列表
Scan[f, expr] 按順序分別將f作用於expr的每一個元
Scan[f,expr,levelspec] 同上,僅作用第level層的元素
 
複合映射
Nest[f,expr,n] 返回n重複合函數f[f[...f[expr]...]]
NestList[f,expr,n] 返回0重到n重複合函數的列表{expr,f[expr],f[f[expr]]..}
FixedPoint[f, expr] 將f複合作用於expr直到結果不再改變,即找到其不定點
FixedPoint[f, expr, n] 最多複合n次,如果不收斂則停止
FixedPointList[f, expr] 返回各次複合的結果列表
FoldList[f,x,{a,b,..}] 返回{x,f[x,a],f[f[x,a],b],..}
Fold[f, x, list] 返回FoldList[f,x,{a,b,..}]的最後一個元
ComposeList[{f1,f2,..},x]返回{x,f1[x],f2[f1[x]],..}的複合函數列表
Distribute[f[x1,x2,..]] f對加法的分配率
Distribute[expr, g] 對g的分配率
Identity[expr] expr的全等變換
Composition[f1,f2,..] 組成複合純函數f1[f2[..fn[ ]..]
Operate[p,f[x,y]] 返回p[f][x, y]
Through[p[f1,f2][x]] 返回p[f1[x],f2[x]]
 
Compile[{x1,x2,..},expr]編譯一個函數,編譯後運行速度可以大大加快
Compile[{{x1,t1},{x2,t2}..},expr] 同上,可以制定函數參數類型
  —————————————————————————————————————
十七、替換規則
 
lhs->rhs 建立了一個規則,把lhs換為rhs,並求rhs的值
lhs:>rhs 同上,只是不立即求rhs的值,知道使用該規則時才求值
Replace[expr,rules] 把一組規則應用到expr上,只作用一次
expr /. rules 同上
expr //.rules 將規則rules不斷作用到expr上,直到無法作用為止
Dispatch[{lhs1->rhs1,lhs2->rhs2,...}]綜合各個規則,產生一組優化的規則組
  >************************************************************************<
Mathematica的常見問題
>************************************************************************<
 1).Mathematica 可以定義變數為實數麼?
  1. 在Simplify/FullSimplify可以使用\[Element],如
Simplify[Re[a+b*I],a\[Element]Reals]
2. 可以使用ComplexExpand[]來展開運算式,默認:符號均為實數:
Unprotect[Abs];
Abs[x_] := Sqrt[Re[x]^2 + Im[x]^2];
ComplexExpand[Abs[a + b*I], a]
3. 使用/:,對符號關聯相應的轉換規則
x /: Im[x] = 0;
x /: Re[x] = x;
y /: Im[y] = 0;
y /: Re[y] = y;
Re[x+y*I]
 ===================================
2).Mathematica中如何中斷運算?
  Alt+. 直接終止當前執行的運算
Alt+, 詢問是否終止或者繼續
如果不能終止,用功能表Kernel\Quit Kernal\Local來退出當前運算
  ===================================
3).請高手推薦Mathematica參考書
  我迄今為止看到的最好的一本就是Mathematica自己帶的幫助裏面的The Mathematica Book,內容全面,循序漸近,非常容易學習使用。其他所見到的一些中文書籍基本上都是直接翻譯幫助的內容,沒有什麼
新意。
===================================
4).請問在Mathematica中如何畫極座標圖?
  << Graphics`Graphics`
PolarPlot[]
PolarListPlot[]
  ===================================
5).Mathematica中如何對離散點作積分?
 離散的點通過插值或者擬合就可以得到連續的函數,然後可以對該函數求積分和微分。下面是一個例子:
 f[x_] := NIntegrate[Sin[Cos[x]], {x, 0, a}];
data = Table[{a, f[x]}, {a, 0, 10}];
expr = Interpolation[data];
 
Plot[expr[a], {a, 0, 10}];
Plot[Evaluate[D[expr[a], a]], {a, 0, 10}]
 
如果想實現Matlab中的cumsum的功能:
Drop[FoldList[Plus, 0, {a1,a2,…,an}], 1]
  ===================================
6).在Mathematica中創立palette?
  在幫助中查找"Creating Palettes (Windows)"
  ===================================
7).Mathematica可以作用戶介面嗎?
  Mathematica的GUI設計是通過它的互動式的NoteBook實現的,可以參考Mathematica幫助檔中的demo例子,或參考幫助2.10.6
  ===================================
8).Mathematica中如何使用Solve[]求解的結果?
  Solve[]求解的結果是以一個"表"或者"替換規則"的形式給出來的,並沒有把結果真正替換給未知量。

如果
sol = Solve[a*x^2 + b*x + c == 0, x];
x=x /. sol[[1]]
  也可以使用對表元素的操作把結果取出來,比如在上面的例子中:
 x1=sol[[1,1,2]]
x2=sol[[2,1,2]]

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。