前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1.基础知识(5) --Matlab中特殊符号使用总结

1.基础知识(5) --Matlab中特殊符号使用总结

作者头像
用户9925864
发布2022-07-27 08:09:45
1.3K0
发布2022-07-27 08:09:45
举报
文章被收录于专栏:算法工程师的学习日志

前言:上篇文章分享了Matlab经常会遇到(),[],与{}三种符号,下面接着捋一捋其他的特殊符号使用方法,主要有

冒号

'

分号

& &&

| ||

~

.


1、:冒号

冒号的主要用途是用来表示数据从开始位置取到/生成到截止位置,例如:

代码语言:javascript
复制
>> x = 1:4  % 生成1到4的数据
x =
     1     2     3     4
>> x(2:3)  % 提取x中2到3位置的数据
ans =
     2     3

x(i,j,k)的含义是第k层矩阵的第i行第j列元素,x(:,:,1)则表示第1层矩阵,比如:创建多维数组

代码语言:javascript
复制
A = [1 2 3; 4 5 6; 7 8 9]
A(:,:,2) = [10 11 12;13 14 15;16 17 18]
A(:,:,1) =
     1     2     3
     4     5     6
     7     8     9
A(:,:,2) =
    10    11    12
    13    14    15
    16    17    18
A(:,1,1)
ans =
     1
     4
     7

y=x(1,:),把x这个矩阵的第一行所有列赋给y。

注:冒号相当于所有。

在matlab中,a(:, 1:3)=[]表示将数组a的第1到第3列删除。

第一个冒号( : )表示取数组a的所有行;1:3表示取数组a的第1到第3列。


2:'分号

分号一般用于矩阵转置,其中A.'是一般转置,A'是共轭转置,顾名思义是对矩阵先做共轭运算(不懂共轭的自行百度),再进行转置,在A是实数矩阵时,两者没有区别,但是当A是复矩阵时,就有区别,示例如下:

代码语言:javascript
复制
A=[1 2 3;4 5 6]
A =
1 2 3
4 5 6
>>A.'
ans =
1 4
2 5
3 6
>> A'
ans =
1 4
2 5
3 6
>> a=[1+i 2+2i 3+3i;4+4i 5+5i 6+6i]
a =
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i
4.0000 + 4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000i
>> a.'
ans =
1.0000 + 1.0000i 4.0000 + 4.0000i
2.0000 + 2.0000i 5.0000 + 5.0000i
3.0000 + 3.0000i 6.0000 + 6.0000i
>> a'
ans =
1.0000 - 1.0000i 4.0000 - 4.0000i
2.0000 - 2.0000i 5.0000 - 5.0000i
3.0000 - 3.0000i 6.0000 - 6.0000i

另外补充一个conj(a)是求a的共轭矩阵,示例如下:

代码语言:javascript
复制
conj(a)
ans =
1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i
4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i

也就是说

代码语言:javascript
复制
a.' = conj(a)'

启发思考

问:matlab中a(: ).'是什么意思?

答:a(:)作用是把矩阵a转换为列向量,就是一列,a(: ).'是把矩阵a转换为一个行向量,就是一行。

代码语言:javascript
复制
a(: ).'
ans =
  列 1 至 4
   1.0000 + 1.0000i   4.0000 + 4.0000i   2.0000 + 2.0000i   5.0000 + 5.0000i
  列 5 至 6
   3.0000 + 3.0000i   6.0000 + 6.0000i

3、逻辑运算

3.1、"&&"与"&"

A&B

(1)首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算。

(2)A和B可以为矩阵(e.g. A=[1 0],B=[0 0])。

A&&B

(1)首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。

(2)A和B不能是矩阵,只能是标量。

代码语言:javascript
复制
>> a = [1 0]
a =
     1     0
>> b = [2 3]
b =
     2     3
>> a & b
ans =
  1×2 logical 数组
   1   0
>> a && b
报错提示:|| 和 && 运算符的操作数必须能够转换为逻辑标量值。
>> c1 = 0
c1 =
     0
>> c2 = 1
c2 =
     1
>> c1 & c2
ans =
  logical
   0
>> c2 = 3
c2 =
     3
>> c1 = 3
c1 =
     3
>> c1 & c2
ans =
  logical
   1

A&&B 首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。这种用法非常有用,如果A是一个计算量较小的函数,B是一个计算量较大的函数,那么首先判断A对减少计算量是有好处的。另外这也可以防止类似被0除的错误:

flag=denum~=0 && num/denum>10

if flag

%Do Something

end if

上面的表达式就可以防止denum等于0的情况。当然,如果你希望在判断的时候,对A和B表达式都进行计算,就应该使用标准的&或者|。Matlab中的if和while语句中的逻辑与和逻辑或都是默认使用short-circuit形式。

if flag=denum~=0 && num/denum>10

%Do Something

end if

if flag=denum~=0 & num/denum>10

%Do Something

end if

3.2、"||"与"|"

"||"与"|"的使用同"&&"与"&"

3.3、~

非(或逻辑非)是一元操作符,即~A:当A是非零时结果为“0”;当A为“0”时,结果为“1”.因此下列两种表示:

p | (~p) 结果为1

p & (~p) 结果为0

代码语言:javascript
复制
>> p = 1
p =
     1
>> ~p
ans =
  logical
   0
>> p = 2
p =
     2
>> ~p
ans =
  logical
   0
>> p = 0
p =
     0
>> ~p
ans =
  logical
   1

额外小tips:

any和all函数在连接操作时很有用,设x是0-1向量,如果x中任意有一元素非零时,any(x)返回“1”,否则返回“0”;all(x)函数当x的所有元素非零时,返回“1”,否则也返回“0”.这些函数在if语句中经常被用到.如:

代码语言:javascript
复制
if all(A<7)
     do something
end

这种方式经常用来判断数组的数据是否满足特定要求。


4、.点

.点在matlab中主要用于矩阵元素计算,例如:乘是代表两个矩阵相乘,只要符合矩阵相乘的规则即可,而点乘对应的是矩阵中元素的相乘,在最新的Matlab上,不要求两个矩阵的维度一定要相同,老点的版本可能会报错,提示矩阵维度不相同。

代码语言:javascript
复制
A = [1 2 3;4 5 6;7 8 9]
B=[1;2;3]
C=A*B
C =
    14
    32
    50

老版本:

C=A.*B

错误使用 .*

矩阵维度必须一致

新版本:

代码语言:javascript
复制
C=A.*B
C =
     1     2     3
     8    10    12
    21    24    27
代码语言:javascript
复制
A=[1 2 3;4 5 6;7 8 9];

B=[1 1 1;2 2 2;3 3 3];
C=A.*B
C =
     1     2     3
     8    10    12
    21    24    27

也就是说新版本的A.*B在矩阵非同维度的情况下,Matlab会自动补齐维度

上文链接:1.基础知识(4) --Matlab中(),[],与{}的区别

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档