本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:156204968@qq.com。 出版社:人民邮电出版社, 页数:525。
本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:156204968@qq.com
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的元素左除 | S\B |
B矩阵分别左除S |
A./B |
A的元素被B的对应元素除 | A/B |
矩阵A右除B即A的逆阵与B相乘 |
B.\A |
结果一定与上行相同 | B\A |
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 = 0
②进行先决与操作,在命令窗口中输入以下内容:
>> (a~=0)||(b<c)
运算结果如下:
ans = 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) ||(先决或)
作者:德特数据
联系方式:156204968@qq.com
网友评论