1 / 20

數學軟體簡介 PART II Matlab 介紹

數學軟體簡介 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 n ,a n-1 ,…,a 1 ,a 0 ] 舉例: p=[ 1,2,3,1 ] 是用來表示一個三次多項式 p(x)=x 3 + 2 x 2 + 3 x+ 1. 多項式的加減.

bat
Download Presentation

數學軟體簡介 PART II Matlab 介紹

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 數學軟體簡介 PART IIMatlab 介紹

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

  3. 多項式的表示 • 一個n次多項式可以表示成 p(x)=anxn+an-1xn-1+…+a1x+a0 • 因此,在Matlab中可以用一個長度為n+1的向量來表示p(x)如下: p=[an,an-1,…,a1,a0] • 舉例:p=[1,2,3,1] 是用來表示一個三次多項式 p(x)=x3+2x2+3x+1

  4. 多項式的加減 • 多項式的加減,可以直接由向量的加減而得出。若兩多項式分別是p1(x)=x3+x+1以及p2(x)=2x2-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指令, 例如:欲求多項式p1(x)與p2(x)的乘積 >>p3=conv(p1, p2) p3 = 0 1 -1 3 0 1 2

  6. 多項式的乘除 • 若欲求多項式p1(x)除以p2(x)的商式與餘式 >>p1=[1 0 1 1]; >>p2=[1 -1 2] >>[q r] = conv(p1, p2) q = 1 1 r = 0 0 0 -1 代表p1(x)除以p2(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)=x4+2x3+x2+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)=x3+3x2+3x+1 微分後的結果為q(x)=3x2+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) = x3-7x2-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. 非線性方程式的實根 要求任一方程式的根有三步驟: • 先定義方程式。要注意必須將方程式安排成 f(x)=0 的形態,例如一方程式為sin(x)=3, 則該方程式應表示為 f(x)=sin(x)-3。可以 M-file函式 定義方程式。 • 代入適當範圍的 x, y(x) 值,將該函數的分佈圖畫出,藉以了解該方程式的「長相」。 • 由圖中決定y(x)在何處附近(x0)與 x 軸相交,以fzero的語法 fzero('function', x0) 即可求出在 x0附近的根,其中 function 是先前已定義的函數名稱。如果從函數分佈圖看出根不只一個,則須再代入另一個在根附近的 x0,再求出下一個根。

  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; % πr2

  20. 例三:方程式為 x2sin(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

More Related