MATLAB 程式设计进阶篇一般数学函数的处理与分析.ppt
《MATLAB 程式设计进阶篇一般数学函数的处理与分析.ppt》由会员分享,可在线阅读,更多相关《MATLAB 程式设计进阶篇一般数学函数的处理与分析.ppt(59页珍藏版)》请在麦多课文档分享上搜索。
1、MATLAB 程式設計進階篇 一般數學函數的處理與分析,張智星 jangmirlab.org http:/mirlab.org/jang 台大資工系 多媒體檢索實驗室,函數的函數,MATLAB 可對數學函數進行各種運算與分析,例如: 作圖 求根 優化:求函數的極大或極小值 數值積分 求解微分方程式,如何表示此種被分析的函數? 字串 函數握把 (function handles) 匿名函數 (anonymous function),Functions of Functions!,一維數學函數的範例,MATLAB 是以 M 檔案(副檔名為 m)來表示一個函數 例如,內建於MATLAB目錄的 hum
2、ps.m 可用來計算下列函數:更多資訊: 欲顯示此檔案的位置 which humps 欲顯示此檔案的內容 type humps,提示,MATLAB 常被用到的測試函數 humps:單輸入函數 peaks:雙輸入函數 函式和函數都代表functions,兩者常會混用,若要正名,可區分如下: 函數:通常用來表示mathematic functions 函式:通常用來表示subroutines or functions in a programming language,We use 函數 to represent both.,數學函數的作圖,表示函數的方式 函數握把:使用 humps 來代表 hu
3、mps.m 字串:使用 humps 來代表 humps.m 用 fplot 指令進行數學函數作圖 畫出 humps 函數在 0,2 間的曲線 範例:fplot01.m,subplot(2,1,1); fplot(humps, 0,2); % 使用字串指定函式 subplot(2,1,2); fplot(humps, 0 2); % 使用函式握把來指定函式,Less flexible!,同時改變 x、y 的區間,我們可同時改變 x 和 y 的區間 範例:fplot02.mx 的區間為0, 1 y 的區間為5, 25,fplot(humps, 0, 1, 5, 25); grid on % 畫出格
4、線,匿名函式,fplot 也接受匿名函式(當場指定的函式) 範例:fplot021.m,subplot(2,1,1); fplot(sin(2*x)+cos(x), -10, 10) % 使用字串指定函式 subplot(2,1,2); fplot(x)sin(2*x)+cos(x), -10, 10) % 使用函式握把來指定函式,對多個函數作圖,fplot 也可同時對多個函數作圖,其中每個函數須以一個行向量來表示 範例:fplot022.mx 是行向量(MATLAB 預設值) sin(x), exp(-x) 是二個行向量 每個行向量代表一個函數(即一條曲線),fplot(x)sin(x),
5、exp(-x), 0, 10),帶有參數的函數,匿名函式也可以帶有參數 範例:fplot023.m此時 “(x)” 不可省略,以便指定自變數,a=1; b=1.1; c=1.2; fplot(x)sin(a*x), sin(b*x), sin(c*x), 0, 10),Function handle is more flexible!,產生 X、Y 座標點,fplot 可進行描點作圖,類似 plot(x, y),但x 座標點的密度根據函數值的變化決定 我們顯示 fplot 所產生的 x 座標點 範例:fplot03.m函數變化平緩處,產生稀疏的點 函數變化劇烈處,產生緊密的點,x, y = f
6、plot(humps, -1,2); plot(x, y, -o);,產生更密的 X 座標點 (1),若欲產生更密的 x 座標點,可在 fplot 指令加入另一個輸入引數,已指定相對容忍度(Tolerance) 範例:fplot04.m,subplot (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);,產生更密的 X 座標點 (2),在第一圖中,fplot 指令使用預設相對容忍度,其值為 0.002。 在第二圖中,相對容忍度被設為 0.0001,可得到更準確
7、的圖形,但也要花更多計算及作圖時間。,ezplot 指令,ezplot指令和fplot指令類似,可進行描點作圖,但使用更為簡便,預設的作圖範圍為 範例8-7:ezplot01.m,ezplot(x)x3-x2+x);,平面中的參數式曲線,ezplot 也可畫出平面中的參數式曲線 範例8-8:ezplot02.m參數式函數的參數預設範圍仍是,ezplot(t)sin(3*t), (t)cos(5*t);,利薩如圖形(Lissajous Figures),空間中的參數式曲線,ezplot3 可畫出空間中的參數式曲線 範例8-8:ezplot021.m參數式函數的參數預設範圍仍是,ezplot3(t
8、)sin(3*t), (t)cos(5*t), (t)t),3D利薩如圖形,隱函數作圖,ezplot 指令可用於隱函數作圖 下列範例可以畫出 範例8-9:ezplot03.m,ezplot(x,y)x3+2*x2-3*x-y2+15);,函數的求根,fzero 指令 用於單變數函數的求根 語法 x = fzero(fun, x0) fun 是欲求根的函數(以字串或函數握把來表示) x0 是一個起始點或起始區間,X0 對 fzero 的影響,fzero 指令根據 x0 不同而執行下列動作 若 x0 為一個起始點fzero 會自動找出附近包含零點(即根,或函數變號點)的區間 逐步縮小此區間以找出零
9、點 若 fzero 無法找出此區間,傳回 NaN 若已知使函數值不同號的兩點 由 x0 直接指定尋根的區間fzero 更快速找到位於此區間內的根,求根範例 (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) = %fn, x , y);,humps(1.299550) = 0.000000,求
10、根範例 (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) = %fn, x , y);,humps(-0.131618) = 0.000000,求根範例 (3),若要畫出以上兩個零點,請見下列範例 範例8-12:fzero03.m,fplot(humps, -1, 2); grid on
11、z1 = fzero(humps, 1.5); z2 = fzero(humps, -1, 1); line(z1, humps(z1), marker, o, color, r); line(z2, humps(z2), marker, o, color, r);,顯示求解過程的中間結果 (1),MATLAB 可以顯示求解過程的中間結果 使用 optimset 指令來設定顯示選項 再將 optimset 傳回結構變數送入 fzero 範例8-13:fzero04.moptimset 常用於設定最佳化的選項,下一節會有比較完整的介紹,opt = optimset(disp, iter); %
12、顯示每個 iteration 的結果 a = fzero(humps, -1, 1, opt),顯示求解過程的中間結果 (2),求零點過程中,找下一點的兩個方法顯示在第四個欄位(Procedure 欄位) 二分法(Bisection) 內插法(Interpolation) 可由doc fzero找到所使用的演算法,Func-count x f(x) Procedure1 -1 -5.13779 initial2 1 16 I initial3 -0.513876 -4.02235 interpolation4 0.243062 71.6382 bisection5 -0.473635 -3.8
13、3767 interpolation6 -0.115287 0.414441 bisection7 -0.150214 -0.423446 interpolation8 -0.132562 -0.0226907 interpolation9 -0.131666 -0.0011492 interpolation10 -0.131618 1.88371e-007 interpolation11 -0.131618 -2.7935e-011 interpolation12 -0.131618 8.88178e-016 interpolation13 -0.131618 -9.76996e-015 i
14、nterpolation Zero found in the interval: -1, 1. a = -0.1316,數值積分,MATLAB 可用於計算單變函數定積分 quad:適應式 Simpson 積分法(Adaptive Simpson Quadrature) quadl:適應式 Lobatto 積分法(Adaptive Lobatto Quadrature),定積分,計算 humps 在 0, 1 的定積分 q = quad(humps, 0, 1) q =29.8583 quad 及 quad8 都應用遞迴程序 若遞迴次數達 10 次,兩種方法均會傳回 Inf 表示所計算之定積分可
15、能不存在 quad 及 quad8第四個引數用來指定積分的相對誤差容忍度,曲線的長度 (1),quad 及 quadl 計算曲線的長度 一曲線是由下列參數化的方程式來表示t 的範圍為 0, 3*pi 範例:plotCurve.m,t = 0:0.1:3*pi; plot3(sin(2*t), cos(t), t);,曲線的長度 (2),此曲線的長度等於,曲線的長度 (3),先定義函數 curveLength.m type curveLength.m function out = curveLength(t) out = sqrt(4*cos(2*t).2+sin(t).2+1); 曲線長度可計
16、算如下 len = quad(curveLength, 0, 3*pi) len =17.2220,雙重積分 (1),dblquad 指令 用來計算雙重積分 欲計算其中 先建立被積分的函數 integrand.m type integarnd.m function out = integrand(x, y) out = y*sin(x) + x*cos(y);,雙重積分 (2),計算雙重積分 result = dblquad( integrand, xMin, xMax, yMin, yMax) 其中 xMin:內迴圈積分的下界值 xMax:內迴圈積分的上界值 yMin:外迴圈積分的下界值 y
17、Max:外迴圈積分的上界值,雙重積分 (3),範例:dblquad01.m一般的情況下dblquad 會呼叫 quad 計算定積分。若須呼叫更為精確的 quadl,可執行下列指令 result = dblquad(integrand, xMin, xMax, yMin, yMax, quadl) result = -9.8696,xMin = pi; xMax = 2*pi; yMin = 0; yMax = pi; result = dblquad(integrand, xMin, xMax, yMin, yMax),result = -9.8698,函數的優化,MATLAB 提供了數個基本
18、指令來進行數學函數的優化,本節將介紹: 單變數函數的最小化: fminbnd 多變數函數的最小化: fminsearch 設定最佳化的選項 若讀者有興趣使用較複雜的方法,可以使用最佳化工具箱(Optimization Toolbox),單變函數的最小化,fminbnd 指令 尋求 humps 在 0.3, 1 中的最小值 範例:fminbnd01.m最小值發生在 x = 0.637,且最小值為 11.2528,x, minValue = fminbnd(humps, 0.3, 1),x =0.6370 minValue =11.2528,尋求最小值的中間過程 (1),尋求最小值的中間過程 使用
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 程式 设计 进阶 一般 数学 函数 处理 分析 PPT
