MATLAB支援多項式的運算,除了一般的四則運算外更可以求多項式的根 多項式微分積分等工作,以及有理數等運算 非常方便使用
多項式的表示法 輸入多項式x^4+2*x^2+5x+10
首先必須將多項式的係數由最高向至最低項依序找出來 並存在一陣列中 注意缺項部分必須補零
P=[1 0 2 5 10] 即為以上的多項式
多項式乘法 多項式乘法必須使用函數conv,也就是執行兩個陣列的卷積。
如以下兩個多項式a(x)=5*x^3+2*x^2+x+1和b(x)= 2*x^3+x^2+x+10的乘積
>>a=[5 2 1 1] ; b=[2 1 1 10];
>>c=conv(a , b)
c =
10 9 9 55 22 11 10
結果是c(x)=10*x^6+9*x^5+9*x^4+55*x^3+22*x^2+11x+10。
若為兩個以上的多項式的乘法需要重覆使用onv。
多項式加法與減法 對多項式加法與減法可以使用(+)與(-)號,MATLAB並不提供一個直接的函數。如果兩個多項式向量大小相同,標準的的陣列加法有效。
把多項式a(x)與上面給出的b(x)相加
>>d=a+b
d =
7 3 2 11
結果是d(x)= 7*x^3+3*x^2+2*x+11。
>>d=a-b
d =
3 1 0 -9
結果是d(x)= 3*x^3+x^2-9。
注意 多項式做加法或減法對於階次不同,低階的多項式必須補零 就是剛才介紹的缺項補零 否則會出現錯誤訊息
多項式除法 在MATLAB中,由函數deconv完成一個多項式除以另一個多項式。
>> [q,r]=deconv(c,b)
q =
5 2 1 1
r =
0 0 0 0 0 0 0
這個結果是b被c除,給出商多項式q和餘數r,在現在情況下r是零,因爲b和q的乘積恰好是c。
多項式根 找出多項式的根用函數roots找出一個多項式的根
輸入多項式x^4+2*x^2+5x+10
>>p=[1 0 2 5 10]
>> r=roots(p)
r =
1.0874 + 1.8254i
1.0874 – 1.8254i
-1.0874 + 1.0163i
-1.0874 – 1.0163i
因爲在MATLAB中,無論是一個多項式,還是它的根,都是向量,MATLAB按慣例規定,多項式是行向量,根是列向量。
MATLAB中給出一個多項式的根,也可以由poly命令構造相應的多項式。
>>pp=poly(r)
pp =
1.0000 -0.0000 2.0000 5.0000 10.0000
如果一些根有虛部,由於截斷誤差差,則poly的結果有一些小的虛部,這是很普通的。消除虛假的虛部只要使用函數real抽取實部
多項式導數
MATLAB由polyder函數提供一個多項式的導數表示。
>>h=polyder(p)
h =
4 0 4 5
多項式值
MATLAB中由函數polyval來完成多項式係值
>> x=[1 2 3] ;
>>v=polyval(p , x) ;
>> v
v =
18 44 124
由當x為1 2 3時所對應的多項式的值 因此x=1多項式值為18
x=2多項式值為44
x=3多項式值為124
可以將多項式畫出
plot(x , v)
title(‘多項式x^4+2*x^2+5x+10作圖’)
xlabel(‘ x ‘)
有理多項式 在MATLAB中使用residue函數求有理多項式,有理多項式由它們的分子多項式和分母多項式表示,
>>b = [ 5 3 -2 7]
>>a = [-4 0 8 3]
[r, p, k] = residue(b,a)
r =
-1.4167
-0.6653
1.3320
p =
1.5737
-1.1644
-0.4093
k =
-1.2500
結果是餘數、極點和部分分式展開的常數項。
這個函數也執行逆運算。
[b,a] = residue(r,p,k)
b =
-1.2500 -0.7500 0.5000 -1.7500
a =
1.0000 -0.0000 -2.0000 -0.7500