基本运算及字符串处理

6.MATLAB基本运算

l  算术运算

l  关系运算

l  逻辑运算

 

针对矩阵而言的,也有针对矩阵元素的运算。

1.算术运算

(1)基本算术运算

基本算术运算符:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)。

l  MATLAB的算术运算是在矩阵意义下进行的。

l  单个数据的算术运算只是矩阵运算的一种特例

加减运算

l  若两矩阵同型,则运算时两矩阵的相应元素相加减。 

若两矩阵不同型,则MATLAB将给出错误信息。 

l  一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算。

乘法运算

l  矩阵A和B进行乘法运算,要求A的列数与B的行数相等,此时则称A、B矩阵是可乘的,或称A和B两矩阵维数和大小相容。 

如果两者的维数或大小不相容,则将给出错误信息,提示用户两个矩阵是不可乘的。

除法运算

在MATLAB中,有两种矩阵除法运算:右除/和左除\。表示两种不同的除数矩阵被除数矩阵。

如果A矩阵是非奇异方阵,则B/A等效于B*inv(A)【A矩阵的逆右乘B矩阵】,A\B等效于inv(A)*B【A矩阵的逆左乘B矩阵】。

>> A=[1,2,3;4,2,6;7,4,9];

>> B=[4,3,2;7,5,1;12,7,92];

>> C1=B/A

C1 = -0.1667   -3.3333    2.5000

  -0.8333   -7.6667    5.5000

  12.8333   63.6667  -36.5000

>> C2=A\B

C2 = 0.5000   -0.5000   44.5000

  1.0000    0.0000   46.0000

  0.5000    1.1667  -44.8333

结果不相同,对于含有标量的运算,除法运算结果相同。

>> 3/4

ans = 0.7500

>> 4\3

ans = 0.7500

>> a=[10.5,25]

a = 10.5000   25.0000

>> a/5

ans = 2.1000    5.0000

>> 5\a

ans = 2.1000    5.0000

 

乘方运算

一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。

>> A=[1,2,3;4,5,6;7,8,0];

>> A^2

ans = 30    36    15

  66    81    42

   39    54    69

 

 

(2)点运算

l  点运算符:.*、./、.\和.^。 

l  两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型。

>> A=[1,2,3;4,5,6;7,8,9];

>> B=[-1,0,1;1,-1,0;0,1,1];

>> C=A.*B    //两个矩阵对应元素做乘法运算

C = -1     0     3

  4    -5     0

  0     8     9

>> D=A*B      //矩阵意义下的乘法运算。

D = 1     1     4

  1     1    10

  1     1    16

 

例1  当x=0.1、0.4、0.7、1时,分别求y=sin x cos x的值。

x=0.1:0.3:1;

y=sin(x).*cos(x)    //必须为点乘运算 x为向量,sinxcosx为通长度的向量

2.关系运算   通常用来表示条件

l  关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。 

l  当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0。

>> 3>4

ans = 0

>> x=5    //赋值

x = 5

>> x==5   //关系运算

ans = 1

l  当参与比较的量是两个同型的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。 

l  当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵它的元素由0或1组成。

 

例2  建立3阶方阵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    //每个元素除以2的余数矩阵

P = 1     0     0

  1     0     0

  0     0     1

3.逻辑运算

逻辑运算符:&(与)、|(或)和~(非)。

设参与逻辑运算的是两个标量a和b,那么运算规则为: 

l  a&b       a、b全为非零时,运算结果为1,否则为0。 

l  a|b         a、b中只要有一个为非零时,运算结果为1 。 

l  ~a       当a为零时,运算结果为1;当a为非零时,运算结果为0。、

例:

>> 3<4 & 6>5

ans = 1

>> ~(9==1)

ans = 1

>> ~9==1

ans = 0

算数优先级问题:算数运算的优先级最高,逻辑运算优先级最低,但逻辑非运算是单目运算,他的优先级比双目运算要高。

l  若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。 

l  若参与逻辑运算的一个是标量,一个是矩阵,那么将在标量与矩阵中的每个元素之间按标量规则逐个进行运算,最终运算结果是一个与矩阵同型的矩阵,其元素由1或0组成

 

例3  水仙花数是指各位数字的立方之和等于该数本身的三位正整数。求全部水仙花数。

m=100:999;

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)  //序号

k =

54   271   272   308

s=m(k)

s =

153   370   371   407

 

1.7字符串处理

分为数值型数据和字符型数据(字符串数据)

l  字符串的表示

l  字符串的操作

1.字符串的表示

在MATLAB中,字符串是用单引号括起来的字符序列。

>> xm='Central South University'

>> xm(1:3)    //一个字符串当做行向量,每个元素对应一个字符。取1-3个字符

ans = Cen

若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。

>> 'I''m a teacher.'

ans = I'm a teacher.

建立多行字符串,形成字符串矩阵。

>> ch=['abcdef';'123456'];

>> ch(2,3)  //第二行第三列的元素

ans = 3

 

例题:

建立一个字符串向量,然后对该向量做如下处理: ① 取第1~5个字符组成的子字符串。 ② 将字符串倒过来重新排列。 ③ 将字符串中的小写字母变成相应的大写字母,其余字符不变。 ④ 统计字符串中小写字母的个数。

>> ch='ABc123d4e56Fg9';

>> subch=ch(1:5)         

subch =  ABc12

>> revch=ch(end:-1:1)       //步长为-1,最后一个字符到第一个字符

revch = 9gF65e4d321cBA

>> k=find(ch>='a'&ch<='z')    //find找字母位置

k = 3     7     9    13

>> ch(k)=ch(k)-('a'-'A')      //小写转大写差32   k为向量 

ch = ABC123D4E56FG9

>> length(k)      //统计向量k的个数           

ans = 4

 

2.字符串的操作

(1) 字符串的执行

 

 

字符串的内容作为对应的matlab命令来执行。

>> t=pi;

>> m='[t,sin(t),cos(t)]';

>> y=eval(m)   //调用eval函数  向量赋给变量y

y = 3.1416    0.0000   -1.0000

2)字符串与数值之间的转换

  abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。 

  char函数可以把ASCII码矩阵转换为字符串矩阵。

>> s1='MATLAB';

>> a=abs(s1)

a = 77    65    84    76    65    66

>> char(a+32)

ans = matlab

(3)字符串的比较

字符串的比较有两种方法:利用关系运算符或字符串比较函数。

l  关系运算符比较:两个字符串里的每个字符依次按ASCII值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素要么是1,要么是0。  (两个字符串拥有相同的长度时)

>> 'www0'>='W123'

ans = 1     1     1     0

l  字符串比较函数用于判断字符串是否相等,有4种比较方式,函数如下: 

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。

>> p=findstr('This is a test!','is')

p = 3     6

>> p=findstr('is','This is a test!')

p = 3     6

>> result=strrep('This is a test!','test','class')

result = This is a class!

posted @ 2020-04-22 20:06  彡灬小宇  阅读(574)  评论(0编辑  收藏  举报