您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 08-一般数学函数的处理与分析
MATLAB程式設計進階篇一般數學函數的處理與分析張智星jang@cs.nthu.edu.tw~jang清大資工系多媒體檢索實驗室MATLAB程式設計進階篇:一般數學函數的處理與分析8-1MATLAB的函數表示法函數(Functions)MATLAB指令須以字串形式輸入函數或是函式握把(FunctionHandles)的方式輸入此函數MATLAB指令可對數學函數進行運算與分析數值積分最佳化(Optimization,求函數的極大極小值)求解非線性方程式的根求解微分方程式MATLAB程式設計進階篇:一般數學函數的處理與分析MATLAB的數學函數範例MATLAB數學函數是以M檔案(副檔名為m)表示Ex.以下的數學式子,寫成檔案名稱為humps.m的MATLAB數學函數顯示其位置,可輸入whichhumpsC:\ProgramFiles\MATLAB71\toolbox\matlab\demos\humps.m上述的函數已內建於MATLAB目錄之下604.0)9.0(101.0)3.0(1)(22xxxfMATLAB程式設計進階篇:一般數學函數的處理與分析提示顯示humps函數的內容,可輸入typehumpshumps是單輸入函數,peaks是雙輸入函數,兩者都是MATLAB常被用到的測試函數「函式」和「函數」都代表「functions」,通常「函數」表「mathematicfunction」,「函式」表「subroutinesorfunctionsinaprogramminglanguage」,兩者有時候會混用MATLAB程式設計進階篇:一般數學函數的處理與分析8-2數學函數的作圖使用函式握把(FunctionHandle)來表示:這是比較新的方式,適用於MATLAB6.x&7.x,例如使用@humps來代表humps.m函式。用fplot指令進行數學函數作圖畫出humps函數在[0,2]間的曲線範例8-1:fplot01.msubplot(2,1,1);fplot('humps',[0,2]);%使用字串指定函式subplot(2,1,2);fplot(@humps,[02]);%使用函式握把來指定函式00.20.40.60.811.21.41.61.82-5005010000.20.40.60.811.21.41.61.82-50050100MATLAB程式設計進階篇:一般數學函數的處理與分析改變x、y的區間可同時改變x和y的區間範例8-2:fplot02.mx的區間為[0,1]y的區間為[5,25]gridon指令用於畫出x、y平面的格線(Grid)fplot('humps',[01525]);gridon%畫出格線00.10.20.30.40.50.60.70.80.91510152025MATLAB程式設計進階篇:一般數學函數的處理與分析字串的數學方程式作圖fplot也接受「當場表示」的數學函數範例8-3:fplot021.msubplot(2,1,1);fplot('sin(2*x)+cos(x)',[-10,10])%使用字串指定函式subplot(2,1,2);fplot(@(x)sin(2*x)+cos(x),[-10,10])%使用函式握把來指定函式-10-8-6-4-20246810-2-1012-10-8-6-4-20246810-2-1012MATLAB程式設計進階篇:一般數學函數的處理與分析對多個函數作圖fplot也可同時對多個函數作圖函數須放入一個向量範例8-4:fplot022.mx是行向量(ColumnVector)[sin(x),exp(-x)]是二個行向量每個行向量代表一個函數(即一條曲線)fplot(@(x)[sin(x),exp(-x)],[0,10])012345678910-1-0.8-0.6-0.4-0.200.20.40.60.81MATLAB程式設計進階篇:一般數學函數的處理與分析產生X座標點fplot是描點作圖,類似plot(x,y)x座標點的密度根據函數值的變化決定顯示fplot所產生的x座標點範例8-5:fplot03.m函數變化平緩處,產生稀疏的點函數變化劇烈處,產生緊密的點[x,y]=fplot(@humps,[-1,2]);plot(x,y,'-o');-1-0.500.511.52-20020406080100MATLAB程式設計進階篇:一般數學函數的處理與分析產生更密的X座標點(I)欲產生更密的x座標點fplot指令加入相對容忍度(Tolerance)的輸入引數範例8-6:fplot04.msubplot(2,1,1);fplot(@(x)sin(1./x),[0.01,0.1]);subplot(2,1,2);fplot(@(x)sin(1./x),[0.01,0.1],0.0001);MATLAB程式設計進階篇:一般數學函數的處理與分析產生更密的X座標點(II)第一圖,fplot指令使用預設相對容忍度,其值為0.002第二圖,相對容忍度被設為0.0001可得更準確的圖形,但也要花更多計算及作圖時間0.010.020.030.040.050.060.070.080.090.1-1-0.500.510.010.020.030.040.050.060.070.080.090.1-1-0.500.51MATLAB程式設計進階篇:一般數學函數的處理與分析ezplot指令ezplot指令和fplot指令類似,但使用更為簡便若要畫出圖形範例8-7:ezplot01.m參數式函數的參數預設範圍為-2*pi到2*pi之間ezplot(@(x)x^3-x^2+x);-6-4-20246-300-250-200-150-100-50050100150200xx3-x2+xMATLAB程式設計進階篇:一般數學函數的處理與分析參數式曲線ezplot也可畫出參數式的曲線範例8-8:ezplot02.m參數式函數的參數預設範圍仍是-2*pi到2*pi之間ezplot(@(t)sin(3*t),@(t)cos(5*t));-1-0.500.51-0.8-0.6-0.4-0.200.20.40.60.81xyx=sin(3t),y=cos(5t)MATLAB程式設計進階篇:一般數學函數的處理與分析隱函數作圖ezplot指令可用於隱函數作圖範例8-9:ezplot03.mezplot(@(x,y)x^3+2*x^2-3*x+5-y^2+10);-6-4-20246-6-4-20246xyx3+2x2-3x+5-y2+10=0MATLAB程式設計進階篇:一般數學函數的處理與分析8-3函數的求根fzero指令用於單變數函數的求根使用語法x=fzero(fun,x0)fun是欲求根的函數(以字串表示)x0是一個起始點或起始區間由x0指定一個起始點或起始區間進行求根MATLAB程式設計進階篇:一般數學函數的處理與分析x0不同對fzero的影響fzero指令根據x0不同而執行下列動作若x0為一個起始點fzero會自動找出附近包含零點(即根,或函數變號點)的區間逐步縮小此區間以找出零點若fzero無法找出此區間,傳回NaN若已知使函數值不同號的兩點由x0直接指定尋根的區間fzero更快速找到位於此區間內的根MATLAB程式設計進階篇:一般數學函數的處理與分析求根範例-1找出humps在x=1.5附近的根,並驗算範例8-10:fzero01.mfzero先找到1.5附近變號的兩點,即1.26及1.6697再找出humps的零點x=fzero(@humps,1.5);%求靠近1.5附近的根y=humps(x);%帶入求值fprintf('humps(%f)=%f\n',x,y);humps(1.299550)=0.000000MATLAB程式設計進階篇:一般數學函數的處理與分析求根範例-2若已知humps在x=-1及1間為異號令x0=[-1,1]為起始區找出humps的零點範例8-11:fzero02.m此時fzero找到的是另一個零點x=fzero(@humps,[-1,1]);%求落於區間[-1,1]的根y=humps(x);%帶入求值fprintf('humps(%f)=%f\n',x,y);humps(-0.131618)=0.000000MATLAB程式設計進階篇:一般數學函數的處理與分析求根範例–3(I)若要畫出以上兩個零點範例8-12:fzero03.mfplot(@humps,[-1,2]);z1=fzero(@humps,1.5);z2=fzero(@humps,[-1,1]);line(z1,humps(z1),'marker','o');%畫出第一個零點的位置line(z2,humps(z2),'marker','o');%畫出第二個零點的位置gridon%畫出格線MATLAB程式設計進階篇:一般數學函數的處理與分析求根範例–3(II)-1-0.500.511.52-20020406080100MATLAB程式設計進階篇:一般數學函數的處理與分析求解過程的中間結果(I)顯示求解過程的中間結果使用optimset指令,再將optimset傳回的結構變數送入fzero範例8-13:fzero04.mopt=optimset('disp','iter');%顯示每個iteration的結果a=fzero(@humps,[-1,1],opt)MATLAB程式設計進階篇:一般數學函數的處理與分析求解過程的中間結果(II)求零點過程中,用到二分法(Bisection)或內插法(Interpolation)方法在左表Procedure的第四個欄位中若給定一個起始點fzero最初的步驟中會先找出一個適當的區間來搜尋零點Func-countxf(x)Procedure1-1-5.13779initial2116initial3-0.513876-4.02235interpolation40.24306271.6382bisection5-0.473635-3.83767interpolation6-0.1152870.414441bisection7-0.150214-0.423446interpolation8-0.132562-0.0226907interpolation9-0.131666-0.0011492interpolation10-0.1316181.88371e-007interpolation11-0.131618-2.7935e-011interpolation12-0.1316188.88178e-016interpolation13-0.131618-9.76996e-015interpolationZerofoundintheinterval:[-1,1].a=-0.1316MATLAB程式設計進階篇:一般數學函數的處理與分析提示optimset常用於設定最佳化的選項MATLAB程式設計進階篇:一般數學函數的處理與分析8-4函數的極小值MATLAB指令進行數學函數最佳化,將介紹單變數函數的最小化多變數函數的最小化設定最佳化的選項MATLAB程式設計進階篇:一般數學函數的處理與分析單變函數的最小化fminbnd指令尋求humps在[0.3,1]中的最小值範例8-14:fminbnd01.m最小值發生在x=0.637,且最小值為11.2528[x,minValue]=fminbnd(@humps,0.3,1)x=0.6370minValue=11.2528MATLAB程式設計進階篇:一般數學函數的處理與分析尋求最小值的中間過程(I)尋求最小值的中間過程使用optimset指令來設定顯示選項再將optimset傳
本文标题:08-一般数学函数的处理与分析
链接地址:https://www.777doc.com/doc-3119376 .html