Presentation is loading. Please wait.

Presentation is loading. Please wait.

數學軟體簡介 PART II Matlab 介紹. 今天進度: 多項式的處理與分析 多項式的表示 一個 n 次多項式可以表示成 p(x)=a n x n +a n-1 x n-1 +…+a 1 x+a 0 因此,在 Matlab 中可以用一個長度為 n+1 的向量 來表示 p(x) 如下: p=[a.

Similar presentations


Presentation on theme: "數學軟體簡介 PART II Matlab 介紹. 今天進度: 多項式的處理與分析 多項式的表示 一個 n 次多項式可以表示成 p(x)=a n x n +a n-1 x n-1 +…+a 1 x+a 0 因此,在 Matlab 中可以用一個長度為 n+1 的向量 來表示 p(x) 如下: p=[a."— Presentation transcript:

1 數學軟體簡介 PART II Matlab 介紹

2 今天進度: 多項式的處理與分析

3 多項式的表示 一個 n 次多項式可以表示成 p(x)=a n x n +a n-1 x n-1 +…+a 1 x+a 0 因此,在 Matlab 中可以用一個長度為 n+1 的向量 來表示 p(x) 如下: p=[a n,a n-1,…,a 1,a 0 ] 舉例: p=[1,2,3,1] 是用來表示一個三次多項式 p(x)=x 3 +2x 2 +3x+1

4 多項式的加減,可以直接由向量的加減而得出。 若兩多項式分別是 p 1 (x)=x 3 +x+1 以及 p 2 (x)=2x 2 - x+1 ,則其和與差可計算如下: >>p1=[1 0 1 1]; >>p2=[0 2 -1 1]; >>p1+p2 ans = 1 2 0 2 多項式的加減 >>p1-p2 ans = 1 -2 2 0

5 多項式的乘除可以使用 conv 及 deconv 指令, 例如:欲求多項式 p 1 (x) 與 p 2 (x) 的乘積 >>p3=conv(p1, p2) p3 = 0 1 -1 3 0 1 2 多項式的乘除 注意: 上頁的矩陣相加減長度必須一致,否則會出現 錯誤訊息。

6 若欲求多項式 p 1 (x) 除以 p 2 (x) 的商式與餘式 >>p1=[1 0 1 1]; >>p2=[1 -1 2] >>[q r] = conv(p1, p2) q = 1 1 r = 0 0 0 -1 代表 p 1 (x) 除以 p 2 (x) 後得到的商式為 q(x)=x+1 , 餘式為 r(x) = -1 多項式的乘除

7 要計算多項式的值,可以用 polyval 指令,例如: >> p=[1 2 1]; >>x=3; >>y=polyval(p,x) y = 16.0000 >>x=0:1:3; %x= 0 1 2 3 >>y=polyval(p,x) y = 1 4 9 16 多項式的求值

8 若要計算 p(A) , A 為一方陣,可以用 polyvalm 指 令如下例: >>p=[1 2 1]; >>A=[1 2; 3 4]; >>B=polyvalm(p, A) >>B = 10 14 21 31 此結果和 B=A^2+2*A+1 一樣 多項式的求值

9 注意: 若將上式( polyvalm(p, A) )改為 polyval(p, A) 則結果會變為 B=A.^2+2*A+1 A^2 與 A.^2 完全不同 A^2 為矩陣 A*A A.^2 為對矩陣 A 中每個元素平方 多項式的求值

10 多項式的根,可用 Matlab 的 roots 指令來求,例 如:多項式 p(x)=x 4 +2x 3 +x 2 +2x+1 的根,可以計 算如下: >>p = [1 2 1 2 1]; >>r = roots(p) r = -1.8832 0.2071 + 0.9783i 0.2071 - 0.9783i -0.5310 多項式的求根

11 Matlab 的 polyder 指令可用於多項式的微分, 例如: >>p = [1 3 3 1]; >>q = polyder(p) q = 3 6 3 此即表示 p(x)=x 3 +3x 2 +3x+1 微分後的結果為 q(x)=3x 2 +6x+3 多項式的微分

12 給定一個方陣,其特徵多項式為 det(A-xI) ,我們 可以用 Matlab 指令 poly 來計算特徵多項式,例如: >>A = [1 3 4; 2 4 1; 1 6 2]; >>p = poly(A) P = 1.0000 -7.0000 -2.0000 -25.0000 所以 p(x) = x 3 -7x 2 -2x-25 為矩陣 A 的特徵多項式 矩陣的特徵多項式

13 特徵多項式的根即為矩陣 A 的特徵值,可以計算 如下: >>roots(poly(A)) ans = 7.6837 -0.3419 + 1.7711i -0.3419 - 1.7711i 也可以用上次教的 [Q,d]=eig(A) 來找到 A 的特徵值 矩陣的特徵多項式

14 非線性方程式的實根 如果求根的方程式不為多項式的形態 就不能用 roots 函數。 而這類的方程式多半是非線性方程式, 其函數形 態變化很大。對於解這類方程式的根,可以用 fzero 函數,它其實是用來找一函數 f(x) 的 x 值代 入時,會使該函數值為零 (f(x)=0) ;而這也就是 根的特性,因此我們可以用 fzero 求根。

15 要求任一方程式的根有三步驟: 1) 先定義方程式。要注意必須將方程式安排成 f(x)=0 的形態,例如一方程式為 sin(x)=3 , 則該 方程式應表示為 f(x)=sin(x)-3 。可以 M-file 函式 定義方程式。 2) 代入適當範圍的 x, y(x) 值,將該函數的分佈圖畫 出,藉以了解該方程式的「長相」。 3) 由圖中決定 y(x) 在何處附近 (x 0 ) 與 x 軸相交,以 fzero 的語法 fzero('function', x 0 ) 即可求出在 x 0 附 近的根,其中 function 是先前已定義的函數名稱。 如果從函數分佈圖看出根不只一個,則須再代入 另一個在根附近的 x 0 ,再求出下一個根。 非線性方程式的實根

