0 创建多项式
多项式的一般形式如下:
我们可以使用它的系数向量来表示,
matlab中,提供了poly2sym函数实现多项式的构造。
- r = poly2sym(c):c为多项式的系数向量
- r = poly2sym(c, v):c为多项式的系数向量,v为其变量
复制代码
1
2
3
4
5
6
7
8
9
10
11>> 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
1.多项式的求根
多项式的根:
matlab使用roots函数求解多项式的根,即求解函数等于0的根
- r = roots(c):其中c为多项式的系数向量,r为求解多项式的根
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16>> 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中规定,多项式是行向量,根是列向量。给出一个多项式的根,也可以构造相应的多项式。
- p = poly(A):如果A为方阵,则多项式p为该方阵的特征多项式;如果A为向量,则A的元素为该多项式p的根。n阶方阵的特征多项式存放在行向量中,并且特征多项式最高次的系数一定为1
复制代码
1
2
3
4
5>> pp = poly(r) pp = 1.0000 -12.0000 -0.0000 25.0000 116.0000
2.多项式的四则运算
多项式的加法:
如果两个多项式向量大小相同,相加时就与标准的数组加法相同
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25>> 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函数实现多项式的除运算
- c = conv(a,b):执行a,b两个向量的卷积运算
- c = conv(a,b,'shape'):按形参‘shape’返回卷积运算,shape取值如下:
- full:为返回完整的卷积,是默认值
- same:为返回部分卷积,其大小与向量a大小相同
- valid:只返回无填充0部分的卷积,此时输出向量c的最大值为max(length(a) - max(0,length(b) - 1),0).
复制代码
1
2
3
4
5
6
7>> 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
- [q,r] = deconv(v,u):求多项式v, u的除法运算,其中q为返回多项式v除以u的商式,r为返回v除以u的余式。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12>> 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
3.多项式的导数
- k = polyder(p):求多项式的导函数多项式
- k = polyder(a,b):求多项式a与多项式b乘积的导函数多项式
- [q,d] = polyder(b,a):求多项式b与多项式a相除的导函数,导函数的分子存入q,分母存入d
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23>> 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
4.多项式的积分
- polyint(p,k):返回以向量p为系数的多项式积分,积分的常数项为k
- polyint(p):返回以向量p为系数多项式的积分,积分的常数项为默认值0
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13>> 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
5.多项式的估值
matlab提供了polyval函数与polyvalm函数用于求多项式p(x)在x=a的取值。输入可以是标量或矩阵
- y = polyval(p,x):p为多项式的系数向量,x为矩阵,它是按数组运算规则来求多项式的值
- [y,delta] = polyval(p,x,S):使用可选的结构数组S产生由polyfit函数输出的估计参数值;delta是预测未来的观测估算的误差标准偏差
- y = polyval(p,x,[],mu)或[y,delta] = polyval(p,x,S,mu):使
替代x,
,其中心点与坐标值
可由polyfit函数计算得出
polyvalm函数的输入参数只能是N阶方阵,这时可以将多项式看作矩阵函数
- Y = polyvalm(p,X):p为多项式的系数向量,X为方阵,其实按矩阵运算规则来求多项式的值。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42>> 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
6.有理多项式
matlab中,有理多项式由它们的分子多项式和分母多项式表示。对有理多项式进行运算的两个函数是residue和polyder。redidue执行部分分式展开的运算
- [r,p,k] = residue(b,a):b,a分别为分子和分母多项式系数的行向量,r为留数行向量
- [b,a] = residue(r,p,k):p为极点行向量,k为直项行向量
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32>> 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
7.多项式的微分
- k = polyder(p):p,k分别为原多项式及微分多项式的多项式表示
- k = polyder(a,b):求多项式a与多项式b乘积的导函数多项式
- [q,b] = polyder(b,a):求多项式b与多项式a相除的导函数,导函数的分子存入q,分母存入d
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23>> 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
最后
以上就是机智铅笔最近收集整理的关于matlab多项式及其运算的全部内容,更多相关matlab多项式及其运算内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复