Matlab 版 (精华区)

发信人: bage (最近比较烦), 信区: Matlab
标  题: Matlab详细教程(三十七)
发信站: 哈工大紫丁香 (Sun Feb  4 13:04:37 2001), 转信

发信人: finance (淼水), 信区: MathTools       
发信站: BBS 水木清华站 (Sat Apr  3 16:41:57 1999)

4.1.4 多项式函数 

--------------------------------------------------------------------------------

在工程及科学分析上,多项式常被用来模拟一个物理现象的解析函数,我们在第九章所介绍的「曲线契合」即是一个这方面的应用。之所以采用多项式,是因为它很容易计算。在这章中我们将说明如何做多项式的计算及解多项式的根。 


令p(x) 代表一个多项式如下 

 

MATLAB 以一最简便方式代表上述的多项式 p=[1 4 -7 -10],其中的数值是多项式的各阶项(从高到低)的 各个系数,其实p 也是一个阵列不过是用以代表这个多项式。 


有了多项式的表示式后,我们即可来计算其函数值。假设要计算一组数据x对应的多项式值,依照一般的函数计算须以下列式子计算: 

>> p=x.^3+4*x.^2-7*x-10 

为了能直接运用多项式,可以用函数 polyval直接做运算,语法为 polyval(p,x),其中p 即是代表多项式各阶系数 的阵列。因此 

>> x=linspace(-1,3); 

>> p=[1 4 7 -10]; 

>> v=polyval(p,x);


我们接著说明如何对二个多项式做加减乘除运算,以及对多项式微分。当二个多项式间要做加减乘除时,加减运算可以直接进行。假设有二个多项式 和  定义如下: 

 

如果多项式  为上述二多项式相加,即 ,因此 

 

如果是二多项式相减得到的多项式为  则 




而将两个多项式相乘可以得到一新的多项式: 

 

如果是两个多项式相除,即: 

 

上述二个运算式不能直接运算,须要另外定义函数conv做乘法运算以及函数deconv做除法运算。当二多项式相乘,在数学上等于二个阵列做旋积(convolution)运算(因为我们是以阵列来代表一个多项式的各阶系数),因此可利用conv函数做乘法运算,其语法为conv(a,b),其中a, 
b代表二个多项式的阵列。而二多项式相除就相 当于反旋积(de-convolution) 运算,因此有 deconv 函数,其语法稍有不同 [q,r]=deconv(a,b),其中q,r分别代表整除多项式及余数多项式。


以下就介绍相关范例,来说明二个多项式的加减乘除运算: 

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

>> c=a+b 

c = 

2 6 12 20 

>> d=a-b 

d = 

0 -2 -6 -12 

>> e=conv(a,b) 

e = 

1 6 20 50 75 84 64 

>> g=e+[0 0 0 c] 

g = 

1 6 20 52 81 96 84 

>> [f,r]=deconv(e,b) 

f = 

1 2 3 4 

r = 

0 0 0 0 0 0 0 % 因为是整除所以余数多项式的各系数皆为零 

>> [h,r]=deconv(g,a) 

f = 

1 4 9 18 

r = 

0 0 0 0 2 6 12 % 余数多项式为 2*x^2 + 6*x + 12


一个多项式视其阶数而定,它的根可以有一个到数个,可能为实数也可能是复数。要求一高阶多项式的根往往须借助数值方法,所幸MATLAB已将这些数值方法写成一函数roots(p),我们只要输入多项式的各阶系数(以p代表)即可求解到对应的根。 

>> p=[1 3 2]; 

>> r=roots(p) 

r = 

-2 

-1 

>> p=[1 -12 0 25 116]; % 注意二阶项系数为零须要输入,否则多项式的阶数就不对 

>> r=roots(p) % 有实数根及复数根 

r = 

11.7473 

2.7028 

-1.2251 + 1.4672i 

-1.2251 - 1.4672i


与 roots 相关的函数尚有 poly, real,这二个函数的用途是要验算求解的根展开能求得原多项式。例如有一个二次方程式的根为 2, 1,则以下式计算原多项式 

 

poly函数就是在求出多项式的各阶系数,其语法为 poly(r),其中 r 是代表根的阵列。而 real则是用来去除因计算时产生的假虚部系数,为何会有此种情形请参考以下的例子。 

>> r=[-2 -1]; 

>> pp=poly(r) % pp=(x+2)(x+1)=x^2+3x+2 

pp = 

1 3 2 

>> p=[1 -4 6 -4]; 

>> r=roots(p) 

r = 

2.0000 1.0000 + 1.0000i 1.0000 - 1.0000i 

>> pp=poly(r) % 这个多项式的系数与原多项式 p 相同 

pp = 

1 -4 6 -4 

>> pp=[1 7 12 9]; % 再看另一个多项式 

>> r=roots(pp) 

r = 

-4.9395 

-1.0303 + 0.8721i 

-1.0303 - 0.8721i 

>> pp=poly(r) % 注意因计算的误差会有假虚部产生 

pp = 

1.0000 7.0000 12.0000 9.0000 + 0.0000i 

>> pp=real(pp) % 可以real将假虚部去除,将原多项式还原 

pp = 

1.0000 7.0000 12.0000 9.0000



--------------------------------------------------------------------------------

   
上一页 下一页 讲义大纲 
 
--
行至水穷处,坐看云起时
***********************
菩提本无树,明镜亦非台
本来无一物,何处染尘埃

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bage.bbs@smth.org]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.550毫秒