MATLAB编程与应用系列-第5章 多项式与数据分析(1)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB编程与应用系列-第5章 多项式与数据分析(1)相关的知识,希望对你有一定的参考价值。

参考技术A 本章将介绍如何使用MATLAB来解决一些基本的数学运算问题,主要包括多项式的相关计算,数据插值,曲线拟合以及数据统计处理等相关的内容。本章的主要内容如下:

在MATLAB中,多项式是以行向量的形式存放的,并且约定多项式以降幂的形式出现,如果多项式中缺少某幂次项,则该幂次项的系数为0。例如,多项式 可以表示为:p1=[1 21 20 0],其中常数项为0。

本节将全面介绍与多项式有关的各种计算,包括多项式的四则运算、导函数运算、求值、求根以及分部展开。

多项式的加减运算并无特别,可以使用向量的加减运算实现。多项式的乘除运算比较复杂,为此MATLAB提供了专门的运算函数 conv 和 deconv 。
函数 conv 用于求多项式P1和P2的乘积,它的调用格式如下:

其中,P1、P2是两个多项式系数向量。
函数 deconv 用于对多项式P1和P2作除法运算,它的调用格式如下:

其中,Q返回多项式P1除以P2的商式,r返回P1除以P2的余式。返回的Q和r仍是多项式系数向量。

可以将除法运算deconv看作是乘法运算conv的逆运算,即有P1=conv(P2,Q)+r。

下面通过示例介绍多项式的表示和多项式的四则运算。

MATLAB提供了polyder函数,用于求多项式的导函数。该函数的格式如下:

其中,参数P和Q是多项式的系数向量,返回结果p和q也是多项式的系数向量。

MATLAB提供了两种求多项式值的函数:polyval与polyvalm,它们的输入参数均为多项式系数向量P和自变量x,但是两者是有很大区别的,前者是按数组运算规则对多项式求值,而后者是按矩阵运算规则对多项式求值。具体的调用格式如下所示。

n次多项式具有n个根,这些根可能是实根,也可能含有若干对共轭复根。MATLAB提供了roots函数用于求多项式的全部根,该函数的调用格式为:

其中,P为多项式的系数向量,返回向量x为多项式的根,即x(1),x(2),…,x(n)分别代表多项式的n个根。

另外,如果已知多项式的全部根,MATLAB还提供了函数poly用来建立该多项式,该函数的调用格式为:

其中,x为多项式的根,返回向量P为多项式的系数向量。

对于一个方阵s,可以用函数poly来计算矩阵的特征多项式的系数。特征多项式的根即为特征值,可以用roots函数来计算。

MATLAB提供函数 residue 可以实现将分式表达式进行多项式的部分分式展开。
对于 ,函数的调用格式如下:

其中,b和a分别是分子和分母多项式系数行向量;返回值r是[r1 r2 …rn]留数行向量,p为[p1 p2 …pn]极点行向量,k为直项行向量。下面通过示例来讲述该函数的使用。

多项式的微分MATLAB提供了函数 polyder 来实现,前面介绍多项式的导函数时已经介绍了该函数的具体使用。但是对于多项式的积分运算MATLAB没有提供专门的函数,但可以用 [p./length(p):-1:1,k] 的方法来完成积分,其中k为常数。下面通过示例讲解如何进行多项式的积分运算。

MATLAB编程与应用系列-第3章 矩阵运算

本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:[email protected]。 出版社:人民邮电出版社, 页数:525。

本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected]