16 以下分別介紹幾數個方程式,來說明如何求解它 們的根。例一:方程式為 sin(x)=0 我們知道上式的根有 π 、 2π 、 3π 、 4π… ,求根方 式如下: >> r=fzero('sin',3) r = 3.1416 >> r=fzero('sin',6) r = 6.2832 非線性方程式的實根

17 例二:方程式為先前提到的 Matlab 內建函數 humps ,我們不須要知道這個方程式的形態為何, 不過我們可以將它畫出來,再找出根的位置。求根 方式如下: >> x=linspace(-2,3); >> y=humps(x); >> plot(x,y), grid >> r=fzero('humps',1.2) r = 1.2995 非線性方程式的實根

18 M-file 定義的函數有其語法的一些規定: 第一行指令以 function 這個字做為起頭,接著是 輸出的變數,等號,函數名稱,輸入的變數是接 著函數名 稱放在括號之內。 function out1=userfun(in1) ,這行的 out1 是輸出 的變數, userfun 是函數名稱, in1 是輸入的 變數。 function [out1, out2]= serfun(in1, in2) 如果輸出 變數 [out1,out2] 和輸入變數 (in1, in2) 不只一個 時,則在 輸出變數部份須加上 [ ] 。 如何寫一個函數

19 請先找到 Matlab 的目前的目錄所在(可能在 \MatlabR14\work ,要在同一個目錄下才可以呼叫 函數),用 Notepad 或記事本開啟一個新增文件,在 儲存時把它另存成 ”test.m” ,此時,你的函數即名為 test 。 在 test.m 的檔案中,寫下自己所訂定的函數,例如: function c=test(r) c=pi*r.^2; % πr 2

20 例三:方程式為 x 2 sin(x)+cos(x) =0 求根方式如下: function y=f_2(x) % 定義 f_2.m 函數 y=x.^2.*sin(x)+cos(x); >> x=linspace(-3,3); >> y=f_2(x); >> plot(x,y), grid >> r=fzero('f_2',-1); r = -0.8952 >> r=fzero('f_2',3); % 決定在 3 附近的根 r = 3.0333


Download ppt "數學軟體簡介 PART II Matlab 介紹. 今天進度: 多項式的處理與分析 多項式的表示 一個 n 次多項式可以表示成 p(x)=a n x n +a n-1 x n-1 +…+a 1 x+a 0 因此,在 Matlab 中可以用一個長度為 n+1 的向量 來表示 p(x) 如下: p=[a."

Similar presentations


Ads by Google