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:>> 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];
>> 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。在命令窗口中输入:>> C1=A==B %A、B矩阵对应元素相等的返回1,否则返回0
②判断矩阵A的元素是否大于等于矩阵B对应的元素,并将结果返回给矩阵C2。在命令窗口中输入:>> C2=A>=B %A、B矩阵对应元素A大于等于B的返回1,否则返回0
③判断矩阵A、B对应的元素是否不相同,并将结果返回给矩阵C3。在命令窗口中输入:>> 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:>> 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];
>> 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。在命令窗口中输入:>> C1=A&B %计算A和B之间逻辑与的值
②若计算A和B之间逻辑或的值,并将结果返回给矩阵C2。在命令窗口中输入:>> C2=A|B %计算A和B之间逻辑或的值
③若计算A的逻辑非,并将结果返回给矩阵C3。在命令窗口中输入:>> C3=~A %计算A的逻辑非
④若计算A和B之间逻辑异或,并将结果返回给矩阵C4。在命令窗口中输入:>> C4=xor(A,B) %计算A和B之间逻辑异或
【例3.22】先决逻辑运算
在命令窗口中输入以下变量a、b和c:>> a=0;
>> b=5;
>> c=10;
①进行先决与操作,在命令窗口中输入以下内容:>> (a~=0)&&(b<c)
运算结果如下:ans =<br/>0
②进行先决与操作,在命令窗口中输入以下内容:>> (a~=0)||(b<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)的主要内容,如果未能解决你的问题,请参考以下文章