matlab多项式.doc

上传人:m**** 文档编号:558810258 上传时间:2023-05-09 格式:DOC 页数:13 大小:65.51KB
返回 下载 相关 举报
matlab多项式.doc_第1页
第1页 / 共13页
matlab多项式.doc_第2页
第2页 / 共13页
matlab多项式.doc_第3页
第3页 / 共13页
matlab多项式.doc_第4页
第4页 / 共13页
matlab多项式.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《matlab多项式.doc》由会员分享,可在线阅读,更多相关《matlab多项式.doc(13页珍藏版)》请在金锄头文库上搜索。

1、matlab多项式10.1 根找出多项式的根,即多项式为零的值,可能是许多学科共同的问题,。MATLAB求解这个问题,并提供其它的多项式操作工具。在MATLAB里,多项式由一个行向量表示,它的系数是按降序排列。例如,输入多项式x412x30x225x116 p=1-12025116p =1-12025116注意,必须包括具有零系数的项。除非特别地辨认,MATLAB无法知道哪一项为零。给出这种形式,用函数roots找出一个多项式的根。 r=roots(p)r =11.74732.7028-1.2251 + 1.4672i-1.2251 - 1.4672i因为在MATLAB中,无论是一个多项式,还

2、是它的根,都是向量,MATLAB按惯例规定,多项式是行向量,根是列向量。给出一 pp=poly(r)pp =1.0e+002 *Columns 1 through 4 0.0100-0.12000.00000.2500Column 5 1.1600 + 0.0000i pp=real(pp) %throw away spurious imaginary partpp =1.0000-12.00000.000025.0000116.0000因为MATLAB无隙地处理复数,当用根重组多项式时,如果一些根有虚部,由于截断误差,则poly的结果有一些小的虚部,这是很普通的。消除虚假的虚部,如上所示,只

3、要使用函数real抽取实部。10.2 乘法函数conv支持多项式乘法(执行两个数组的卷积)。考虑两个多项式a(x)=x32x23x4和b(x)= x34x29x16的乘积: a=1234 ;b=14916; c=conv(a , b)c =162050758464结果是c(x)=x66x520x450x375x284x64。两个以上的多项式的乘法需要重复使用conv。10.3 加法对多项式加法,MATLAB不提供一个直接的函数。如果两个多项式向量大小相同,标准的数组加法有效。把多项式a(x)与上面给出的b(x)相加。 d=a+bd =261220结果是d(x)= 2x36x212x20。当两个

4、多项式阶次不同,低阶的多项式必须用首零填补,使其与高阶多项式有同样的阶次。考虑上面多项式c和d相加: e=c+000de =162052819684结果是e(x)= x66x520x452x381x296x84。要求首零而不是尾零,是因为相关的系数象x幂次一样,必须整齐。如果需要,可用一个文件编辑器创建一个函数M文件来执行一般的多项式加法。精通MATLAB工具箱包含下列实现:function p=mmpadd(a,b)%MMPADD Polynomial addition.%MMPADD(A,B) adds the polynomial A and B%Copyright (c) 1996 b

5、y Prentice Hall,Inc.if nargin2error( Not enough input arguments )enda=a(:). ;%make sure inputs are polynomial row vectorsb=b(:). ;na=length(a) ;%find lengths of a and bnb=length(b) ;p=zeros(1,nb-na) a+zeros(1,na-nb) b ;%add zeros as necessary现在,为了阐述mmpadd的使用,再考虑前一页的例子。 f=mmpadd(c,d)f =162052819684它与

6、上面的e相同。当然,mmpadd也用于减法。g=mmpadd(c , -d)g =162048697244结果是g(x)= x66x520x448x369x272x44。10.4 除法在一些特殊情况,一个多项式需要除以另一个多项式。在MATLAB中,这由函数deconv完成。用上面的多项式b和c q , r=deconv(c , b)q =1234r =0000000这个结果是b被c除,给出商多项式q和余数r,在现在情况下r是零,因为b和q的乘积恰好是c。10.5 导数由于一个多项式的导数表示简单,MATLAB为多项式求导提供了函数polyder。 gg =162048697244 h=pol

