1 MATLAB基本运算
算术运算,关系运算,逻辑运算
MATLAB的运算都是针对矩阵而言的,既有矩阵意义下的运算,也有针对矩阵元素的运算。
1.1算数运算
1.基本算数运算
- 基本算术运算符:+(加)、-(减)、*(乘)、/(右除)、(左除)、^(乘方)。
-
注意:
- MATLAB的除法运算分为右除和左除。
- MATLAB的算术运算是在矩阵意义下进行的。
- 单个数据的算术运算只是矩阵运算的一种特例。
(1)加减运算
- 若两矩阵同型(
同为mxn的矩阵
),则运算时两矩阵的相应元素相加减。 - 若两矩阵不同型,则MATLAB将给出错误信息(两个矩阵维数不匹配)。
- 一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算。
(2)乘法运算
- 矩阵A和B进行乘法运算(列乘行),要求A的列数与B的行数相等,此时则称A、B矩阵是可乘的,或称A和B两矩阵维数和大小相容。
- 如果两者的维数或大小不相容,则将给出错误信息,提示用户两个矩阵是不可乘的。
(3)除法运算
- 在MATLAB中,有两种矩阵除法运算:右除/和左除\。
- 如果A矩阵是非奇异方阵 1,则B/A等效于B*inv(A)(A的逆),A\B等效于inv(A)*B。
- 对于矩阵来说,右除和左除表示两种不同的除数矩阵和被除数矩阵的关系。
(4)乘方运算
一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。
(5)点运算
- 点运算符:.*、./、.\和.^。
- 两矩阵进行点运算是指它们的对应元素进行相关运算(行乘行),要求两矩阵同型。
1.2关系运算
关系运算符通常用来表示条件
- 关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。
- 当两个比较量是标量时,直接比较两数的大小。(若关系成立,关系表达式结果为1,否则为0)。
- 当参与比较的量是两个同型的矩阵时,对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
- 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
1.3逻辑运算
逻辑运算符:&(与)、|(或)和~(非)。
设参与逻辑运算的是两个标量a和b,那么运算规则为:
-
a&b
- a、b全为非零时,运算结果为1,否则为0。 a|b
- a、b中只要有一个为非零时,运算结果为1 。 ~a
- 当a为零时,运算结果为1;当a为非零时,运算结果为0。
1.4总结
在算术运算、关系运算和逻辑运算中:
- 算术运算的优先级最高,逻辑运算优先级最低。
- 但逻辑非运算是单目运算,也就是只需要一个操作数,它的优先级比双目运算要高。
~(9 == 1)
&先做9==1,结果是0,对它做逻辑非运算,结果为1。
~9==1
&先做非9运算,结果是0,0 ==1这个表达式的结果为0。
- 若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。
- 若参与逻辑运算的一个是标量,一个是矩阵,那么将在标量与矩阵中的每个元素之间按标量规则逐个进行运算,最终运算结果是一个与矩阵同型的矩阵,其元素由1或0组成。
例:
水仙花数是指各位数字的立方之和等于该数本身的三位正整数。
求全部水仙花数。
>> m=100:999;%生成m向量
>> m1=rem(m,10);
>> m2=rem(fix(m/10),10);
>> m3=fix(m/100);
>>k=find(m==m1.*m1.*m1+m2.*m2.*m2+m3.*m3.*m3)%在向量m中找到水仙花位数赋给变量k(点乘:对应元素运算)
k =
54 271 272 308
%水仙花数的序号
>> s=m(k)
s =
153 370 371 407
%输出水仙花数
2字符串处理
2.1字符串表示
- 在MATLAB中,字符串是用单引号 ’ ’ 括起来的字符序列。
>>xm='a beautiful girl'
xm=
'a beautiful girl'
>>xm(1:3) % 一个字符串为一个行向量,每个元素对应一个字符
ans =
'a b'
- 若字符串中的字符含有单引号,则该单引号字符要用==两个单引号==来表示。
- 建立多行字符串,形成字符串矩阵。
>>ch=['abcdef';'123456']
ch=
'abcdef'
'123456'
%有两行字符串,形成了一个两行的矩阵。(要求各行字符数相等即列数相同)
当各行字符数不相等时,用空格调节各行长度,使它们的列数彼此相同。
>>ch(2,3)
ans =
3
例:
建立一个字符串向量,然后对该向量做如下处理:
① 取第1~5个字符组成的子字符串。
② 将字符串倒过来重新排列。
③ 将字符串中的小写字母变成相应的大写字母,其余字符不变。
④ 统计字符串中小写字母的个数。
>>ch='ABc123d4e56Fg9';
>>subch=ch(1:5) %取第1~5个字符组成的子字符串
subch =
'ABc12'
>>revch=ch(end:-1:1) %从最后一个字符串到第一个字符串
revch =
'9gF65e4d321cBA'
>>k=find(ch>='a'&ch<='z') %利用ASCII码找到小写字母位数
k=
3 7 9 13
>>ch(k)=ch(k)-('a’-'A') %ASCII码大写在前,小写在后,相差32
ch =
'ABC123D4E56FG9'
>>length(k)
ans =
4
2.2字符串操作函数
1.字符串执行
-
格式:
-
eval(s)
参数s为字符串,eval函数把参数 字符串中的内容, 作为对应的 MATLAB命令来 执行。
t=pi;
m='[t,sin(t), cos(t)]';
y=eval (m)
y =
3.1416 0.0000 -1.0000
2.字符串与数值之间的转换
字符串以ASCII码值的形式存储。
- abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。
- char函数可以把ASCII码矩阵转换为字符串矩阵。
>>s1='MATLAB';
>a=abs(s1)
a=
77 65 84 76 65 66
>>char(a+32)
ans =
'matlab'
3.字符串的比较
字符串的比较有两种方法:利用关系运算符或字符串比较函数。
- 关系运算符比较:两个字符串里的每个字符依次按ASCII值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素要么是1,要么是0。
>> 'www0'>='w123'
ans =
1 1 1 0
- 字符串比较函数:用于判断字符串是否相等。
strcmp(s1,s2)
:比较字符串s1和s2是否相等,如果相等,返回结果为1,否则返回0。
strncmp(s1,s2,n)
:比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0。
strcmpi(s1,s2)
:在忽略字母大小写前提下,比较字符串s1和s2是否相等,如果相等,返回1,否则返回0。
strncmpi(s1,s2,n)
:在忽略字符串大小写前提下,比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0。
strcmp('www0','w123')
ans =
0
strncmpi('Www0','w123',1)
ans =
1
4.字符串的查找与替换
findstr(s1,s2)
:返回短字符串在长字符串中的开始位置。
strrep(s1,s2,s3)
:将字符串s1中的所有子字符串s2替换为字符串s3。
1.矩阵是不是方阵(即行数和列数相等的矩阵,若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。
2.此矩阵的行列式|A|是否等于0,若等于0,称矩阵A为奇异矩阵;若不等于0,称矩阵A为非奇异矩阵。 ↩︎