资源描述:
《matlab多项式运算》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、幻灯片1MATLABR2007基础教程清华大学出版社第5章MATLAB的多项式运算幻灯片2l多项式在数学中有着极为重要的作用,同时多项式的运算也是工程和应用中经常遇到的问题。MATLAB提供了一些专门用于处理多项式的函数,用户可以应用这些函数对多项式进行操作。MATLAB中对多项式的操作包括多项式求根、多项式的四则运算及多项式的微积分。幻灯片3多项式的表示l在MATLAB中多项式用一个行向量表示,向量中的元素为该多项式的系数,按照降序排列。系数向量:P=[a0a1a2...an-1an]幻灯片4多项式的建立1.直接输
2、入法按照高次幂到低次幂的顺序,直接输入多项式的系数向量,如果多项式中某次幂缺项,则该次项的系数为零。举例:可以表示为向量A=[9743]可以表示为向量B=[60891]幻灯片5l可以使用poly2str()/poly2sym()函数,将多项式系数向量转化成多项式字符串,观察运算结果。举例:(1)A=[60891]poly2str(A,'x')/poly2sym(A)(2)A=[6089]poly2str(A,'x')(3)A=[60890]poly2str(A,'t')幻灯片62.使用poly()函数创建(1)如果A
3、为矩阵,则poly(A)将创建矩阵A的特征多项式。举例:A=[463;549;832]poly(A)(2)如果A为行向量[b0b1...bn-1bn],则创建多项式(x-b0)(x-b1)...(x-bn-1)(x-bn)系数向量。举例:a=[1-1-2]poly(a)此种方式,实际上就是求
以b0b1...bn-1bn为根的多项式幻灯片7多项式的四则运算l由于多项式是利用向量来表示,多项式的四则运算可以转化为向量的运算。l多项式的加减为对应项系数的加减,因此可以通过向量的加减来实现。但是在向量的加减中两个向量需要有
4、相同的长度,因此在进行多项式加减时,需要将短的向量前面补‘0’。幻灯片8多项式的四则运算多项式的乘法实际上是多项式系数向量之间的卷积运算,可以通过MATLAB中的卷积函数conv来完成。举例:a=[1,-1]b=[1,1]c=conv(a,b)poly2sym(c)幻灯片9多项式的除法为乘法的逆运算,可以通过反卷积函数deconv来实现。举例:c=[1,2,-1]a=[1,-1]b=deconv(c,a)幻灯片10多项式的运算函数lroots函数lroots函数用于求解多项式的根。该函数的输入参数为多项式的系数组成的
5、行向量,返回值为由多项式的根组成的列向量。lroots函数和poly函数为功能互逆的两个函数。l举例:la=[135]lp=poly(a)V=roots(p)幻灯片11lpolyval函数lpolyval函数用于多项式求值。对于给定的多项式,利用该函数可以计算该多项式在任意点的值。l举例:la=[235]lp1=polyval(a,1)lp2=polyval(a,3.72)幻灯片12lpolyder函数l函数polyder用于多项式求导。该函数可以用于求解一个多项式的导数、两个多项式乘积的导数和两个多项式商的导数。该
6、函数的用法为:lq=polyder(p)该命令计算多项式p的导数。lc=polyder(a,b)该命令实现多项式a、b的积的导数。l[q,d]=polyder(a,b)该命令实现多项式a、b的商的导数,q/d为最后的结果。l举例:a=[12-1-2];lb=[12];ly=polyder(a,b)[q,d]=polyder(a,b)幻灯片13多项式拟合l曲线拟合是工程中经常要用到的技术之一。MATLAB提供了曲线拟合工具箱满足用户要求,另外,还提供了多项式拟合函数。l函数polyfit给出在最小二乘意义下最佳拟合系数
7、。l该函数的调用格式为:lp=polyfit(x,y,n)其中x、y分别为待拟合数据的x坐标和y坐标,n用于指定返回多项式的次数。幻灯片14l举例:l对给定的5个点拟合三次曲线。llx=[12345]ly=[3.246.7138.3278.6467.2]lp=polyfit(x,y,3)lpoly2str(p,'x')ll可以使用fplot()绘图观察lfun='0.016667*x^3+24.0571*x^2-28.8595*x+8';fplot(fun,[050500])幻灯片15举例:用5阶多项式对[0,π/2
8、]上的正弦函数进行最小二乘法拟合x=0:pi/20:pi/2;y=sin(x);a=polyfit(x,y,5);x1=0:pi/30:2*pi;y1=sin(x1);y2=a(1)*x1.^5+a(2)*x1.^4+a(3)*x1.^3+a(4)*x1.^2+a(5)*x1+a(6);plot(x1,y1,'b-',x1,y2,'r*');l