多项式是比较容易计算和直观的一种算式,也是比较容易被感知的,这里介绍多项式的解法。
例如:
p(x) = x^3+4*x^2-7*x-10
此多项式的matlab的表示方法为:
多项式 p=[1 4 -7 -10],其中的数值是多项式的各阶项(从高到低)的各个系数。
如果要计算一个多项式可以使用指令完成,polyval直接做运算:
[code]x=linspace(-1,3);
p=[1 4 7 -10];
v=polyval(p,x);[/code]
多项式的加法、减法、乘法、除法
例如有两个多项式:
a(x) = x^3+2x^2+3x+4
b(x) = x^3+4x^2+9x+16
很显然的是加法、减法相对的比较的简单,但是乘法、除法就显得有些麻烦。需要借助与指令来完成,主要是乘法conv、除法deconv。二多项式相乘,在数学上等于二个阵列做旋积(convolution)运算。而二多项式相除就相 当于反旋积(de-convolution) 运算。deconv 函数,其语法稍有不同[q,r]=deconv(a,b),其中q,r分别代表整除多项式及余数多项式。
[code]%加法:
a=[1 2 3 4]; b=[1 4 9 16];
c = a+b
c =
2 6 12 20
[/code]
[code]%减法
d = a-b
d =
0 -2 -6 -12[/code]
[code]%乘法
e=conv(a,b)
e =
1 6 20 50 75 84 64 [/code]
[code]%除法
>> [f,r]=deconv(e,b)
f =
1 2 3 4
r =
0 0 0 0 0 0 0 % 因为是整除所以余数多项式的各系数皆为零 [/code]
多项式的根视阶数而定,它的根可以有一个到数个,可能为实数也可能是复数。但在matlab下面求多项式的根就比较的简单,尤其是高介的多项式,我们不必要借助数值方法,而一概使用roots(p);只要输入多项式的各阶系数(以p代表)即可求解到对应的根。
比如:x^2+3x+2=0我们知道它的两个根为-2,-1。那么使用matlab来确认一下就是:
[code]>> p=[1 3 2];
r=roots(p)
r =
-2
-1[/code]
[code]%有实根与复根的多项式的解
>> p=[1 -12 0 25 116]; % 注意二阶项系数为零须要输入,否则多项式的阶数就不对
r=roots(p) % 有实数根及复数根
r =
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i[/code]
与 roots 相关的函数尚有 poly, real,这二个函数的用途是要验算求解的根展开能求得原多项式。
[code]>> r=[-2 -1];
pp=poly(r) % pp=(x+2)(x+1)=x^2+3x+2
pp =
1 3 2[/code]
产生虚假根部的情况
[code]>> pp=[1 7 12 9]; % 多项式
>> r=roots(pp)
r =
-4.9395
-1.0303 + 0.8721i
-1.0303 - 0.8721i
>> pp=poly(r) % 注意因计算的误差会有假虚部产生
pp =
1.0000 7.0000 12.0000 9.0000 + 0.0000i
>> pp=real(pp) % 可以real将假虚部去除,将原多项式还原
pp =
1.0000 7.0000 12.0000 9.0000[/code]
例如:
p(x) = x^3+4*x^2-7*x-10
此多项式的matlab的表示方法为:
多项式 p=[1 4 -7 -10],其中的数值是多项式的各阶项(从高到低)的各个系数。
如果要计算一个多项式可以使用指令完成,polyval直接做运算:
[code]x=linspace(-1,3);
p=[1 4 7 -10];
v=polyval(p,x);[/code]
多项式的加法、减法、乘法、除法
例如有两个多项式:
a(x) = x^3+2x^2+3x+4
b(x) = x^3+4x^2+9x+16
很显然的是加法、减法相对的比较的简单,但是乘法、除法就显得有些麻烦。需要借助与指令来完成,主要是乘法conv、除法deconv。二多项式相乘,在数学上等于二个阵列做旋积(convolution)运算。而二多项式相除就相 当于反旋积(de-convolution) 运算。deconv 函数,其语法稍有不同[q,r]=deconv(a,b),其中q,r分别代表整除多项式及余数多项式。
[code]%加法:
a=[1 2 3 4]; b=[1 4 9 16];
c = a+b
c =
2 6 12 20
[/code]
[code]%减法
d = a-b
d =
0 -2 -6 -12[/code]
[code]%乘法
e=conv(a,b)
e =
1 6 20 50 75 84 64 [/code]
[code]%除法
>> [f,r]=deconv(e,b)
f =
1 2 3 4
r =
0 0 0 0 0 0 0 % 因为是整除所以余数多项式的各系数皆为零 [/code]
多项式的根视阶数而定,它的根可以有一个到数个,可能为实数也可能是复数。但在matlab下面求多项式的根就比较的简单,尤其是高介的多项式,我们不必要借助数值方法,而一概使用roots(p);只要输入多项式的各阶系数(以p代表)即可求解到对应的根。
比如:x^2+3x+2=0我们知道它的两个根为-2,-1。那么使用matlab来确认一下就是:
[code]>> p=[1 3 2];
r=roots(p)
r =
-2
-1[/code]
[code]%有实根与复根的多项式的解
>> p=[1 -12 0 25 116]; % 注意二阶项系数为零须要输入,否则多项式的阶数就不对
r=roots(p) % 有实数根及复数根
r =
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i[/code]
与 roots 相关的函数尚有 poly, real,这二个函数的用途是要验算求解的根展开能求得原多项式。
[code]>> r=[-2 -1];
pp=poly(r) % pp=(x+2)(x+1)=x^2+3x+2
pp =
1 3 2[/code]
产生虚假根部的情况
[code]>> pp=[1 7 12 9]; % 多项式
>> r=roots(pp)
r =
-4.9395
-1.0303 + 0.8721i
-1.0303 - 0.8721i
>> pp=poly(r) % 注意因计算的误差会有假虚部产生
pp =
1.0000 7.0000 12.0000 9.0000 + 0.0000i
>> pp=real(pp) % 可以real将假虚部去除,将原多项式还原
pp =
1.0000 7.0000 12.0000 9.0000[/code]