暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第6章 数据分析——6.1 多项式及其函数

软件开发架构 2023-05-20
582
第6章  数据分析


知识要点


数据分析和处理是各种应用中非常重要的问题。针对数据分析和处理,MATLAB提供了大量的函数,方便用户使用。本章将介绍MATLAB强大的数据分析和处理功能,首先介绍多项式函数,这些函数用于多项式求值、多项式乘法、多项式除法等;接着介绍插值函数,MATLAB提供数个不同的插值算法;最后介绍limit函数对数组和函数极限的求解过程。


学习要求




6.1  多项式及其函数



多项式作为线性方程组的表现形式,在运算及应用中具有非常重要的意义,本节将重点介绍多项式的各种运算法则、运算函数及操作指令,并特别对有理多项式进行说明。


6.1.1  多项式的表达式和创建


MATLAB中使用一维向量来表示多项式,将多项式的系数按照降幂次序存放在向量中。多项式P(x)的具体表示方法如下:

P(x)=a0xn +a1xn-1+an-1x+an的系数构成的向量为:[ a0a1… an-1an ]


例如,多项式2x4+3x3+5x2+1就可以用向量[2 3 5 0 1]来表示。应当注意的是,多项式中缺少的幂次的系数应当为“0”。在MATLAB中,多项式由一个行向量表示,它的系数是按降序排列的。


6-1:输入多项式3x4-10x3+15x+1000

在命令行窗口中输入:

p = [3 -10 0 15 1000]

输出结果:

p =


           3         -10           0          15        1000


注意:必须包括具有0系数的项,如在上例中,多项式并没有二次项,因此二次项的系数为0,否则MATLAB是无法知道哪一项为0的。


6-2:将向量表示的多项式用字符串输出的通用函数示例。

创建M文件并命名为ex6_02.m,利用M文件编辑器在M文件中输入:

function s = pprintf(p)

if nargin > 1

    error ('Too much input arguments ')     % 确认输入变量

end

while p(1) == 0         % 将高次的零去掉

    p(1) = [];

end

l = length(p);          % 计算p的长度

if l == 0

    s = '0';

elseif l == 1

    s = num2str(p(1));

elseif l == 2

    s = strcat(num2str(p(1)), 'x+', num2str(p(2)));