###3.1.8 矩阵和数组运算比较
在进行矩阵和数组运算的时候,要认识到矩阵和数组类似运算的区别,两种运算指令形式和实质内涵的异同见表3.3。其中S为标量,A、B为矩阵。
表3.3 矩阵和数组运算对比表
数组运算 矩阵运算
命令 含义 命令 含义
A+B 对应元素相加 A+B 与数组运算相同
A-B 对应元素相减 A-B 与数组运算相同
S.*B 标量S分别与B元素的积 S*B 与数组运算相同
A.*B 数组对应元素相乘 A*B 内维相同矩阵的乘积
S./B S分别被B的元素左除 SB B矩阵分别左除S
A./B A的元素被B的对应元素除 A/B 矩阵A右除B即A的逆阵与B相乘
B.A 结果一定与上行相同 BA A左除B(一般与上行不同)
A.^S A的每个元素自乘S次 A^S A矩阵为方阵时,自乘S次
A.^S S为小数时,对A各元素分别求非整数幂,得出矩阵 A^S S为小数时,方阵A的非整数乘方
S.^B 分别以B的元素为指数求幂值 S^B B为方阵时,标量S的矩阵乘方
A.’ 非共轭转置,相当于conj(A’) A’ 共轭转置
exp(A) 以自然数e为底,分别以A的元素为指数求幂 expm(A) A的矩阵指数函数
log(A) 对A的各元素求对数 logm(A) A的矩阵对数函数
sqrt(A) 对A的各元素求平方根 sqrtm(A) A的矩阵平方根函数
f(A) 求A各个元素的函数值 funm(A,’FUN’) 矩阵的函数运算

注意:(1)funm(A,’FUN’)要求A必须是方阵,“FUN”为矩阵运算的函数名。
(2)在执行数组与数组之间的运算的时候,参与运算的数组必须同维,运算所得的结果数组也总与原数组同维。

###3.1.9 关系操作和逻辑操作
在使用MATLAB语言进行程序设计时,经常会涉及到程序流程的控制,此时需要对一些问题作出一些判断,为此MATLAB提供了关系操作、逻辑计算以及一些相关的运算函数。

(1)关系运算
关系操作符有:<(小于关系)、<=(小于或等于关系)、>(大于关系)、>=(大于或等于关系)、= =(等于关系)、~=(不等于关系)。

关系运算规则为:

  • 若两个变量都是标量,则结果为真(1)或假(0);
  • 若两个变量都是数组,则必须大小相同,结果也是同样大小的数组,数组的元素为0或1;
  • 若一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相同的数组,数组的元素为0或1。
  • 其中<、<=和>、>=,仅对参加比较变量的实部进行比较,而= =和~=,则同时对实部和虚部进行比较。

【例3.20】关系运算
在命令窗口中输入以下内容,生成矩阵A和矩阵B:
&gt;&gt; A=[1 2 3 4 5;5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9];
&gt;&gt; B=[5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9;4 5 6 7 8];
①判断矩阵A、B对应的元素是否相同,并将结果返回给矩阵C1。在命令窗口中输入:
&gt;&gt; C1=A==B %A、B矩阵对应元素相等的返回1,否则返回0
②判断矩阵A的元素是否大于等于矩阵B对应的元素,并将结果返回给矩阵C2。在命令窗口中输入:
&gt;&gt; C2=A&gt;=B %A、B矩阵对应元素A大于等于B的返回1,否则返回0
③判断矩阵A、B对应的元素是否不相同,并将结果返回给矩阵C3。在命令窗口中输入:
&gt;&gt; C3=A~=B %A、B矩阵对应元素相等的返回0,否则返回1

(2) 逻辑运算
逻辑操作符有:&(与)、|(或)、~(非)和xor(异或)。在逻辑运算中,非0元素表示真(1),0元素表示假(0),逻辑运算的结果为0或1,逻辑运算法则具体见表3.5所示。

表3.5 逻辑运算

a b a&b a or b ~a xor(a,b)
0 0 0 0 1 0
0 1 0 1 1 1
1 0 0 1 0 1
1 1 1 1 0 0

逻辑操作的需要满足以下运算规则:

  • 若两个变量都是标量,则结果为0、1的标量;
  • 若两个变量都是数组,则必须大小相同,结果也是同样大小的数组;
  • 若是一个数组和一个标量进行逻辑运算,则把数组的每个元素分别与标量比较,结果为与数组大小相同的数组。

除了上面的逻辑操作符外,MATLAB还提供了&&(先决与)逻辑运算符和||(先决或)逻辑运算符。

&&(先决与)逻辑运算符是当该运算符的左边为1(真)时,继续执行该运算符右边的运算,并执行与逻辑运算;否则,不再执行该运算符右边的运算,并立即给出运算的结果为0(假)。

