MATLAB編程與應用系列-第5章 多項式與數據分析(1)

本系列教程來源于出版設計《基于MATLAB編程基礎與典型應用書籍》,如涉及版權問題,請聯系:156204968@qq.com。 出版社:人民郵電出版社, 頁數:525。

本系列教程目前基于MATLABR2006a,可能對于更高級版本的功能和函數有差異,教程中如有問題,請聯系:156204968@qq.com

本章將介紹如何使用MATLAB來解決一些基本的數學運算問題,主要包括多項式的相關計算,數據插值,曲線擬合以及數據統(tǒng)計處理等相關的內容。本章的主要內容如下:

  • 多項式
  • 數據插值
  • 曲線擬合
  • 數據統(tǒng)計處理
  • 離散傅立葉變換

5.1 多項式

在MATLAB中,多項式是以行向量的形式存放的,并且約定多項式以降冪的形式出現,如果多項式中缺少某冪次項,則該冪次項的系數為0。例如,多項式p_1(x)=x^3+21x^2+20x可以表示為:p1=[1 21 20 0],其中常數項為0。

本節(jié)將全面介紹與多項式有關的各種計算,包括多項式的四則運算、導函數運算、求值、求根以及分部展開。

5.1.1 多項式的四則運算

多項式的加減運算并無特別,可以使用向量的加減運算實現。多項式的乘除運算比較復雜,為此MATLAB提供了專門的運算函數convdeconv。
函數conv用于求多項式P1和P2的乘積,它的調用格式如下:

conv(P1,P2)

其中,P1、P2是兩個多項式系數向量。
函數deconv用于對多項式P1和P2作除法運算,它的調用格式如下:

[Q,r]=deconv(P1,P2)

其中,Q返回多項式P1除以P2的商式,r返回P1除以P2的余式。返回的Q和r仍是多項式系數向量。

可以將除法運算deconv看作是乘法運算conv的逆運算,即有P1=conv(P2,Q)+r。

下面通過示例介紹多項式的表示和多項式的四則運算。

【例5.1】多項式的表示及其乘法運算
在命令窗口中輸入兩個多項式的系數向量p1和p2,如下所示:
>> p1=[1 8 0 0 -10]
>> p2=[2 -1 3]
上面兩個系數向量表示的多項式并不直觀,為了比較直觀的查看多項式MATLAB提供了函數poly2str,該函數的功能是以用戶比較習慣的方式顯示多項式。

例如使用函數poly2str顯示系數向量p1和p2所代表的多項式。在命令窗口中輸入以下內容:
>> poly2str(p1,'x') %以比較習慣的方式顯示多項式
返回p1代表的多項式的形式如下:
ans =
x^4 + 8 x^3 – 10
同樣,在命令窗口中輸入以下內容:
>> poly2str(p2,'x') %以比較習慣的方式顯示多項式
返回p2代表的多項式的形式如下:
ans =
2 x^2 - 1 x + 3

熟悉多項式的表示方法后,接著使用函數conv求多項式p1和p2的乘積。在命令窗口輸入以下內容:
>>y= conv(p1,p2)
函數conv計算的結果如下:
y =
2 15 -5 24 -20 10 -30
使用函數poly2str顯示多項式p1和p2相乘后生成的新多項式,如下所示:
>> poly2str(y,'x') %以比較習慣的方式顯示多項式
ans =
2 x^6 + 15 x^5 - 5 x^4 + 24 x^3 - 20 x^2 + 10 x - 30

【例5.2】多項式的除法運算
在命令窗口中輸入多項式系數向量p3和p4,如下所示:
>> p3=[2 6 8 0 5 9 4];
>> p4=[4 8 0 0 0 3 6];
對多項式p3和p4作除法運算,其中多項式p3除以p4的商式保存在Q中,p3除以p4的余式保存在r中。返回的Q和r仍是多項式系數向量。在命令窗口中輸入以下內容:
>> [Q,r]=deconv(p3,p4) %多項式的除法運算
返回結果如下:
Q =
0.5000
r =
0 2.0000 8.0000 0 5.0000 7.5000 1.0000

5.1.2 多項式的導函數

MATLAB提供了polyder函數,用于求多項式的導函數。該函數的格式如下:

p=polyder(P) 求多項式P的導函數多項式

p=polyder(P,Q) 求多項式P與多項式Q乘積的導函數多項式

[p,q]=polyder(P,Q) 求多項式P與多項式Q相除的導函數,導函數的分子存入p,分母存入q

