Alex_McAvoy

想要成为渔夫的猎手

Matlab 多项式

【多项式】

多项式:$P(x)=a_0x^n+a_1x^{n-1}+a_2x^{n-2}+…+a_nx^0$

用系数来表示:$a_0a_1a_2…a_n$

例如:$2x^4+3x^2+x+1$

1
p=[2 0 3 1 1]

poly2sym(A):A是一个行向量,代表一个多项式的系数,利用该行向量构建一个符号类型的多项式

1
2
3
4
>> p=[2 0 3 1 1];
>> poly2sym(p)
ans =
2*x^4 + 3*x^2 + x + 1

【多项式的根】

roots(A):A 是一个行向量,代表一个多项式的系数,用于求解该多项式的根

1
2
3
4
5
6
7
>> p=[2 0 3 1 1];
>> roots(p)
ans =
0.2459 + 1.1484i
0.2459 - 1.1484i
-0.2459 + 0.5496i
-0.2459 - 0.5496i

poly(A):A 是一个行向量,代表一个多项式的根,利用根求出该多项式的系数

1
2
3
4
>> r=[1 -2 3]
>> poly(r)
ans =
1 -2 -5 6

【多项式运算】

加减法:

  • 两个多项式阶次相同时,与数组元素加减法相同
  • 两个多项式阶次不同时,低阶的多项式用首 0 填补,使其与高阶多项式有同样的阶次
1
2
3
4
5
6
7
8
9
10
function res=add_and_sub(a,b)
if nargin~=2
error('参数个数错误')
end

a=a(:).';
b=b(:).';
len_a=length(a);
len_b=length(b);
res=[zeros(1,len_b-len_a) a]+[zeros(1,len_a-len_b) b];

乘法:

  • conv(A,B):执行 A,B 两向量的卷积运算
  • conv(a,b,'shape'):按形参 ‘shape’ 返回卷积运算,取值如下:
    • full:返回完整的卷积,默认值
    • same:返回部分卷积,其大小与向量 A 大小相同
    • valid:只返回无填充 0 部分的卷积,此时输出向量 c 的最大值为 max(length(a) - max(0,length(b) - 1),0)
1
2
3
4
5
>> A=[1 1];
>> B=[2 0];
>> conv(A,B)
ans =
2 2 0

除法:[q,r] = deconv(A,B):求多项式 A,B 的除法运算,其中 q 为返回多项式 B 除以 A 的商式,r 为返回 B 除以 A 的余式,即:B*q+r=A

1
2
3
4
5
6
7
8
9
10
11
>> A=[1 2 3 4 5]
A =
1 2 3 4 5
>> B=[1 2 3]
B =
1 2 3
>> [q,r]=deconv(A,B)
q =
1 0 0
r =
0 0 0 4 5

【多项式导数】

  • polyder(A):求多项式 A 的导函数多项式
  • 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
>> 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

【多项式的积分】

polyint(p,k):返回以向量 p 为系数的多项式积分,积分的常数项为 k,k 默认为 0

例如:多项式为 $x^2-x+2$,常数项为 $\frac{1}{2}$

有:$\frac{1}{3}x^3-\frac{1}{2}x^2+2x+\frac{1}{2}$

1
2
3
4
5
6
7
8
>> 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

【多项式估值】

y = polyval(p,x):p 为多项式的系数向量,x 为矩阵,按数组运算规则来求多项式的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>> x=[0:0.1:1]
x =
19
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000

1011
0.9000 1.0000

>> f=[1 2 3 4 5]
f =
1 2 3 4 5
>> polyval(f,x)
ans =
19
5.0000 5.4321 5.9376 6.5321 7.2336 8.0625 9.0416 10.1961 11.5536

1011
13.1441 15.0000

【有理多项式】

matlab 中,有理多项式由它们的分子多项式和分母多项式表示。

有理多项式展开

[r,p,k]=redidue(a,b):对有理多项式 $\frac{a}{b}$ 进行分式展开,r 为留数行向量,p 为极点行向量,k 为直项行向量,a 为分子多项式,b 为分母多项式

例如:$P(x)=\frac{x^3+2x^2+3x+4}{4x^3+5x^2+6x+7}$

分子项:a=[1 2 3 4],分母项:b=[4 5 6 7]

进行 redidue(a,b)后有:

1
2
3
4
5
6
7
8
9
10
11
12
13
>> a=[1 2 3 4];
>> b=[4 5 6 7];
>> [r,p,k]=residue(a,b)
r =
0.1341 + 0.0000i
0.0267 - 0.1262i
0.0267 + 0.1262i
p =
-1.2078 + 0.0000i
-0.0211 + 1.2035i
-0.0211 - 1.2035i
k =
0.2500

那么,$P(x)$可表达为:$P(x)=\frac{r1}{x+p1}+\frac{r2}{x+p2}+\frac{r3}{x+p3}+k$

即:$P(x)=\frac{0.1341}{x-1.2078}+\frac{0.0267 - 0.1262i}{x-0.0211 + 1.2035i}+\frac{0.0267 + 0.1262i}{x-0.0211 - 1.2035i}+0.25$

有理多项式展开的逆运算

[b,a] = residue(r,p,k):根据 r 留数行向量,p 极点行向量,k 直项行向量,进行展开的逆运算,得到 a 分子多项式,b 分母多项式

1
2
3
4
5
6
7
8
>> r =[0.1341, 0.0267 - 0.1262i, 0.0267 + 0.1262i];
>> p =[-1.2078, -0.0211 + 1.2035i, -0.0211 - 1.2035i];
>> k = 0.25;
>> [a b]=residue(r,p,k)
a =
0.2500 0.5000 0.7500 1.0000
b =
1.0000 1.2500 1.5000 1.7500
感谢您对我的支持,让我继续努力分享有用的技术与知识点!