matlab学习资料10

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第10章多项式

10.1 根

找出多项式的根,即多项式为零的值,可能是许多学科共同的问题,。MATLAB求解这个问题,并提供其它的多项式操作工具。在MATLAB里,多项式由一个行向量表示,它的系数是按降序排列。例如,输入多项式x4-12x3+0x2+25x+116

» p=[1 -12 0 25 116]

p =

1 -1

2 0 25 116

注意,必须包括具有零系数的项。除非特别地辨认,MATLAB无法知道哪一项为零。给出这种形式,用函数roots找出一个多项式的根。

» r=roots(p)

r =

11.7473

2.7028

-1.2251 + 1.4672i

-1.2251 - 1.4672i

因为在MATLAB中,无论是一个多项式,还是它的根,都是向量,MATLAB按惯例规定,多项式是行向量,根是列向量。给出一个多项式的根,也可以构造相应的多项式。在MATLAB中,命令poly执行这个任务。

» 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 -1

2.0000 0.0000 25.0000 116.0000

因为MATLAB无隙地处理复数,当用根重组多项式时,如果一些根有虚部,由于截断误差,则poly的结果有一些小的虚部,这是很普通的。消除虚假的虚部,如上所示,只要使用函数real抽取实部。

10.2 乘法

函数conv支持多项式乘法(执行两个数组的卷积)。考虑两个多项式a(x)=x3+2x2+3x +4和b(x)= x3+4x2+9x+16的乘积:

» a=[1 2 3 4] ; b=[1 4 9 16];

» c=conv(a , b)

c =

1 6 20 50 75 84 64

结果是c(x)=x6+6x5+20x4+50x3+75x2+84x+64。两个以上的多项式的乘法需要重复使用conv。

10.3 加法

对多项式加法,MATLAB不提供一个直接的函数。如果两个多项式向量大小相同,标准的数组加法有效。把多项式a(x)与上面给出的b(x)相加。

» d=a+b

d =

2 6 12 20

结果是d(x)= 2x3+6x2+12x+20。当两个多项式阶次不同,低阶的多项式必须用首零填补,使其与高阶多项式有同样的阶次。考虑上面多项式c和d相加:

» e=c+[0 0 0 d]

e =

1 6 20 5

2 81 96 84

结果是e(x)= x6+6x5+20x4+52x3+81x2+96x+84。要求首零而不是尾零,是因为相关的系数象x幂次一样,必须整齐。

如果需要,可用一个文件编辑器创建一个函数M文件来执行一般的多项式加法。精通MATLAB工具箱包含下列实现:

function p=mmpadd(a,b)

% MMPADD Polynomial addition.

% MMPADD(A,B) adds the polynomial A and B

% Copyright (c) 1996 by Prentice Hall,Inc.

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

nb=length(b) ;

p=[zeros(1,nb-na) a]+[zeros(1,na-nb) b] ; % add zeros as necessary

现在,为了阐述mmpadd的使用,再考虑前一页的例子。

» f=mmpadd(c,d)

f =

1 6 20 5

2 81 96 84

它与上面的e相同。当然,mmpadd也用于减法。

»g=mmpadd(c , -d)

g =

1 6 20 48 69 7

2 44

结果是g(x)= x6+6x5+20x4+48x3+69x2+72x+44。

10.4 除法

在一些特殊情况,一个多项式需要除以另一个多项式。在MATLAB中,这由函数deconv 完成。用上面的多项式b和c

» [q , r]=deconv(c , b)

q =

1 2 3 4

r =

0 0 0 0 0 0 0

这个结果是b被c除,给出商多项式q和余数r,在现在情况下r是零,因为b和q的乘积恰好是c。

10.5 导数

由于一个多项式的导数表示简单,MATLAB为多项式求导提供了函数polyder。

» g

g =

1 6 20 48 69 7

2 44

» h=polyder(g)

h =

6 30 80 144 138 72

10.6 估值

根据多项式系数的行向量,可对多项式进行加,减,乘,除和求导,也应该能对它们进行估值。在MATLAB中,这由函数polyval来完成。

» 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) ;

计算x值上的p(x),把结果存在v里。然后用函数plot绘出结果。

» plot(x , v),title(' x^3+4x^2-7x-10 '), xlabel(' x ')

图10.1 多项式估值

相关文档
最新文档