- MATLAB/Simulink權威指南:開發環境、程序設計、系統仿真與案例實戰
- 徐國保 張冰 石麗梅 吳凡
- 2359字
- 2019-12-20 20:33:33
4.1 多項式
多項式在代數中占有重要的地位,廣泛用于數據插值、數據擬合和信號與系統等應用領域。MATLAB提供了多項式的創建和各種多項式的運算方法,處理起來非常簡單方便。
4.1.1 多項式的創建
一個多項式按降冪排列為

在MATLAB中多項式的各項系數用一個行向量表示,使用長度為n+1的行向量按降冪排列,多項式中某次冪的缺項用0表示,則表示為

例如,多項式p1(x)=x3﹣2x2+4x+6,在MATLAB中可以表示為p1=[1,﹣2,4,6];p2(x)=x3+3x+6可表示為p2=[1,0,3,6]。
在MATLAB中,創建一個多項式,可以用poly2str和poly2sym函數實現,其調用格式如下:

其中,f=poly2str(p,'x')表示創建一個系數為p,變量為x的字符串型多項式;f=poly2sym(p)表示創建一個系數為p,默認變量為x的符號型多項式。兩者在命令窗口的顯示形式類似,但數據類型是不一樣的,一個是字符串型,另一個是符號型。
【例4-1】 已知多項式系數為p=[1,﹣2,4,6],分別用poly2str(p,'x')和poly2sym(p)創建多項式,比較它們有什么不同。
程序代碼如下:

顯然,兩種函數創建的多項式f1和f2顯示形式類似,但數據類型和大小都不一樣,如圖4-1所示。

圖4-1 兩種多項式的比較
4.1.2 多項式的值和根
1.多項式的值
在MATLAB里,求多項式的值可以用polyval和polyvalm函數。它們的輸入參數都是多項式系數和自變量,兩者區別是前者是代數多項式求值,后者是矩陣多項式求值。
1)代數多項式求值
polyval函數可以求代數多項式的值,其調用格式為

其中,p為多項式的系數,x為自變量,當x為一個數值,則求多項式在該點的值;若x為向量或矩陣,則對向量或矩陣的每個元素求多項式的值。
【例4-2】 已知多項式為f(x)=x3﹣2x2+4x+6,分別求x1=2和x=[0,2,4,6,8,10]向量的多項式的值。
程序代碼如下:

程序運行結果:

2)矩陣多項式求值
polyvalm函數以矩陣為自變量求多項式的值,其調用格式為

其中,p為多項式系數,X為自變量,要求為方陣。
MATLAB用polyvalm和polyval函數求多項式的值是不一樣的,因為運算規則不一樣。例如,假設A為方陣,p為多項式x2﹣5x+6的系數,則polyvalm(p,A)表示A?A﹣5?A+6?eye(size(A)),而polyval(p,A)表示A?A﹣5?A+6?ones(size(A))。
【例4-3】 已知多項式為f(x)=x2﹣3x+2,分別用polyvalm和polyval函數,求的多項式的值。
程序代碼如下:

程序運行結果:

2.多項式的根
一個n次多項式有n個根,這些根有實根,也有可能包含若干對共軛復根。MATLAB提供了roots函數用于求多項式的全部根,其調用格式為

其中,p為多項式的系數向量,r為多項式的根向量,r(1),r(2),…,r(n)分別表示多項式的n個根。
MATLAB還提供了一個由多項式的根,求多項式的系數的函數poly,其調用格式為

其中,r為多項式的根向量,p為由根r構造的多項式系數向量。
【例4-4】 已知多項式為f(x)=x4+4x3﹣3x+2。
(1)用roots函數求該多項式的根r。
(2)用poly函數求根為r的多項式系數。
程序代碼如下:

程序運行結果:

顯然,roots和poly函數的功能正好相反。
4.1.3 多項式的四則運算
多項式之間可以進行四則運算,其結果仍為多項式。在MATLAB中,用多項式系數向量進行四則運算,得到的結果仍為多項式系數向量。
1.多項式的加減運算
MATLAB沒有提供多項式加減運算的函數。事實上多項式的加減運算,是合并同類型,可以用多項式系數向量相加減運算。如果多項式階次不同,則把低次多項式系數不足的高次項用0補足,使得多項式系數矩陣具有相同維度,以便進行加減運算。
2.多項式乘法運算
在MATLAB中,兩個多項式的乘積可以用函數conv實現。其調用格式為

