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

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

第6章  数据分析


知识要点


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


学习要求

58261dfaa2812adb80d643403add0bf4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


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

在图形界面上输出结果:

c21ebd137c113d3495fdc2afc3d74917_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


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:多项式除法运算示例。

在命令行窗口中输入:


         

输出结果:

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所示。

e67b68d1b3989ae774ec574b56589658_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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


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


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

6-1  多项式运算函数

053f6eef83ea4717dcc2255d774180eb_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

6-2 多项式操作指令

101e73d77610134957facd5fbab5c1ed_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


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

本例结果可表示成:

c5f08202c695e9082a98cd67245043f5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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

本例结果可表示成:

f90cdd2a0482ea6eb262e7d64442f09f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


函数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

相关文章
|
数据挖掘
第6章 数据分析——6.3 函数的极限
第6章 数据分析——6.3 函数的极限
第6章 数据分析——6.3 函数的极限
|
数据挖掘 Serverless
第6章 数据分析——6.4 函数数值积分
第6章 数据分析——6.4 函数数值积分
|
算法 数据挖掘
业务数据分析-Excel公式与函数(三)
业务数据分析-Excel公式与函数(三)
182 0
业务数据分析-Excel公式与函数(三)
|
机器学习/深度学习 SQL 数据采集
Python数据分析 | Pandas核心操作函数大全
本篇为pandas系列的导语,对『Pandas核心操作函数』进行介绍,讲解Pandas进行数据操作和处理的核心数据结构:Series、DataFrame和Index。
569 0
Python数据分析 | Pandas核心操作函数大全
|
数据挖掘 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—通用函数(1)(九)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
222 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—通用函数(1)(九)
|
数据挖掘 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—通用函数(2)(十)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
222 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—通用函数(2)(十)
|
数据挖掘 Python
Python数据分析与展示:pandas库统计分析函数-13
Python数据分析与展示:pandas库统计分析函数-13
176 0
Python数据分析与展示:pandas库统计分析函数-13
|
SQL 数据可视化 数据挖掘
数据分析必备的43个 Excel 函数!
Excel是我们工作中经常使用的一种工具,对于数据分析来说,这也是处理数据最基础的工具。很多传统行业的数据分析师甚至只要掌握Excel和SQL即可。
819 0
数据分析必备的43个 Excel 函数!
|
数据挖掘 Python
Python数据分析与展示:numpy统计函数与梯度函数-4
Python数据分析与展示:numpy统计函数与梯度函数-4
223 0
|
机器学习/深度学习 数据采集 人工智能
Python数据分析 | Pandas数据变换高级函数
本篇为『图解Pandas数据变换高级函数』,讲解3个函数是map、apply和applymap,更高效地完成数据处理过程中对DataFrame进行逐行、逐列和逐元素的操作。
300 0
Python数据分析 | Pandas数据变换高级函数