7、yder(g)h =630801441387210.6估值根据多项式系数的行向量,可对多项式进行加,减,乘,除和求导,也应该能对它们进行估值。在MATLAB中,这由函数polyval来完成。 x=linspace(-1, 3) ; %choose 100 data points between -1and 3. p=14-7-10 ;%uses polynomial p(x) = x34x27x10 v=polyval(p , x) ;计算x值上的p(x),把结果存在v里。然后用函数plot绘出结果。 plot(x , v),title( x3+4x2-7x-10 ),xlabel( x )图

8、10.1多项式估值10.7有理多项式在许多应用中,例如富里哀(Fourier),拉普拉斯(Laplace)和Z变换,出现有理多项式或两个多项式之比。在MATLAB中,有理多项式由它们的分子多项式和分母多项式表示。对有理多项式进行运算的两个函数是residue和polyder。函数residue执行部分分式展开。 num=10*12 ; %numerator polynomial den=poly(-1; -3; -4) ;%denominator polynomial res, poles, k=residue(num, den)res =-6.66675.00001.6667poles =-

9、4.0000-3.0000-1.0000k =结果是余数、极点和部分分式展开的常数项。上面的结果说明了该问题:这个函数也执行逆运算。 n, d=residue(res, poles, k)n =0.000010.000020.0000d =1.00008.000019.000012.0000 roots(d)ans =-4.0000-3.0000-1.0000在截断误差内,这与我们开始时的分子和分母多项式一致。residue也能处理重极点的情况,尽管这里没有考虑。正如前面所述,函数polyder,对多项式求导。除此之外,如果给出两个输入,则它对有理多项式求导。 b , a=polyder(nu

10、m , den)b =-20-140-320-260a =116102328553456144该结果证实:10.8 M文件举例本章说明了在精通MATLAB工具箱 中两个函数。这些函数说明了本章所论述的多项式概念和如何写M文件函数。关于M文件的更多信息,参阅第8章。在讨论M文件函数的内部结构之前,我们考虑这些函数做些什么。 n%earlier datan =0.000010.000020.0000 b%earlier datab =-20-140-320-260 mmpsim(n)%strip away negligible leading termans =10.000020.0000 mmp

11、2str(b)%convert polynomial to stringans =-20s3 - 140s2 - 320s1 - 260 mmp2str(b , x )ans =-20x3 - 140x2 - 320x1 - 260 mmp2str(b , , 1)ans =-20*(s3 + 7s2 + 16s1 + 13) mmp2str(b , x , 1)ans =-20*(x3 + 7x2 + 16x1 + 13)这里函数mmpsim删除在多项式n中近似为零的第一个系数。函数mmp2str把数值多项式变换成等价形式的字符串表达式。该两个函数的主体是:function y=mmpsim

12、(x,tol)%MMPSIM Polynomial Simplification,Strip Leading Zero Terms.%MMPSIM(A) Delets leading zeros and small coefficients in the %polynomial A(s). Coefficients are considered small if their %magnitude is less than both one and norm(A)*1000*eps.%MMPSIM(A,TOL) uses TOL for its smallness tolerance.%Copy

13、right (c) 1996 by Prentice-Hall,Inc.if nargin2, tol=norm(x)*1000*eps; endx=x(:). ;%make sure input is a row i=find(abs(x).99&abs(x)tol) ;%find insignificant indicesx(i)=zeros(1, length(i) ;%set them to zeroi=find(x=0) ;%find significant indicesif isempty(i)y=0 ;%extreme case: nothing left!elsey=x(i(1) : length(x) ;%start with first termend%and go to end of polynomialfunction s=mmp2str(p,v,ff)%MMP2STR Polynomial Vector to String Conversion.%MMP2STR(P) converts the polynomial vector P into a string.%For example: P = 234 becomes the string 2s2 + 3s + 4

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号