Matlab: 多项式表示及其基本运算
目錄
1. 前言
2. 多項式的表示
3. Matlab中常用多項式處理的函數(shù)
3.1 roots(p)
3.2 conv(p,q)
3.3 polyval(p,x)
3.4 poly(p)
3.5 poly(A)
3.6 poly2sym(p, x)
3.7 residue(b,a)和residue(r,p,k)
?
1. 前言
????????Matlab用于動態(tài)系統(tǒng)建模、仿真與分析時,將會大量使用多項式。許多系統(tǒng)的模型描述(如系統(tǒng)的傳遞函數(shù))都需要使用多項式,并在多項式描述的基礎上對系統(tǒng)進行仿真分析。本文將概要性第介紹MATLAB中的多項式表示及其基本運算。
? ? ? ? 可以說多項式的表示和處理構(gòu)成了動態(tài)系統(tǒng)建模和分析的基礎。關于動態(tài)系統(tǒng)建模和分析的概要,可以參考Matlab/Simulink:動態(tài)系統(tǒng)模型的表示及仿真分析基礎
?
2. 多項式的表示
????????在Matlab中,n階多項式由一個長度為n+1的向量p所表示,向量p的元素為多項式的系數(shù),且按照自變量x的降冪順序排列。
比如說,n階多項式在Matlab中用以下方式表示:
p = [a0,a1,a2,...,an];? ? ? ? 這里,一定需要注意的是,系數(shù)向量中的元素是按照x的降冪順序排列,第一個元素表示最高冪次項的系數(shù),而最后一個原數(shù)表示常數(shù)項。而且,即便某一項的系數(shù)為0,也不能漏掉,必須在數(shù)組p中全部表示出來。因此matlab是根據(jù)系數(shù)向量p的長度來判斷多項式的階數(shù),根據(jù)元素的位置(索引序號)來判斷它所對應的x的冪次項。
? ? ? ? 比如說,應該表示為
p = [3 0 1 0];3. Matlab中常用多項式處理的函數(shù)
3.1 roots(p)
? ? ? ? 該函數(shù)用于求解由p表示的n階多項式的根,即方程p(x)=0的根,包括復數(shù)根,返回值為長度為n的向量。
p = [3,0,1,2,1]; roots(p) [z,p,k] = tf2zpk(p,1)? ? ? ? 容易猜到在動態(tài)系統(tǒng)的零極點模型求解中要用到這個函數(shù)。比如說,以上例子中,對tf2zpk的調(diào)用的返回值的z其實就等于roots(p)。
?
3.2 conv(p,q)
? ? ? ? 卷積和多項式乘法。
? ? ? ? 它計算p和q兩個向量的卷積,所得到的結(jié)果向量pq所表示的多項式對應于p和q所表示的兩個多項式的乘積。換言之,兩個多項式的乘積的系數(shù)向量等于兩個多項式的系數(shù)向量的卷積。
????????該函數(shù)計算多項式p,q的乘積,通常也稱為p,q的卷積。
? ? ? ? conv()函數(shù)有一個參數(shù)shape用于指定輸出的形狀,可以取值'same', 'full'和'valid'。
????????'full'是指全卷積,不指定該參數(shù)的時候采用的就是'full'。
????????'same'表示取全卷積中長度等于第一個輸入向量p長度的結(jié)果部分,而且是掐頭去尾的中間部分。?
? ? ? ? ‘valid’稍微別扭一些,其輸出也是全卷積結(jié)果的掐頭去尾的中間部分。但是所取的長度是?。其物理含義不是很直觀,官方解釋是“Only those parts of the convolution that are computed without the zero-padded edges.?”,“僅返回計算的沒有補零邊緣的卷積部分”。但是我并沒有看懂到底是啥意思。。。^-^
? ? ? ? 容易想到'same'和'valid'模式的卷積不是可交換的,運行以下例子代碼可以清楚地看出這點:
% conv u = [1 2 3]; v = [2 1 0 1 0 1 3]; w = conv(u,v) w = conv(u,v,'full') % The same as conv(u,v) w = conv(u,v,'same') w = conv(v,u,'same') w = conv(u,v,'valid') w = conv(v,u,'valid')3.3 polyval(p,x)
????????若x為一數(shù)值,則計算多項式在x處的值;若x為向量或矩陣,則計算多項式在x中每一元素處的值。由于是逐元素(elementwise operation)返回值的形狀與輸入x相同。
p = [3 0 1 0]; X = magic(3) % 生成一個3階魔方矩陣 polyval(p,X) polyvalm(p,X) % 與polyval完全不同的運算!? ? ? ? polyval(p,x)有一個名字相近的表親polyvalm(),但是它們的功能完全不同!polyvalm()的運算涉及到比較高階的數(shù)學知識,超出了本文的范圍。有興趣的小伙伴自行查詢matlab help。?
3.4 poly(p)
? ? ? ? poly(p)計算以向量p中的元素為根的多項式,即由根反向求多項式。容易想到它與roots是互逆的處理,但是并不是嚴格的互逆。這是因為一個方程與的根是相同的。這個從以下例子可以看出:
poly([2 -3]) poly(roots([2 1 0 1 0 1 3]))? ? ? ? 第2條語句返回的向量與原向量相差一個系數(shù)。
? ? ? ?
3.5 poly(A)
? ? ? ? 如果A是一個方陣的話,則poly(A)返回的是方陣A的特征多項式。
? ? ? ? 特征多項式的根即為特征向量,以下代碼段通過從不同的方式來計算特征多項式以及求特征根,演示了這些函數(shù)所代表的運算之間的關系。
A = [1 8 -10; -4 2 4; -5 2 8]; eA = eig(A) % 求A的特征向量 poly(eA) % 求以A的特征向量為根的多項式,即A的特征多項式 p = poly(A) % 直接求A的特征多項式 assert( abs((eA - roots(p))' * (eA - roots(p))) < 1e-10 ) % 驗證eA與特征多項式的根的一致性,在誤差范圍內(nèi)3.6 poly2sym(p, x)
? ? ? ? poly2sym(p)是屬于matlab的符號運算的一部分,它將以向量p表示的多項式轉(zhuǎn)換為其符號表示形式,第2個參數(shù)用于表示指定的自變量符號,如果不指定的話就使用x。
????????
poly2sym([1 0 -2 -5]) t = sym('t'); poly2sym([1 0 -2 -5], t) % 將自變量指定為 t 替代缺省的 xpoly2sym([1 0 -2 -5]) * poly2sym([1 1 ])ans =?x^3 - 2*x - 5
ans =?t^3 - 2*t - 5
ans =?-(x + 1)*(- x^3 + 2*x + 5)
?? ? ? ? 符號計算的功能對于撰寫論文中需要進行公式推導啊什么的是一個很方便的工具?。
?
3.7 residue(b,a)和residue(r,p,k)
????????[r,p,k] = residue(b,a)?計算以如下形式展開的兩個多項式之比的?部分分式展開式?的留數(shù)、極點和直項:
??residue?的輸入是由多項式?b = [bm ... b1 b0]?和?a = [an ... a1 a0]?的系數(shù)組成的向量。輸出為留數(shù)?r = [rn ... r2 r1]、極點?p = [pn ... p2 p1]?和多項式?k。
???????[b,a] = residue(r,p,k)?將部分分式展開式轉(zhuǎn)換回兩個多項式之比,并將系數(shù)返回給?b?和?a。
????????使用?residue?求以下多項式之比的部分分式展開式:
????????????????
?
b = [-2, 6, 3]; a = [3, 0, 2, 1]; [r,p,k] = residue(b,a) [b,a] = residue(r,p,k)?
?
?
總結(jié)
以上是生活随笔為你收集整理的Matlab: 多项式表示及其基本运算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS-Stage机器人仿真
- 下一篇: MTK 按键驱动流程总结