elseif l > 2

    for i = 1 : l

        if i == 1

            if p(i) == 1

                s = strcat('x^{', num2str(l - i), '}');

            else

                s = strcat(num2str(p(i)), 'x^{', num2str(l - i), '}');

            end

        elseif i == l

            s = strcat(s, '+', num2str(p(i))');

        elseif i == l - 1

            s = strcat(s, '+', num2str(p(i)), 'x');

        else

            if p(i) == 0

            else

                s = strcat(s, '+', num2str(p(i)), 'x^{', num2str(l - i), '}');

            end

        end

    end

end

现在,为了试验函数pprintf,在命令行窗口中输入:

p = [1 0 3 5 7 9];

figure; title(pprintf(p))

在图形界面上输出结果:


6.1.2  多项式求根


1.多项式的根


找出多项式的根,即使多项式为0的值,可能是许多学科共同的问题。MATLAB能求解这个问题,并提供了特定函数roots求解一个多项式的根。


6-3:求解多项式3x4-10x3+15x+1000的根。

在命令行窗口中输入:

p = [3 -10 0 15 1000];

r = roots(p)

输出结果:

r =


   4.0283 + 2.8554i

   4.0283 - 2.8554i

  -2.3616 + 2.8452i

  -2.3616 - 2.8452i


2.由根创建多项式

MATLAB中,无论是一个多项式还是它的根,都是以向量形式存储的。按照惯例,多项式是行向量,根是列向量。因此,当我们给出一个多项式的根时,MATLAB也可以构造出相应的多项式,这个过程需要使用函数poly


6-4:由根创建多项式。

在命令行窗口中输入:

r = [4.0283 + 2.8554i;4.0283 - 2.8554i;-2.3616 + 2.8452i;-2.3616 - 2.8452i];

p = poly(r)

输出结果:

p =


    1.0000   -3.3334   -0.0001    5.0016  333.3381


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


6.1.3  多项式的四则运算


1.多项式的加法


对于多项式的加法,MATLAB并未提供一个特别的函数。如果两个多项式向量大小相同,那么多项式相加时就与标准的数组加法相同。


6-5:多项式加法运算示例一。

在命令行窗口中输入:

a = [1 3 5 7 9];

b = [1 2 4 6 8];

c = a + b

输出结果:

c =


     2     5     9    13    17

结果是c(x)=2x4+5x3+9x2+13x+17


注意:当两个多项式阶次不同时,低阶的多项式用首零填补,使其与高阶多项式有同样的阶次。要求首零而不是尾零,是因为相关的系数像x幂次一样,必须整齐。


6-6:多项式加法运算示例二。

在命令行窗口中输入:

a = [1 3 5 7 9];

b = [0 2 4 6 8];

c = a + b

输出结果:

c =


     1     5     9    13    17

结果是c(x)=x4+5x3+9x2+13x+17


有的时候,两个相加的多项式的项数并不明确,这时可用一个文件编辑器创建一个通用的多项式相加函数M文件来执行一般的多项式加法。


6-7:通用的多项式加法函数示例。

创建M文件并命名为ex6_07.m,利用M文件编辑器在M文件中输入:

function p = ppadd(a, b)

if nargin < 2

    error('Not enough input arguments')     % 确认输入变量

end

a = a(:).';             % 将输入转化为行向量

b = b(:).';

na = length(a);         % 求相加的两个多项式的项数

nb = length(b);

% 当相加的两个多项式项数不等时,高次补零

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

现在,为了试验函数ppadd,在命令行窗口中输入:

a = [1 3 5 7 9];

b = [0 2 4 6 8];

c = ppadd(a, b)

输出结果:

c =


     1     5     9    13    17

结果是c(x)= x4+5x3+9x2+13x+17


2.多项式的乘法


MATLAB中,函数conv支持多项式乘法(运算法则为执行两个数组的卷积)。


6-8:多项式乘法运算示例。

在命令行窗口中输入:

a = [1 3 5 7 9];

b = [1 2 4 6 8];

c = conv(a, b)

输出结果:

c =


     1     5    15    35    69   100   118   110    72

结果是c(x)=x8+5x7+15x6+35x5+69x4+100x3+118x2+110x+72


3.多项式的除法


在一些特殊情况下,一个多项式需要除以另一个多项式。在MATLAB中,这是由函数deconv完成的。


6-9:多项式除法运算示例。

在命令行窗口中输入:

c = [1 5 15 35 69 100 118 110 72];

b = [1 2 4 6 8];

[a, r] = deconv(c, b)

输出结果:

a =


     1     3     5     7     9



r =


     0     0     0     0     0     0     0     0     0


a是多项式c除以多项式b的商,余式为r。本例中r为零多项式,因为多项式b和多项式a的乘积恰好是c


6.1.4  多项式的导数、积分与估值


1.多项式的导数


MATLAB为多项式求导提供了函数polyder


6-10:多项式求导运算示例。

在命令行窗口中输入:

d = [1 5 15 35 69 100 118 110 72];

e = polyder(d)

输出结果:

e =


     8    35    90   175   276   300   236   110


2.多项式的积分


MATLAB为多项式的积分提供了函数polyint,其具体的调用格式如下。

● polyint(P,k):返回多项式P的积分,积分常数项为k

● polyint(P):返回多项式P的积分,积分常数项默认值为0


6-11:多项式积分运算示例。

在命令行窗口中输入:

d = [1 5 15 35 69 100 118 110 72];

f = polyint(d)

输出结果:

f =


  1 8


    0.1111    0.6250    2.1429    5.8333   13.8000   25.0000   39.3333   55.0000


  9 10


   72.0000         0


3.多项式的估值


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


6-12:多项式的估值运算示例。

在命令行窗口中输入:

x = -1 : 0.01 : 1;      % 生成自变量

g = [1 3 5 7 9];        % 函数对应的多项式

h = polyval(g, x);      % 进行估值运算

% 将估值运算结果对自变量作图

plot(x, h);

xlabel('x');

title('x^4 + 3x^3 + 5x^2 + 7x + 9');

输出结果如图6-1所示。

6-1  多项式估值运行结果


6.1.5  多项式运算函数及操作指令


多项式的运算函数及常用的操作指令如表6-1和表6-2所示。

6-1  多项式运算函数

6-2 多项式操作指令


6.1.6  有理多项式


在许多应用中,例如在傅里叶(Fourier)、拉普拉斯(Laplace)和Z变换中,出现了两个多项式之比。在MATLAB中,有理多项式由它们的分子多项式和分母多项式表示。对有理多项式进行运算的两个函数是residuepolyder。函数residue执行部分分式展开的运算。


6-13:有理多项式的展开。

在命令行窗口中输入:

num = [5 3 -2 7];       % 分子多项式

den = [-4 0 8 3];       % 分母多项式

[r, p, k] = residue(num, den)

输出结果:

r =


   -1.4167

   -0.6653

    1.3320



p =


    1.5737

   -1.1644

   -0.4093



k =


   -1.2500

本例结果可表示成:

residue函数也可执行逆运算。


6-14:有理多项式展开的逆运算。

在命令行窗口中输入:

num = [5 3 -2 7];       % 分子多项式

den = [-4 0 8 3];       % 分母多项式

[r, p, k] = residue(num, den);

[n, d] = residue(r, p, k)

输出结果:

n =


   -1.2500   -0.7500    0.5000   -1.7500



d =


    1.0000   -0.0000   -2.0000   -0.7500

本例结果可表示成:


函数polyder可用来对多项式求导。除此之外,如果输入两个多项式,则polyder函数对两个多项式构成的有理多项式求导。


6-15:有理多项式的求导。

在命令行窗口中输入:

num = [5 3 -2 7];       % 分子多项式

den = [-4 0 8 3];       % 分母多项式

[b, a] = polyder(num, den)

输出结果:

b =


    12    64   153    18   -62



a =


    16     0   -64   -24    64    48     9


如果大家需要这个文档,可以在我的公众号(软件开发架构)中回复20230520,免费获取。


文章转载自软件开发架构,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论