其中,參數P和Q是多項式的系數向量,返回結果p和q也是多項式的系數向量。

【例5.3】求多項式的導函數多項式
在命令窗口中輸入多項式系數向量p3和p4,如下所示:
>> p3=[2 6 8 0 5 9 4];
>> p4=[4 8 0 0 0 3 6];
①求多項式p3的導函數多項式。在命令窗口中輸入以下內容:
>> p=polyder(p3) %多項式p3的導函數多項式
返回系數向量如下:
p =
12 30 32 0 10 9
②求多項式p3與p4乘積的導函數多項式。在命令窗口中輸入以下內容:
>> k=polyder(p3,p4) %多項式p3與p4乘積的導函數多項式
返回系數向量如下:
k =
96 440 800 576 160 574 708 460 192 45 114 66
③求多項式p3與p4相除的導函數多項式。在命令窗口中輸入以下內容:
>> [g,h]=polyder(p3,p4) %多項式p3與p4相除的導函數多項式
返回系數向量g和h如下:
g =
-8 -64 -64 -80 -270 -240 92 192 15 60 42
h =
16 64 64 0 0 24 96 96 0 0 9 36 36

5.1.3 多項式的求值

MATLAB提供了兩種求多項式值的函數:polyval與polyvalm,它們的輸入參數均為多項式系數向量P和自變量x,但是兩者是有很大區(qū)別的,前者是按數組運算規(guī)則對多項式求值,而后者是按矩陣運算規(guī)則對多項式求值。具體的調用格式如下所示。

Y=polyval(P,x) 若x為一數值,則求多項式在該點的值;若x為向量或矩陣,則對向量或矩陣中的每個元素求其多項式的值

Y=polyvalm(P,x) 要求x為方陣或數值,它以方陣為自變量求多項式的值

注意:(1)polyvalm函數用來求矩陣多項式的值,其調用格式與polyval相同,但含義不同。例如,設A為方陣,P代表多項式x^3-5x^2+8,那么polyvalm(P,A)的含義是:AAA-5AA+8eye(size(A)),而polyval(P,A)的含義是:A.A.A-5A.A+8*ones(size(A))。
(2)函數polyvalm的參數x必須為方陣或數值,否則計算會提示錯誤信息,無法計算。

【例5.4】多項式的求值
在命令窗口中輸入多項式的系數向量p3和矩陣A,如下所示:
>> p3=[2 6 8 0 5 9 4] %生成多項式系數
>> A=rand(3) %生成隨機矩陣
①使用函數polyval按數組運算規(guī)則求A中的每個元素對于多項式p3的值。在命令窗口中輸入如下內容:
>> Y=polyval(p3,A)
運算結果如下:
Y =
7.2917 15.2885 5.4763
5.8986 7.2672 15.8387
5.9409 11.3612 8.3376
②使用函數polyvalm按矩陣運算規(guī)則求以方陣A為自變量的多項式p3的值。在命令窗口中輸入如下內容:
>> Y1=polyvalm(p3,A)
運算結果如下:
Y1 =
13.6694 21.1448 16.7431
8.7641 22.5846 21.5403
8.4161 19.5396 22.2629
③如果函數polyval和polyvalm的第二個參數為數值,仍然可以按照數組和矩陣的運算規(guī)則計算求多項式在該參數下的結果。在命令窗口中輸入如下內容:
>> A=3
分別使用函數polyval和polyvalm計算多項式的值,具體操作及返回結如下:
>> Y=polyval(p3,A)
Y =
3640
>> Y1=polyvalm(p3,A)
Y1 =
3640
④如果函數ployval和ployvalm的第二個參數為一向量,前者按照數組運算規(guī)則仍然可以計算求多項式在該參數下的結果,但是后者按矩陣運算規(guī)則計算則會提示錯誤信息。在命令窗口中輸入如下內容:
>> p4=[4 8 0 0 0 3 6]
分別使用函數polyval和polyvalm計算多項式的值,具體操作及返回結果如下:
>> Y=polyval(p3,p4) %第二個參數為向量
Y =
16504 754060 4 4 4 3640 150574
>> Y1=polyvalm(p3,p4) %第二個參數必須為方陣或數值
??? Error using ==> polyvalm
Matrix must be square.

5.1.4 多項式求根

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

x=roots(P)

其中,P為多項式的系數向量,返回向量x為多項式的根,即x(1),x(2),…,x(n)分別代表多項式的n個根。

另外,如果已知多項式的全部根,MATLAB還提供了函數poly用來建立該多項式,該函數的調用格式為:

P=poly(x)

其中,x為多項式的根,返回向量P為多項式的系數向量。

對于一個方陣s,可以用函數poly來計算矩陣的特征多項式的系數。特征多項式的根即為特征值,可以用roots函數來計算。

【例5.5】多項式求根操作
>> p5=[1 8 0 0 -10]
在命令窗口中輸入以上內容,生成多項式的系數向量。
①用函數roots求系數向量為p5的多項式的根,輸入如下內容:
>> x=roots(p5) %使用函數roots求系數向量為p5的多項式的根
返回結果如下:
x =
-8.0194
1.0344
-0.5075 + 0.9736i
-0.5075 - 0.9736i
②可以通過函數poly建立以x為其根的多項式來驗證求得根是否正確。具體操作如下,返回的結果顯示使用roots求得向量正是多項式的根。
>> P=poly(x) %建立以x為根的多項式
P =
1.0000 8.0000 -0.0000 -0.0000 -10.0000

【例5.6】使用函數poly和roots求方陣的特征多項式及特征值。
>> d=rand(4) %生成4階的隨機陣
①使用函數poly計算方陣的特征多項式,具體操作如下:
>> f=poly(d) %使用函數poly計算方陣的特征多項式
f =
1.0000 -1.1277 -1.2433 -0.1407 0.0255
②使用函數roots計算方陣的特征值,在命令窗口中輸入以下內容:
>> roots(f)’ %特征值求取,轉置轉化為行向量
運算結果如下:
ans =
1.8406 -0.5363 -0.2716 0.0950
使用函數eig計算方陣的特征值,在命令窗口中輸入以下內容:
>> eig(d) %計算方陣的特征值
運算結果如下:
ans =
1.8406
0.0950
-0.2716
-0.5363

注意:用上例方法計算特征多項式時,輸入量必須為方陣。

5.1.5 部分分式展開

MATLAB提供函數residue可以實現將分式表達式進行多項式的部分分式展開。
對于\frac{B(s)}{A(s)}=\frac{r_1}{s-p_1} +\frac{r_2}{s-p_2}+\cdots+\frac{r_n}{s-p_n}+k(s),函數的調用格式如下:

[r,p,k]=residue(b,a) 

其中,b和a分別是分子和分母多項式系數行向量;返回值r是[r1 r2 …rn]留數行向量,p為[p1 p2 …pn]極點行向量,k為直項行向量。下面通過示例來講述該函數的使用。

【例5.7】將表達式\frac{100(s+2)}{s(s+1)(s+20)}進行部分分式展開
在命令窗口中輸入多項式系數向量p1和p3,如下所示:
>> p1=[1 21 20 0]
>> p3=[100 200]
使用函數residue將多項式展開,p3和p1分別是分子和分母多項式系數行向量。在命令窗口輸入:
>> [r,p,k]=residue(p3,p1)
返回值r是留數行向量,p為極點行向量,k為直項行向量。結果如下:
r =
-4.7368
-5.2632
10.0000
p =
-20
-1
0
k =
[]
由此可得表達式的展開結果為: \frac{-4.7368}{s+20} +\frac{-5.2632}{s+1}+\frac{10}{s}

5.1.6 多項式的微分和積分

多項式的微分MATLAB提供了函數polyder來實現,前面介紹多項式的導函數時已經介紹了該函數的具體使用。但是對于多項式的積分運算MATLAB沒有提供專門的函數,但可以用[p./length(p):-1:1,k]的方法來完成積分,其中k為常數。下面通過示例講解如何進行多項式的積分運算。

【例5.11】多項式的微分
>> A=[1 2 3 4 5 5 3 4] %生成多項式系數
使用函數polyder進行多項式微分計算,在命令窗口輸入以下內容:
>> B=polyder(A) %微分計算
返回結果如下:
B =
7 12 15 16 15 10 3 c

作者:德特數據
聯系方式:156204968@qq.com

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 尋找讓你能展愛的能力的人在一起吧,而不是讓你愛無能或者只需配合的人。牢靠的愛是雙方之間的互動后慢慢產生的,至少現在...
    穎仔心隨閱讀 190評論 0 0
  • 我愿意處在黑暗里 也愿意為了你處在黑暗里 可我最不愿你和我都在黑暗里
    宄遇三閱讀 284評論 0 0
  • 日出染青山 格桑破涕炫 蔚霞蕩虛谷 徐徐清風還
    小小布布娃閱讀 267評論 0 6

友情鏈接更多精彩內容