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