zoukankan      html  css  js  c++  java
  • 基本运算及字符串处理

    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矩阵】,AB等效于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=AB

    C2 = 0.5000   -0.5000   44.5000

      1.0000    0.0000   46.0000

      0.5000    1.1667  -44.8333

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

    >> 3/4

    ans = 0.7500

    >> 43

    ans = 0.7500

    >> a=[10.5,25]

    a = 10.5000   25.0000

    >> a/5

    ans = 2.1000    5.0000

    >> 5a

    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!

  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/yuling520/p/12755560.html
Copyright © 2011-2022 走看看