多项式的一般形式如下:
我们可以使用它的系数向量来表示,
matlab中,提供了poly2sym函数实现多项式的构造。
>> poly2sym([1 3 2])
ans =
x^2 + 3*x + 2
>> poly2sym(sym([1 0 1 -1 2]),sym('y'))
ans =
y^4 + y^2 - y + 2
多项式的根:
matlab使用roots函数求解多项式的根,即求解函数等于0的根
>> p = [1 -12 0 25 116];
>> r = roots(p);
>> p
p =
1 -12 0 25 116
>> r
r =
11.7473 + 0.0000i
2.7028 + 0.0000i
-1.2251 + 1.4672i
-1.2251 - 1.4672i
由根创建多项式:
matlab中规定,多项式是行向量,根是列向量。给出一个多项式的根,也可以构造相应的多项式。
>> pp = poly(r)
pp =
1.0000 -12.0000 -0.0000 25.0000 116.0000
多项式的加法:
如果两个多项式向量大小相同,相加时就与标准的数组加法相同
>> p1 = [5 40 6 21 9 3];
>> p2 = [4 0 3 72 1 8];
>> p3 = p1 + p2
p3 =
9 40 9 93 10 11
>> r1 = poly2str(p3,'x') % 显示多项式
r1 =
9 x^5 + 40 x^4 + 9 x^3 + 93 x^2 + 10 x + 11
>> p4 = p1 - p2
p4 =
1 40 3 -51 8 -5
>> r2 = poly2str(p4,'x') % 显示多项式
r2 =
x^5 + 40 x^4 + 3 x^3 - 51 x^2 + 8 x - 5
注意:当两个多项式阶次不同时,低阶的多项式用首0填补,使其与高阶多项式有同样的阶次。要求首零而不是尾0,是因为相关的系数像x幂一样,必须整齐
多项式的乘法:
conv函数实现多项式的乘运算,deconv函数实现多项式的除运算
>> f = [1 4 -2 7 11];
>> g = [9 -11 5 0 8];
>> c = conv(f,g)
c =
9 25 -57 105 20 -54 39 56 88
注意:conv函数只能进行两个多项式的乘法,两个以上的多项式的乘法需要重复使用conv
>> c = [1 5 15 35 69 100 118 110 72];
>> b = [1 2 3 6 8];
>> [a,r] = deconv(c,b)
a =
1 3 6 8 9
r =
0 0 0 0 0 -2 -5 -8 0
>> a = [3 6 9];
>> b = [1 2 0];
>> k = polyder(a,b)
k =
12 36 42 18
>> K = poly2str(k,'x')
K =
12 x^3 + 36 x^2 + 42 x + 18
>> [q,d] = polyder(b,a)
q =
18 18
d =
9 36 90 108 81
>> p = [1 -1 2];
>> k = 1/2;
>> F = polyint(p,k)
F =
0.3333 -0.5000 2.0000 0.5000
>> df = poly2sym(F)
df =
x^3/3 - x^2/2 + 2*x + 1/2
matlab提供了polyval函数与polyvalm函数用于求多项式p(x)在x=a的取值。输入可以是标量或矩阵
polyvalm函数的输入参数只能是N阶方阵,这时可以将多项式看作矩阵函数
>> X = pascal(4)
X =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
>> p = poly(X)
p =
1.0000 -29.0000 72.0000 -29.0000 1.0000
>> P = poly2str(p,'x')
P =
x^4 - 29 x^3 + 72 x^2 - 29 x + 1
>> y = polyval(p,X)
y =
1.0e+04 *
0.0016 0.0016 0.0016 0.0016
0.0016 0.0015 -0.0140 -0.0563
0.0016 -0.0140 -0.2549 -1.2089
0.0016 -0.0563 -1.2089 -4.3779
>> y = polyvalm(p,X)
y =
1.0e-10 *
-0.0003 -0.0036 -0.0052 -0.0143
-0.0021 -0.0136 -0.0179 -0.0464
-0.0059 -0.0330 -0.0400 -0.1047
-0.0130 -0.0639 -0.0750 -0.1962
matlab中,有理多项式由它们的分子多项式和分母多项式表示。对有理多项式进行运算的两个函数是residue和polyder。redidue执行部分分式展开的运算
>> 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
>> a = [3 6 9];
>> b = [1 2 0];
>> k = polyder(a,b)
k =
12 36 42 18
>> K = poly2str(k,'x')
K =
12 x^3 + 36 x^2 + 42 x + 18
>> [q,d] = polyder(b,a)
q =
18 18
d =
9 36 90 108 81