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!

  • 相关阅读:
    C#反射(一)
    找回密码
    常用的webservice接口 .
    C# 反射应用技术
    Delphi简介
    C#程序思想简介
    如何跨线程访问window控件
    C#如何判断某个文件夹是否为共享,访问权限为只读
    Delphi基础
    Web Service接口
  • 原文地址:https://www.cnblogs.com/yuling520/p/12755560.html
Copyright © 2011-2022 走看看