1、算术运算
(1)基本算术运算
i、基本算术运算符:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)。
MATLAB的算术运算是在矩阵意义下进行的。
单个数据的运算只是矩阵运算的一种特例。
ii、加减运算
若两个矩阵同型,则运算时两矩阵对应元素相加减。
若两矩阵不同型,则MATLAB将给出错误信息。
一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算。
iii、乘法运算
矩阵A和B进行乘法运算,要求A的列数与B的行数相等,此时则称A和B矩阵是可乘的,或称A和B矩阵维数和大小相容。
如果不相容,则将报出错误信息,提示不可乘。
>> a = [1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> b = [1,2;3,4;5,6]
b =
1 2
3 4
5 6
>> a*b
ans =
22 28
49 64
iv、除法运算
在MATLAB中,有两种矩阵除法运算:右除/和左除\。 // A/B称为A右除以B B\A称为左除以B
如果A矩阵是非奇异方阵,则B/A等效于B*inv(A),A\B等效于inv(A)*B。
其中inv()函数功能为求矩阵的逆矩阵。且矩阵必须为方阵,不然会报错。
>> a=[1,2;3,4]
a =
1 2
3 4
>> inv(a)
ans =
-2.0000 1.0000
1.5000 -0.5000
>> a*inv(a)
ans =
1.0000 0
0.0000 1.0000
对于矩阵来说,右除和左除表示两种不同的除数矩阵和被除数矩阵关系。
>> a=[1,2;3,4]
a =
1 2
3 4
>> b=[5,6;7,8]
b =
5 6
7 8
>> a/b
ans =
3.0000 -2.0000
2.0000 -1.0000
>> a\b
ans =
-3 -4
4 5
对于含有标量的运算,两种除法的结果相同。将一下实例中的一个标量改为矩阵也符合。
>> 4/3 //4右除以3
ans =
1.3333
>> 3\4 //4左除以3
ans =
1.3333
v、乘方运算
一个矩阵的乘方运算可以表示成A^X,要求A为方阵,X为标量。
(2)点运算
点运算符:.*(点乘)、./(点右除)、.\(点左除)、.^(点乘方)。
两矩阵要求同型,进行点运算指对应元素进行相关运算
>> a=[1,2;3,4]
a =
1 2
3 4
>> b=a
b =
1 2
3 4
>> a.*b
ans =
1 4
9 16
仍然用以上矩阵,此时可说明点右除和点左除结果相同。
>> a./b
ans =
1 1
1 1
>> b./a
ans =
1 1
1 1
以下是一个容易出错的问题:当x=0.1、0.4、0.7、1的时候,分别求y=sin xcos x的值。
>> x=0.1:0.3:1; //初始值为0.1,终值为1,步长为0.3的行向量
>> y=sin(x).*cos(x) //sin x和cos x都为行向量,此时要用点乘,不然会因为不相容而报错。
y =
0.0993 0.3587 0.4927 0.4546
2、关系运算
(1)关系运算符:<、<=、>、>=、==、~=(不等于)。
i、当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0.
>> 3>4
ans =
logical
0
>> x=5; //赋值
>> x==5 //比较运算
ans =
logical
1
ii、当参与比较的量是两个同型的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个比较,最终关系运算的结果是
一个与原矩阵同型的矩阵,它的元素由0或1组成。
iii、当参与比较的一个是标量,一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,最终关系运算的结果
是一个与原矩阵同型的矩阵,它的元素由0或1组成。
例:建立三阶方阵A,判断A的元素是否为偶数。
>> A=[24,35,13;22,63,23;39,47,80]
A =
24 35 13
22 63 23
39 47 80
>> P=rem(A,2)==0 //rem()函数功能为求余数,此处矩阵各项对2取余,并逐个与标量0比较
P =
3×3 logical 数组
1 0 0
1 0 0
0 0 1
3、逻辑运算
(1)逻辑运算符:&(与)、|(或)、~(非)
i、设参与逻辑运算的是两个标量a和b,那么运算规则为:
a&b:a、b全为非零值时,运算结果为1,否则为0.
a|b:a、b中只要有一个为非零时,结果为1.
~a:当a为零时,结果为1;当a非零时,结果为0.
>> ~(9==1)
ans =
logical
1
(2)优先级:
在算术运算、关系运算和逻辑运算中,算术运算的优先级最高,逻辑运算符优先级最低,在逻辑运算中,单目运算比双目运算的优先级高。
(3)含矩阵运算:
i、当参与逻辑运算的是两个同型的矩阵时,对两矩阵相同位置的元素按标量关系运算规则逐个进行运算,最终逻辑运算的结果是
一个与原矩阵同型的矩阵,它的元素由0或1组成。
ii、当参与逻辑运算的一个是标量,一个是矩阵时,则把标量与矩阵的每一个元素按标量逻辑运算规则逐个比较,最终逻辑运算的
结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
4、实例:水仙花数是指各位数字的立方之和等于该数本身的三位正整数。求全部水仙花数。
m=100:999; //所有三位数组成的行向量
m1=rem(m,10); //每个三位数对10取余得到个位数字组成的行向量
m2=rem(fix(m/10),10); //fix()直接舍去小数部分,再对10进行取余,得到十位数字组成的行向量
m3=fix(m/100); //直接舍去三位数除以100之后的数的小数部分得到百位数字组成的行向量
k=find(m==m1.*m1.*m1+m2.*m2.*m2+m3.*m3.*m3) //此处要用点乘,不然会因为不相容而报错
k =
54 271 272 308 //find()函数得到使得逻辑运算表达式结果为真的行向量m中元素的序号s=m(k)
s =
153 370 371 407 //索引得到所有满足条件的三位数