题目 : MATLAB 语言多项式计算的分析与概述 摘要 :数值计算在科学研究与工程应用中有着十分广泛的应用,MATLAB 向我们提供了标准的多项式的常用函数,包括求根、相乘、相除等。
这些功能在进行现代数字信号处理与分析时非常有用。
本文主要通过示例的形式分析与概述MATLAB 多项式计算的基本内容。
关键词 : 多项式 ;运算 ; 函数 ; 拟合 ; MATLAB 。
一、 引言 : MATLAB 是由MATH WORKS 公司推出的一种面向科学与工程的计算软件。
如今MATLAB 语言发展速度非常快,涉及十分广阔,本文主要讨论MATLAB 多项式的计算,可谓MATLAB 的冰山一角。
读者若要了解MATLAB 语言的更多知识还应多读多看他人著作。
二、 多项式计算 :1,多项式的创建方法 :在MATLAB 里:多项式由一个行向量表示,它的系数是按降序排列。
例如: 由1×N 的向量表示多项式,如用poly2sym()可以查看这个多项式。
(1)直接输入法在MATLAB 命令窗口中直接输入多项式的系数矢量,然后利用转换函数poly2sym 将多项式由系数矢量形式转换为符号新式。
(2)指令P=poly(AR)法若AR 是方阵,多项式P 是该方阵的特征多项式若AR=[a 1, a 2,…,a n-1,a n ],则AR 的元素认为是多项式P 的根如果A 为二维矩阵, poly(A)给出A 的特征多项式。
如果A 为一维矩阵, poly(A)表示由A 的元素为多项式的根所确定的多项式。
【例1】产生多项式的方法。
clear%方法一(由多项式的系数确定的多项式) p=[1 -2 3]%直接给出多项式p poly2sym(p)%给出p 多项式的表达式 %方法二(由矩阵所确定的多项式) a=[1 2;-2 4]]..[210n a a a a p =nn n n n a x a x a x a P ++++=-- (22110)ps=poly(a)%给出a的特征多项式poly2sym(ps)%给出ps多项式的表达式%方法三(由多项式的根确定的多项式)x=[-1 2]px=poly(x)%以x的元素为多项式的根确定的多项式。
poly2sym(px)%给出ps多项式的表达式运行结果为p =1 -2 3ans =x^2-2*x+3a =1 2-2 4ps =1 -5 8ans =x^2-5*x+8x =-1 2px =1 -1 -2ans =x^2-x-22.多项式函数的引用我们可以很方便地引用多项式函数(即求多项式的函数值)引用格式Y=polyval(px,x)这里,引用函数为polyval。
括号中,px为多项式的名,x为多项式自变量取值,Y为对应的函数值。
【例2】多项式函数的引用cleard=[-1 2]px=poly(d)y=polyval(px,4)%求多项式px在自变量等于4时的函数值x=-4:0.5:8yx=polyval(px,x)%求多项式px在自变量等于x序列时的函数值序列plot(x,yx)%作出两个变量的函数图a=roots(px)%求多项式px的根运行结果为d =-1 2px =1 -1 -2y =10x =Columns 1 through 6-4.0000 -3.5000 -3.0000 -2.5000 -2.0000 -1.5000 Columns 7 through 12-1.0000 -0.5000 0 0.5000 1.0000 1.5000 Columns 13 through 182.0000 2.50003.0000 3.50004.0000 4.5000 Columns 19 through 245.0000 5.50006.0000 6.50007.0000 7.5000 Column 258.0000yx =Columns 1 through 618.0000 13.7500 10.0000 6.7500 4.0000 1.7500 Columns 7 through 120 -1.2500 -2.0000 -2.2500 -2.0000 -1.2500 Columns 13 through 180 1.7500 4.0000 6.7500 10.0000 13.7500 Columns 19 through 2418.0000 22.7500 28.0000 33.7500 40.0000 46.7500 Column 2554.0000a =2-13.分式多项式的展开(1)传递函数:本质是将时域上的微分或积分方程进行Laplace 变换,结果是将时域问题变为频域问题求解,数学变换的关键是以及式中于是,传递函数一般是S 的多项式。
【例3】求一个RC 低通滤波器的幅频与相频特性图和转折频率。
%低通 r=100千欧 c=1微法 x=0:100;y=1./(j*0.1*x+1); A=abs(y); P=angle(y); g=abs(A-0.707); [a,b]=min(g) x0=x(b) PO=P(b) subplot(221) plot(x,A) subplot(222) plot(x,P) %转折频率为1/RC 运行结果为 a =1.0678e-004 b = 11 x0 = 10 PO = -0.7854s dtd =⎰=sdt 1ωj s =幅频 相频 (2)分子、分母多项式的单项展开留数定理:设函数在D 域内除有限个奇点外解析,在闭域D+C 上除这些点外连续,则有分子、分母多项式的单项展开在控制系统的分析中经常需要将由分母、分子多项式构成的传递函数进行部分展开,如)(......2211)()(s k bns anb s a b s a s B s A +-++-+-= 这时可以用[a,b,k]=residue(AN,BN)来进行分解。
这里,A 和B 为多项式,a 和b 是展开式的多项式,分别称为留数和残数。
AN 和BN 是A 和B 的系数。
K 为直行向量。
这对分析函数奇点非常有用。
【例4】请将)4)(3()2)(1(++++s s s s s进行部分分式展开。
>> AN=[1 3 2]; >> BN=[1 7 12 0]; >> [r,p,k]=residue(AN,BN) r = 1.5000 -0.6667⎰∑==cnk ka R i dz z f 1)(2)(π0.1667 p = -4 -3 0 k = [] 相当于原式为ss s 1667.036667.045.1++-++4.多项式的乘除与微分运算乘:conv(卷积) 除:deconv(解卷) polyder (微分) 【例5】计算)18)(32(++x x x cleara1=[1 0]; a2=[2 3]; a3=[1 18]; p1=conv(a1,a2) p2=conv(p1,a3)[p3,r]=deconv(p2,a3) conv(p3,a3)+r 运行结果为 p1 =2 3 0 p2 =2 39 54 0 p3 =2 3 0 r =0 0 0 0ans =2 39 54 0 >> poly2sym(ans) ans =2*x^3+39*x^2+54*x5.多项式的求根n 次多项式有n 个根,它们可以是实数、虚数或共扼复数。
MATLAB 中roots 用来求全部根。
如>> A=[6 1 0 3 1] A =6 1 0 3 1 >> roots(A) ans =0.4414 + 0.6980i 0.4414 - 0.6980i -0.7006 -0.34886. 多项式的曲线拟合1.用多项式函数去模拟一个离散数据的方法,称为多项式的曲线拟合。
2.方法:1)找出函数上的已知点系列。
2)由已知点系列确定多项式,即式中,P 为模拟的多项式,polyfit 为调用函数,x 和y 是已知点系列,n 是多项式的阶次。
(一般 n 越大越精确)【例6】用多项式去模拟一个正弦函数 clear x=0:0.1:6; y=sin(x); xx=0:6;),,(polyfit n y x pyy=sin(xx);a1=polyfit(xx,yy,3);y1=polyval(a1,x);a2=polyfit(xx,yy,4);y2=polyval(a2,x);a3=polyfit(xx,yy,5);y3=polyval(a3,x);subplot(231)plot(x,y,'-',x,y1,'.')subplot(232)plot(x,y,'-',x,y2,'.')subplot(233)plot(x,y,'-',x,y3,'.')结果为n=3 n=4 n=5可见,模拟情况与多项式的阶次有关。
但并不是拟合的阶次越高越好,一方面,提高阶次必然会增加计算量;另一方面,与数据点吻合的很好也不能说明拟合的结果准确会提高,高阶多项式对噪声(NOISE)敏感度较高,因此容易产生不准确的预测。
三、总结:MATLAB是一种以矩阵运算为基础的交换式程序语言,是专门针对科学和工程中计算和绘图的需求而开发的。
与其他计算机语言相比,具有简洁和智能化的特点,人机交互性能好,特别是它可以适应多种平台,并且随着计算机硬软件的更行而及时升级。
随着MATLAB版本的不断升级更新,它在基本课程教学、科学研究和工程应用中将发挥越来越大的作用。
参考文献:【1】《MATLAB基础及应用》155p、156p、157p、158p、159p、160p。
刘勍、温志贤,编著。
【2】《MATLAB基础及应用教程》周开利编著,北京大学出版社。