其中,p1和p2是兩個多項式的系數向量;p是兩個多項式乘積的系數向量。
3.多項式除法運算
MATLAB可以用函數deconv實現兩個多項式的除法運算。其調用格式為

其中,q為多項式p1除以p2的商式;r為多項式p1除以p2的余式。q和r都是多項式系數向量。
deconv是conv的逆函數,即滿足p1=conv(p2,q)+r。
【例4-5】 已知兩個多項式為f(x)=x4+4x3﹣3x+2,g(x)=x3﹣2x2+x。
(1)求兩個多項式相加f(x)+g(x)和兩個多項式相減f(x)﹣g(x)的結果。
(2)求兩個多項式相乘f(x)×g(x)和兩個多項式相除f(x)/g(x)的結果。
程序代碼如下:

程序運行結果:

4.1.4 多項式的微積分運算
1.多項式的微分
對于n階多項式p(x)=anxn+an﹣1xn﹣1+…+a1x1+a0的求導,其導數為n﹣1階多項式dp(x)=nanxn﹣1+(n﹣1)an﹣1xn﹣2+…+a1。原多項式及其導數多項式的系數分別為p=[an,an﹣1,…,a1,a0],d=[nan,(n﹣1)an﹣1,…,a1]。
在MATLAB中,可以用polyder函數來求多項式的微分運算,polyder函數可以對單個多項式求導,也可以對兩個多項式乘積和商求導,其調用格式如下:

【例4-6】 已知兩個多項式為f(x)=x4+4x3﹣3x+2,g(x)=x3﹣2x2+x。
(1)求多項式f(x)的導數。
(2)求兩個多項式乘積f(x)?g(x)的導數。
(3)求兩個多項式相除g(x)/f(x)的導數。
程序代碼如下:

程序運行結果:

2.多項式的積分
對于n階多項式p(x)=anxn+an﹣1xn﹣1+…+a1x1+a0,其不定積分為n+1階多項式,其中k為常數項。原多項式和積分多項式分別可以表示為系數向量p=[an,an﹣1,…,a1,a0],I=
。
在MATLAB中,提供了polyint函數用于多項式的積分。其調用格式為

顯然polyint是polyer的逆函數,即有p=polyder(I)。
【例4-7】 求多項式的積分I=∫(x4+4x3﹣3x+2)dx。
程序代碼如下:

程序運行結果:

4.1.5 多項式的部分分式展開
由分子多項式B(s)和分母多項式A(s)構成的分式表達式進行多項式的部分分式展開,表達式如下:

MATLAB可以用residue函數實現多項式的部分分式展開,residue函數的調用格式如下:

其中,B為分子多項式系數行向量;A為分母多項式系數行向量;[p1;p2;…;pn]為極點列向量;[r1;r2;…;rn]為零點列向量;k為余式多項式行向量。
residue函數還可以將部分分式展開式轉換為兩個多項式的除的分式,其調用格式為

【例4-8】 已知分式表達式為。
(1)求f(s)的部分分式展開式。
(2)將部分分式展開式轉換為分式表達式。
程序代碼如下:

程序運行結果:

- Dreamweaver CS3 Ajax網頁設計入門與實例詳解
- 西門子S7-200 SMART PLC從入門到精通
- PostgreSQL Administration Essentials
- 新手學電腦快速入門
- 水晶石精粹:3ds max & ZBrush三維數字靜幀藝術
- 數據庫系統原理及應用教程(第5版)
- 運動控制系統
- 統計挖掘與機器學習:大數據預測建模和分析技術(原書第3版)
- Linux系統下C程序開發詳解
- ASP.NET 2.0 Web開發入門指南
- Spark大數據商業實戰三部曲:內核解密|商業案例|性能調優
- WOW!Photoshop CS6完全自學寶典
- Hands-On Microservices with C#
- Flash CS5二維動畫設計與制作
- ARM嵌入式系統開發完全入門與主流實踐