MATLAB多项式

作者: 校苑数模 | 来源:发表于2019-01-05 12:23 被阅读2次

    9 多项式的表达式及其操作

    9.1 多项式的表达式和创建

    1.多项式的表达式

    MATLAB用一个行向量来表示多项式,此行向量就是将幂指数降序排列之后多项式各项的系数。例如,考虑下面的表达式:

    这就是Wallis在他第一次在法国科学院提出牛顿法的时候所用的多项式。在MATLAB中,该多项式可以用以下命令来输入:

    >> p = [1 0 -2 -5];

    这个表达式的含义就是的系数为1,的系数为0(原公式中无此项,需补足为0),的系数为-2,常数项为-5。

    2.多项式行向量的创建方法

    多项式系数向量的直接输入法就是按照多项式表达式的约定,把多项式的各项系数一次排放在行向量的元素位置上。

    正如前面所提到的:多项式的系数要以降幂顺序排列,假如多项式中缺少了某一幂次,那么就认为该幂次的系数为零。

    利用命令P=poly(A)生成多项式系数向量。若A是方阵,多项式P就是该方阵的特征多项式。若A是一个向量, A的元素就被认为是多项式P的根。

    【例2-36】 求 3 阶方阵 A 的特征多项式。

    >>A=[11 12 13;14 15 16;17 18 19];

    >>PA=poly(A) % A的特征多项式

    >>PPA=poly2str(PA,'s') % 以较为习惯的方式显示多项式

    PA =

    1.0000 -45.0000 -18.0000 0.0000

    PPA =

    s^3 - 45 s^2 - 18 s +1.6206e-014

    【例2-37】 由给定根向量求多项式系数向量。

    >> R=[-0.5,-0.3+0.4*i,-0.3-0.4*i]; % 根向量

    >> P=poly(R) % R 的特征多项式

    P =

    1.0000 1.1000 0.5500 0.1250

    >> PR=real(P) % 求 PR的实部

    PR =

    1.0000 1.1000 0.5500 0.1250

    >> PPR=poly2str(PR,'x')

    PPR =

    x^3 + 1.1x^2 + 0.55 x + 0.125

    需要指出的是:要形成实系数多项式,则根向两种的复数根必须共轭成对;含复数的根向量所生成的多项式系数向量(如P)的系数有可能带在截断误差数量级的虚部,此时可以采用取实部的函数real来将此虚部滤掉。

    9.2 多项式运算函数

    常用的多项式运算所涉及到的函数见表2-11。

    表2-11 多项式运算函数

    函数形式

    函数功能

    函数形式

    函数功能

    conv

    卷积和多项式乘法

    polyint

    解析多项式积分

    deconv

    去卷积和多项式除法

    polyval

    按数组运算规则计算多项式值

    poly

    求具有指定根的多项式

    polyvalm

    按矩阵运算规则计算多项式值

    polyder

    多项式求导

    residue

    部分分式展开式和多项式系数之间转换

    polyeig

    多项式本征值

    roots

    多项式的根

    polyfit

    多项式拟合

    【例2-38】 求

    的“商”及“余”多项式。

    >> p1=conv([1,0,2],conv([1,4],[1,1])); % 计算分子多项式

    >> p2=[1 0 1 1]; % 注意缺项补零

    >> [q,r]=deconv(p1,p2);

    >> cq=' 商多项式为 ';

    >> cr=' 余多项式为 ';

    >> disp([cq,poly2str(q,'s')]),disp([cr,poly2str(r,'s')]) % 显示运算结果

    运行的结果如下:

    商多项式为 s + 5

    余多项式为 5 s^2 + 4 s + 3

    【例2-39】 两种多项式求值指令的差别示例。

    >> S=pascal(4) % 生成一个 4 阶方阵

    S =

    1 1 1 1

    1 2 3 4

    1 3 6 10

    1 4 10 20

    >> P=poly(S);

    >> PP=poly2str(P,'s')

    PP =

    s^4 - 29s^3 + 72 s^2 - 29 s + 1

    >> PA=polyval(P,S) % 独立变量取数组 S 元素时的多项式值

    PA =

    1.0e+004 *

    0.0016 0.0016 0.0016 0.0016

    0.0016 0.0015 -0.0140 -0.0563

    0.0016 -0.0140 -0.2549 -1.2089

    0.0016 -0.0563 -1.2089 -4.3779

    >> PM=polyvalm(P,S) % 独立变量取矩阵 S 时的多项式值

    PM =

    1.0e-010 *

    -0.0013 -0.0063 -0.0104 -0.0241

    -0.0048 -0.0217 -0.0358 -0.0795

    -0.0114 -0.0510 -0.0818 -0.1805

    -0.0228 -0.0970 -0.1553 -0.3396

    从理论上讲,PM应该为零。这就是著名的“Caylay-Hamilton”定理:任何一个矩阵满足它自己的特征多项式方程。本例中的PM的元素都很小,这是由截断误差造成的。

    【例2-40】 部分分式展开示例。

    >> a=[1,3,4,2,7,2]; % 分母多项式系数向量

    >> b=[3,2,5,4,6]; % 分子多项式系数向量

    >> [r,s,k]=residue(b,a)

    r =

    1.1274 +1.1513i

    1.1274 -1.1513i

    -0.0232 -0.0722i

    -0.0232 +0.0722i

    0.7916

    s =

    -1.7680 +1.2673i

    -1.7680 -1.2673i

    0.4176 +1.1130i

    0.4176 -1.1130i

    -0.2991

    k =

    []

    本例中的k是空阵,这说明分母的阶数高于分子。另外从计算数学上来讲,如果某些根很靠近,极点和留数的计算受截断误差的影响会比较大,此时用这种表达方式的数值稳定性不如用状态方程或零点、极点展开可靠。

    相关文章

      网友评论

        本文标题:MATLAB多项式

        本文链接:https://www.haomeiwen.com/subject/jiyrrqtx.html