logo资料库

精通matlab(pdf版).pdf

第1页 / 共266页
第2页 / 共266页
第3页 / 共266页
第4页 / 共266页
第5页 / 共266页
第6页 / 共266页
第7页 / 共266页
第8页 / 共266页
资料共266页,剩余部分请下载后查看
第10章 多 项 式 ................................................................................................................................. 2 10.1 根 ............................................................................................................................................ 2 10.2 乘法......................................................................................................................................... 3 10.3 加法......................................................................................................................................... 3 10.4 除法......................................................................................................................................... 4 10.5 导数......................................................................................................................................... 4 10.6 估值......................................................................................................................................... 4 10.7 有理多项式 ............................................................................................................................. 5 10.8 M文件举例.............................................................................................................................. 6 10.9 小结......................................................................................................................................... 9 第11章 曲线拟合与插值 ..................................................................................................................... 9 11.1 曲线拟合 ................................................................................................................................. 9 11.2 一维插值 ............................................................................................................................... 12 11.3 二维插值 ............................................................................................................................... 15 11.4 M文件举例............................................................................................................................ 18 11.5 小结....................................................................................................................................... 22 第12章 三次样条 ............................................................................................................................... 22 12.1 基本特征 ............................................................................................................................... 22 12.2 分段多项式 ........................................................................................................................... 23 12.3 积分....................................................................................................................................... 26 12.4 微分....................................................................................................................................... 28 12.5 小结....................................................................................................................................... 30 第13章 数值分析 ............................................................................................................................... 31 13.1 绘图....................................................................................................................................... 31 13.2 极小化 ................................................................................................................................... 33 第22章 符号数学工具 ..................................................................................................................... 202 22.1 引言..................................................................................................................................... 202 22.2 符号表达式 ......................................................................................................................... 202 22.3 符号表达式运算 ................................................................................................................. 205 22.4 微分和积分 ......................................................................................................................... 212 22.5 符号表达式画图 ................................................................................................................. 214 22.6 符号表达式简化和格式化 .................................................................................................. 216 22.7 可变精度算术运算 .............................................................................................................. 219 22.8 方程求解 ............................................................................................................................. 220 22.9 线性代数和矩阵 ................................................................................................................. 225 1
第10章 多 项 式 10.1 根 » p=[1 -12 0 25 116] p = 1 -12 0 25 116 » r=roots(p) r = 11.7473 2.7028 -1.2251 + 1.4672i -1.2251 - 1.4672i 找出多项式的根,即多项式为零的值,可能是许多学科共同的问题,。MATLAB求解这 个问题,并提供其它的多项式操作工具。在MATLAB里,多项式由一个行向量表示,它的 系数是按降序排列。例如,输入多项式x4-12x3+0x2+25x+116 注意,必须包括具有零系数的项。除非特别地辨认,MATLAB无法知道哪一项为零。给 出这种形式,用函数roots找出一个多项式的根。 因为在MATLAB中,无论是一个多项式,还是它的根,都是向量,MATLAB按惯例规 定,多项式是行向量,根是列向量。给出一个多项式的根,也可以构造相应的多项式。在 MATLAB中,命令poly执行这个任务。 因为MATLAB无隙地处理复数,当用根重组多项式时,如果一些根有虚部,由于截断误 差,则poly的结果有一些小的虚部,这是很普通的。消除虚假的虚部,如上所示,只要使用函 数real抽取实部。 » pp=poly(r) pp = 1.0e+002 * Columns 1 through 4 0.0100 -0.1200 0.0000 0.2500 Column 5 1.1600 + 0.0000i » pp=real(pp) %throw away spurious imaginary part pp = 1.0000 -12.0000 0.0000 25.0000 116.0000 2
10.2 乘法 函数conv支持多项式乘法(执行两个数组的卷积)。考虑两个多项式a(x)=x3+2x2+3x+4和 b(x)= x3+4x2+9x+16的乘积: 结果是c(x)=x6+6x5+20x4+50x3+75x2+84x+64。两个以上的多项式的乘法需要重复使 用conv。 » a=[1 2 3 4] ; b=[1 4 9 16]; » c=conv(a , b) c = 1 6 20 50 75 84 64 10.3 加法 » d=a+b d = 2 6 12 20 » e=c+[0 0 0 d] e = 1 6 20 52 81 96 84 对多项式加法,MATLAB不提供一个直接的函数。如果两个多项式向量大小相同,标准 的数组加法有效。把多项式a(x)与上面给出的b(x)相加。 结果是d(x)= 2x3+6x2+12x+20。当两个多项式阶次不同,低阶的多项式必须用首零填 补,使其与高阶多项式有同样的阶次。考虑上面多项式c和d相加: 结果是e(x)= x6+6x5+20x4+52x3+81x2+96x+84。要求首零而不是尾零,是因为相关的 系数象x幂次一样,必须整齐。 如果需要,可用一个文件编辑器创建一个函数M文件来执行一般的多项式加法。精通 MATLAB工具箱包含下列实现: if nargin<2 error(' Not enough input arguments ') end a=a(:).' ; % make sure inputs are polynomial row vectors b=b(:).' ; na=length(a) ; % find lengths of a and b % MMPADD Polynomial addition. % MMPADD(A,B) adds the polynomial A and B % Copyright (c) 1996 by Prentice Hall,Inc. function p=mmpadd(a,b) 3
nb=length(b) ; p=[zeros(1,nb-na) a]+[zeros(1,na-nb) b] ; % add zeros as necessary » f=mmpadd(c,d) f = 1 6 20 52 81 96 84 现在,为了阐述mmpadd的使用,再考虑前一页的例子。 它与上面的e相同。当然,mmpadd也用于减法。 结果是g(x)= x6+6x5+20x4+48x3+69x2+72x+44。 »g=mmpadd(c , -d) g = 1 6 20 48 69 72 44 10.4 除法 在一些特殊情况,一个多项式需要除以另一个多项式。在MATLAB中,这由函数deconv 完成。用上面的多项式b和c 这个结果是b被c除,给出商多项式q和余数r,在现在情况下r是零,因为b和q的乘积恰好 是c。 » [q , r]=deconv(c , b) q = 1 2 3 4 r = 0 0 0 0 0 0 0 10.5 导数 由于一个多项式的导数表示简单,MATLAB为多项式求导提供了函数polyder。 » g g = 1 6 20 48 69 72 44 » h=polyder(g) h = 6 30 80 144 138 72 10.6 估值 4
» x=linspace(-1, 3) ; % choose 100 data points between -1and 3. » p=[1 4 -7 -10] ; % uses polynomial p(x) = x3+4x2-7x-10 » v=polyval(p , x) ; 根据多项式系数的行向量,可对多项式进行加,减,乘,除和求导,也应该能对它们进 行估值。在MATLAB中,这由函数polyval来完成。 计算x值上的p(x),把结果存在v里。然后用函数plot绘出结果。 » plot(x , v),title(' x^3+4x^2-7x-10 '), xlabel(' x ') 图10.1 多项式估值 10.7 有理多项式 在许多应用中,例如富里哀(Fourier),拉普拉斯(Laplace)和Z变换,出现有理多项式或两 个多项式之比。在MATLAB中,有理多项式由它们的分子多项式和分母多项式表示。对有理 多项式进行运算的两个函数是residue和polyder。函数residue执行部分分式展开。 » num=10*[1 2] ; % numerator polynomial » den=poly([-1; -3; -4]) ; % denominator polynomial » [res, poles, k]=residue(num, den) res = -6.6667 5.0000 1.6667 poles = -4.0000 -3.0000 5 -10123-20-10010203040x^3+4x^2-7x-10x
-1.0000 k = [ ] 结果是余数、极点和部分分式展开的常数项。上面的结果说明了该问题: » roots(d) ans = -4.0000 -3.0000 -1.0000 » [n, d]=residue(res, poles, k) n = 0.0000 10.0000 20.0000 d = 1.0000 8.0000 19.0000 12.0000 这个函数也执行逆运算。 在截断误差内,这与我们开始时的分子和分母多项式一致。residue也能处理重极点的情 况,尽管这里没有考虑。 正如前面所述,函数polyder,对多项式求导。除此之外,如果给出两个输入,则它对有 理多项式求导。 该结果证实: » [b , a]=polyder(num , den) b = -20 -140 -320 -260 a = 1 16 102 328 553 456 144 10.8 M文件举例 本章说明了在精通MATLAB工具箱 中两个函数。这些函数说明了本章所论述的多项式 概念和如何写M文件函数。关于M文件的更多信息,参阅第8章。 在讨论M文件函数的内部结构之前,我们考虑这些函数做些什么。 » n % earlier data 6 102134666674531666710()()()()..sssssssddssssssssssssss{()()()()}1021342014032260161023285534561443265432
n = 0.0000 10.0000 20.0000 » b % earlier data b = -20 -140 -320 -260 » mmp2str(b , [ ] , 1) ans = -20*(s^3 + 7s^2 + 16s^1 + 13) » mmp2str(b , ' x ') ans = -20x^3 - 140x^2 - 320x^1 - 260 » mmp2str(b) % convert polynomial to string ans = -20s^3 - 140s^2 - 320s^1 - 260 » mmpsim(n) % strip away negligible leading term ans = 10.0000 20.0000 这里函数mmpsim删除在多项式n中近似为零的第一个系数。函数mmp2str把数值多项式变 换成等价形式的字符串表达式。该两个函数的主体是: if nargin<2, tol=norm(x)*1000*eps; end x=x(:).' ; % make sure input is a row i=find(abs(x)<.99&abs(x)
function s=mmp2str(p,v,ff) % MMP2STR Polynomial Vector to String Conversion. % MMP2STR(P) converts the polynomial vector P into a string. % For example: P = [2 3 4] becomes the string ' 2s^2 + 3s + 4 ' % % MMP2STR(P,V) generates the string using the variable V % instead of s. MMP2STR([2 3 4],' z ') becomes ' 2z^2 + 3z + 4 ' % % MMP2STR(P,V,1) factors the polynomial into the product of a % constant and a monic polynomial. % MMP2STR([2 3 4],[ ],1) becomes ' 2(s^2 + 1.5s + 2) ' % Copyright (c) 1996 by Prentice-Hall,Inc. if nargin<3, ff=0; end % factored form is False if nargin <2, v=' s ' ; end % default variable is ' s ' if isempty(v), v=' s ' ; end % default variable is ' s ' v=v(1) ; % variable must be scalar p=mmpsim(p) ; % strip insignificant terms n=length(p) ; if ff % put in factored form K=p(1) ; Ka=abs(K) ; p=p/K; if abs(K-1)<1e-4 pp=[ ]; pe=[ ] ; elseif abs(K+1)<1e-4 pp=' -(' ; pe= ') ' ; elseif abs(Ka-round(Ka))<=1e-5*Ka pp=[sprintf(' %.0f ', K) '*( ' ] ; pe= ') ' ; else pp=[sprintf(' %.4g ' , K) '*(' ] ; pe= ') ' ; end else % not factored form K=p(1); pp=sprintf(' %.4g ' , K) ; pe=[ ]; end if n==1 % polynomial is just a constant s=sprintf(' %.4g ',K); return end s=[pp v ' ^ ' sprintf(' %.0f ',n-1)]; % begin string construction for i=2:n-1 % catenate center terms in polynomial if p(i)<0, pm= ' - ' ; else, if p(i)<0,pm= ' ; end if p(i)= =1,pp=[ ] ; else, pp=sprintf(' %.4g ', abs(p(i))) ; end if p(i)~ =0,s=[s pm pp v ' ^ ' sprintf(' %.0f ',n-i)] ; end end if p(n)~ =0,pp=sprintf(' %.4g ',abs(p(n))); else, pp=[ ]; end 8
分享到:
收藏