||(先决或)逻辑运算符是当该运算符的左边为1(真)时,就不需要继续执行该符号右边的运算,并立即得出该逻辑运算结果为1(真);否则,就要继续执行该符号右边的运算,并执行或逻辑运算。

【例3.21】逻辑运算
在命令窗口中输入以下内容,生成矩阵A和矩阵B:
&gt;&gt; A=[1 2 3 4 5;5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9];
&gt;&gt; B=[5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9;4 5 6 7 8];
①若计算A和B之间逻辑与的值,并将结果返回给矩阵C1。在命令窗口中输入:
&gt;&gt; C1=A&B %计算A和B之间逻辑与的值
②若计算A和B之间逻辑或的值,并将结果返回给矩阵C2。在命令窗口中输入:
&gt;&gt; C2=A|B %计算A和B之间逻辑或的值
③若计算A的逻辑非,并将结果返回给矩阵C3。在命令窗口中输入:
&gt;&gt; C3=~A %计算A的逻辑非
④若计算A和B之间逻辑异或,并将结果返回给矩阵C4。在命令窗口中输入:
&gt;&gt; C4=xor(A,B) %计算A和B之间逻辑异或

【例3.22】先决逻辑运算
在命令窗口中输入以下变量a、b和c:
&gt;&gt; a=0;
&gt;&gt; b=5;
&gt;&gt; c=10;
①进行先决与操作,在命令窗口中输入以下内容:
&gt;&gt; (a~=0)&&(b&lt;c)
运算结果如下:
ans =<br/>0
②进行先决与操作,在命令窗口中输入以下内容:
&gt;&gt; (a~=0)||(b&lt;c)
运算结果如下:
ans =<br/>1

(3)逻辑函数运算

MATLAB中提供的一些函数返回的结果为真(1)和假(0),这样的函数包括关系逻辑函数、工作状态判断函数、特殊数据判断函数和数据类型函数。表3.6所示为关系逻辑函数以及对应的功能描述。

表3.6 关系逻辑函数

函数名 功能 函数名 功能
all(A) 判断A的列向量元素是否全非0,全非0则为1 isnan(A) 判断A的各元素值是否为NAN,是则为1
any(A) 判断A的列向量元素中是否有非0元素,有则为1 isnumeric(A) 判断数组A的元素是否全为数值型数组
isequal(A,B) 判断A、B对应元素是否全相等,相等为1 isreal(A) 判断数组A的元素是否全为实数,是则为1
isempty(A) 判断A是否为空矩阵,为空则为1,否则为0 isprime(A) 判断A的各元素值是否为质数,是则为1
isfinite(A) 判断A的各元素值是否有限,是则为1 isspace(A) 判断A的各元素值是否为空格,是则为1
isinf(A) 判断A的各元素值是否无穷大,是则为1 find(A) 寻找A数组非0元素的下标和值

(4)运算符优先级

MATLAB提供了多种运算符号,各种运算符执行的先后顺序是根据其所具有的优先级来决定的。下面列出了各种运算符的优先级顺序,由上至下优先级递减,每行的优先级相同:

a) 括号()
b) ‘(矩阵转置)、^ (矩阵幂)和.‘(数组转置)、.^(数组幂)
c) ~(逻辑非)、代数正+、代数负-
d) (乘)、/(左除)、(右除)和.(点乘)、./(点左除)、.(点右除)
e) +、-(加减)
f) 冒号:
g) <、<=、>、>=、~=
h) &(逻辑与)
i) |(逻辑或)
j) &&(先决与)
k) ||(先决或)

作者:德特数据
联系方式:[email protected]

以上是关于MATLAB编程与应用系列-第5章 多项式与数据分析(1)的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB编程与应用系列-第3章 矩阵运算

MATLAB编程与应用系列-第3章 矩阵运算

MATLAB编程与应用系列-第1章 MATLAB概述

MATLAB编程与应用系列-第3章 矩阵运算

MATLAB编程与应用系列-第3章 矩阵运算

MATLAB编程与应用系列-第2章 数组及矩阵的创建及操作