MATLAB入门(8):多项式
(2016-08-09 08:46:25)
标签:
matlab工程技术教学文化 |
分类: 机电仿真及MATLAB(教学) |
今天介绍一下应用于多项式领域的一些代码。
令p(x) 代表一个多项式如下,下面不在重复说明。
MATLAB 以一最简便方式代表上述的多项式 p=[1 4 -7 -10],其中的数值是多项式的各阶项(从高到低)的 各个系数,其实p 也是一个阵列不过是用以代表这个多项式。
1. 多项式的四则运算
假设有二个多项式a(x)和b(x)定义如下:
(1)多项式的加减运算
如果多项式c(x)为上述二多项式相加,即c(x)=a(x)+b(x),因此
如果是二多项式相减得到的多项式为 d(x)=a(x)-b(x)
(2)多项式乘法运算
函数conv(P1,P2)用于求多项式P1和P2的乘积。这里,P1、P2是两个多项式系数向量。
而将两个多项式相乘可以得到一新的多项式e(x)=a(x)b(x):
练习:求多项式乘以多项式的结果。
(3)多项式除法
函数[Q,r]=deconv(P1,P2)用于对多项式P1和P2作除法运算。其中Q返回多项式P1除以P2的商式,r返回P1除以P2的余式。这里,Q和r仍是多项式系数向量。deconv是conv的逆函数,即有P1=conv(P2,Q)+r。如果是两个多项式相除,即:
练习:求多项式除以多项式的结果。
附加说明一下,上述二个运算式不能直接运算,须要另外定义函数conv做乘法运算以及函数deconv做除法运算。当二多项式相乘,在数学上等于二个阵列做旋积(convolution)运算(因为我们是以阵列来代表一个多项式的各阶系数),因此可利用conv函数做乘法运算,其语法为conv(a,b),其中a, b代表二个多项式的阵列。而二多项式相除就相 当于反旋积(de-convolution) 运算,因此有 deconv 函数,其语法稍有不同 [q,r]=deconv(a,b),其中q,r分别代表整除多项式及余数多项式。
2. 多项式的导函数
对多项式求导数的函数是:
p=polyder(P):求多项式P的导函数
p=polyder(P,Q):求P·Q的导函数
[p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。
上述函数中,参数P,Q是多项式的向量表示,结果p,q也是多项式的向量表示。求有理分式的导数。
这是书籍里的例子,我简单介绍一下,对于这代码确实不太清楚,如果有知道的请务必告诉俺一声!~~拜谢了。
3. 多项式求根
一个多项式视其阶数而定,它的根可以有一个到数个,可能为实数也可能是复数。要求一高阶多项式的根往往须借助数值方法,所幸MATLAB已将这些数值方法写成一函数roots(p),我们只要输入多项式的各阶系数(以p代表)即可求解到对应的根。 其中P为多项式的系数向量,求得的根赋给向量x,即x(1),x(2),…,x(n)分别代表多项式的n个根。
例如多项式的根。
复制代码
再举一个例子多项式的根
复制代码
练习: 多项式的根。
与 roots 相关的函数尚有 poly, real,这二个函数的用途是要验算求解的根展开能求得原多项式。例如有一个二次方程式的根为 2, 1,则以下式计算原多项式
poly函数就是在求出多项式的各阶系数,其语法为 poly(r),其中 r 是代表根的阵列。而 real则是用来去除因计算时产生的假虚部系数,为何会有此种情形请参考以下的例子。
运行下列代码:
运行下列代码比较得出结果啊,一定要想一想,说明了什么。
再看另一个多项式,代码如下
练习下列代码,已知 f(x)
(1) 计算f(x)=0 的全部根。
(2) 由方程f(x)=0的根构造一个多项式g(x),并与f(x)进行对比。
命令如下:
再附加一写命令,这些命令俺以前没有接触过,翻书时才发现自己以前没有用过的命令好多哦~~~如果写的有错误,大家尽量指出哦,别让我总错下去吗!!
4. 多项式的求值
MATLAB提供了两种求多项式值的函数:polyval与polyvalm,它们的输入参数均为多项式系数向量P和自变量x。两者的区别在于前者是代数多项式求值,而后者是矩阵多项式求值。
(1)代数多项式求值
polyval函数用来求代数多项式的值,其调用格式为:
Y=polyval(P,x)
若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。
已知多项式,分别取x=1和一个2×3矩阵为自变量计算该多项式的值。
(2)矩阵多项式求值
polyvalm函数用来求矩阵多项式的值,其调用格式与polyval相同,但含义不同。polyvalm函数要求x为方阵,它以方阵为自变量求多项式的值。设A为方阵,P代表多项式,那么polyvalm(P,A)的含义是:
A*A*A-5*A*A+8*eye(size(A))
而polyval(P,A)的含义是:
A.*A.*A-5*A.*A+8*ones(size(A))
仍以多项式,取一个2×2矩阵为自变量分别用polyval和polyvalm计算该多项式的值。
抄自http://www.matlabsky.com/forum-viewthread-tid-17685-fromuid-88314.html
令p(x) 代表一个多项式如下,下面不在重复说明。
MATLAB 以一最简便方式代表上述的多项式 p=[1 4 -7 -10],其中的数值是多项式的各阶项(从高到低)的 各个系数,其实p 也是一个阵列不过是用以代表这个多项式。
1. 多项式的四则运算
假设有二个多项式a(x)和b(x)定义如下:
(1)多项式的加减运算
如果多项式c(x)为上述二多项式相加,即c(x)=a(x)+b(x),因此
如果是二多项式相减得到的多项式为 d(x)=a(x)-b(x)
- a=[1 2 3 4];
- b=[1 4 9 16];
- c=a+b
- d=a-b
函数conv(P1,P2)用于求多项式P1和P2的乘积。这里,P1、P2是两个多项式系数向量。
而将两个多项式相乘可以得到一新的多项式e(x)=a(x)b(x):
- a=[1 2 3 4];
- b=[1 4 9 16];
- e=conv(a,b)
- %试试,下面这个嘿嘿!!看看发生变化。试想一下运行后的结果,如果不一样请看入门篇里的矩阵篇。
- g=e+[0 0 0 c]
(3)多项式除法
函数[Q,r]=deconv(P1,P2)用于对多项式P1和P2作除法运算。其中Q返回多项式P1除以P2的商式,r返回P1除以P2的余式。这里,Q和r仍是多项式系数向量。deconv是conv的逆函数,即有P1=conv(P2,Q)+r。如果是两个多项式相除,即:
- e=[1 6 20 50 75 84 64];
- b=[1 4 9 16];
- [f,r]=deconv (e,b)
- r =
- 0 0 0 0 0 0 0
% 因为是整除所以余数多项式的各系数皆为零 - [h,r]=deconv(g,a) % 要运行上面有g的命令哦~~
- r =
- 0 0 0 0 2 6 12 % 余数多项式为 2*x^2 + 6*x + 12
附加说明一下,上述二个运算式不能直接运算,须要另外定义函数conv做乘法运算以及函数deconv做除法运算。当二多项式相乘,在数学上等于二个阵列做旋积(convolution)运算(因为我们是以阵列来代表一个多项式的各阶系数),因此可利用conv函数做乘法运算,其语法为conv(a,b),其中a, b代表二个多项式的阵列。而二多项式相除就相 当于反旋积(de-convolution) 运算,因此有 deconv 函数,其语法稍有不同 [q,r]=deconv(a,b),其中q,r分别代表整除多项式及余数多项式。
2. 多项式的导函数
对多项式求导数的函数是:
p=polyder(P):求多项式P的导函数
p=polyder(P,Q):求P·Q的导函数
[p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。
上述函数中,参数P,Q是多项式的向量表示,结果p,q也是多项式的向量表示。求有理分式的导数。
- P=[1];
- Q=[1,0,5];
- [p,q]=polyder(P,Q)
3. 多项式求根
一个多项式视其阶数而定,它的根可以有一个到数个,可能为实数也可能是复数。要求一高阶多项式的根往往须借助数值方法,所幸MATLAB已将这些数值方法写成一函数roots(p),我们只要输入多项式的各阶系数(以p代表)即可求解到对应的根。 其中P为多项式的系数向量,求得的根赋给向量x,即x(1),x(2),…,x(n)分别代表多项式的n个根。
例如多项式的根。
- p=[1 3 2];
- r=roots(p)
- p=[1 -12 0 25 116]; % 注意二阶项系数为零须要输入,否则多项式的阶数就不对
- r=roots(p) % 有实数根及复数根
- r =
- 11.7473
- 2.7028
- -1.2251 + 1.4672i
- -1.2251 - 1.4672i
与 roots 相关的函数尚有 poly, real,这二个函数的用途是要验算求解的根展开能求得原多项式。例如有一个二次方程式的根为 2, 1,则以下式计算原多项式
poly函数就是在求出多项式的各阶系数,其语法为 poly(r),其中 r 是代表根的阵列。而 real则是用来去除因计算时产生的假虚部系数,为何会有此种情形请参考以下的例子。
运行下列代码:
- r=[-2 -1];
- pp=poly(r) % pp=(x+2)(x+1)=x^2+3x+2
- p=[1 -4 6 -4];
- r=roots(p)
- pp=poly(r)
% 这个多项式的系数与原多项式 p 相同
- pp=[1 7 12 9];
- r=roots(pp)
- pp=poly(r)
% 注意因计算的误差会有假虚部产生 - pp=real(pp) % 可以real将假虚部去除,将原多项式还原
(1) 计算f(x)=0 的全部根。
(2) 由方程f(x)=0的根构造一个多项式g(x),并与f(x)进行对比。
命令如下:
- P=[3,0,4,-5,-7.2,5];
- X=roots(P)
%求方程f(x)=0的根 - G=poly(X)
%求多项式g(x)
再附加一写命令,这些命令俺以前没有接触过,翻书时才发现自己以前没有用过的命令好多哦~~~如果写的有错误,大家尽量指出哦,别让我总错下去吗!!
4. 多项式的求值
MATLAB提供了两种求多项式值的函数:polyval与polyvalm,它们的输入参数均为多项式系数向量P和自变量x。两者的区别在于前者是代数多项式求值,而后者是矩阵多项式求值。
(1)代数多项式求值
polyval函数用来求代数多项式的值,其调用格式为:
Y=polyval(P,x)
若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。
已知多项式,分别取x=1和一个2×3矩阵为自变量计算该多项式的值。
- p=[1 3 0 0 -10];
- x=1;
- X=[1 1; 2 2; 3 3];
- Y1=polyval(p,x)
- Y2=polyval(p,X)
- %比较Y1和Y2。
polyvalm函数用来求矩阵多项式的值,其调用格式与polyval相同,但含义不同。polyvalm函数要求x为方阵,它以方阵为自变量求多项式的值。设A为方阵,P代表多项式,那么polyvalm(P,A)的含义是:
A*A*A-5*A*A+8*eye(size(A))
而polyval(P,A)的含义是:
A.*A.*A-5*A.*A+8*ones(size(A))
仍以多项式,取一个2×2矩阵为自变量分别用polyval和polyvalm计算该多项式的值。
- p=[1 3 0 0 -10];
- X=[1 1; 2 2];
- Y3=polyval(p,x)
- Y4=polyvalm(p,X)
- % 比较Y3和Y4。
抄自http://www.matlabsky.com/forum-viewthread-tid-17685-fromuid-88314.html
前一篇:MATLAB入门(9):微积分