MATLAB学习笔记1 MATLAB基础知识

MATLAB学习笔记1 MATLAB基础知识

1.1 MATLAB数值类型
数值数据类型的分类
  • 整型

    无符号整数:无符号8、16、32、64位整数

    带符号整数:带符号8、16、32、64位整数

    >>x=int8(129)
    x=127
    >>x=uint8(129)
    x=129
    
  • 浮点型

    单精度型实数:4个字节

    双精度型实数:8个字节

    >>class(4)
    ans=
    double
    >>class(single(4))
    ans=
    single
    
  • 复数型

    复型数据包括实部和虚部两个部分,默认都为双精度型,虚数单位用i或者j来表示

    real函数:求复数的实部

    imag函数:求复数的虚部

数据数值的输出格式

format命令的格数:format 格式符

>>format long
>>50/3
ans=
	16.666666666666668
>>format
>>50/3
ans=
	16.6667

format short:默认格式,小数点后保留4位

format long:有效数字16位

format long e:有效数字16位加3位指数

format short e:有效数字5位加3位指数

format bank:保留两位小数位

format +:只给出正负

format rational:以分数的形式表示

format hex:以16进制数表示

format long g:15位有效数

format short g:5位有效数

常用的科学函数
  1. 函数的调用格式为

    函数名(函数自变量的值)

    函数的自变量规定为矩阵变量,当然也可以是标量,标量本身是矩阵的一种特例。

    >> A=[4,2;3,6]
    A =
         4     2
         3     6
    >> B=exp(A)
    B =
       54.5982    7.3891
       20.0855  403.4288
    
  2. 常见函数的应用

    • 三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以角度为单位的函数就在函数名后面加“d”,以示区别

      >> sin(pi/2)
      ans =
           1
      >> sind(90)
      ans =
           1
      
    • abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值

      >> abs(-4)
      ans =
           4
      >> abs(3+4i)
      ans =
           5
      >> abs('a')
      ans =
          97
      
    • 用于取整的函数有fix、floor、ceil、round

      round函数按照四舍五入的规则取整

      ceil函数是向上取整,取大于等于这个数的第一个整数

      floor函数是向下取整,取小于等于这个数的第一个整数

      fix函数是固定取靠近0的那个函数,即舍去小数取整

    • 函数应用举例

      %求一个三位正整数的个位数字、十位数字和百位数字
      >> m=345;
      >> m1=rem(m,10)
      m1 =
           5
      >> m2=rem(fix(m/10),10)
      m2 =
           4
      >> m3=fix(m/100)
      m3 =
           3
      
      %求1-100的所有质数
      >> x=1:100;
      >> k=isprime(x);
      >> k1=find(k);
      >> p=x(k1)
      p =
        1 至 19 列
           2     3     5     7    11    13    17    19    23    29    31    37    41    43    47    53    59    61    67
        20 至 25 列
          71    73    79    83    89    97
      
1.2 变量及其操作
变量与赋值语句
  1. 变量

    • 变量本质上讲是内存单元的一个抽象

    • 变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63的字符

    • 变量名区分字母的大小写

    • 标准函数名以及命令名一般用小写字母

  2. 赋值语句

    • 变量=表达式
    • 表达式
    >>  y=exp(pi/2);
    >> 	x=sqrt(7)-2i;
    >>  y=exp(pi/2);
    >> 	z=(5+cosd(47))/(1+abs(x-y))
    z =
        1.4395
    
  3. 预定义变量

    预定义变量是由系统本身定义的变量

    • ans是默认赋值变量

    • i和j代表虚数单位

    • pi代表圆周率

    • NaN代表非数

变量的管理
  1. 内存变量的删除与修改

    在右侧工作区窗口右键修改

  2. who命令和whos命令

    >> who
    您的变量为:
    ans  k    k1   p    x    y    z    
    >> whos
      Name      Size             Bytes  Class      Attributes
      ans       1x25               200  double               
      k         1x100              100  logical              
      k1        1x25               200  double               
      p         1x25               200  double               
      x         1x1
      16  double     complex   
      y         1x1                  8  double               
      z         1x1                  8  double         
    
  3. 内存变量文件

    用于保存MATLAB工作区变量的文件叫做内存变量文件,其扩展名为.mat,也叫MAT文件

    • save命令:创建内存变量文件
    • load命令:装入内存变量文件
    >> save mydata ans k
    >> load('mydata.mat')
    
1.3 MATLAB矩阵的表示
矩阵的建立
  1. 利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔。

    >> A=[1,2,3;4,5,6;7,8,9]
    A =
         1     2     3
         4     5     6
         7     8     9
    
  2. 利用已建好的矩阵建立更大的矩阵:一个大矩阵可以由已经建立好的小矩阵拼接而成。

    >> A=[1,2,3;4,5,6;7,8,9];
    >> B=[-1,-2,-3;-4,-5,-6;-7,-8,-9];
    >> C=[A,B;B,A]
    C =
         1     2     3    -1    -2    -3
         4     5     6    -4    -5    -6
         7     8     9    -7    -8    -9
        -1    -2    -3     1     2     3
        -4    -5    -6     4     5     6
        -7    -8    -9     7     8     9
    
  3. 可以由实部矩阵和虚部矩阵构成复数矩阵

    >> B=[1,2,3;4,5,6];
    >> C=[6,7,8;9,10,11];
    >> A=B+i*C
    A =
       1.0000 + 6.0000i   2.0000 + 7.0000i   3.0000 + 8.0000i
       4.0000 + 9.0000i   5.0000 +10.0000i   6.0000 +11.0000i
    
冒号表达式

格式: e1(初始值):e2(步长):e3(终止值)

linspace函数

linspace(a,b,n)
% a 第一个数	b 最后一个数		n 总个数
% 当n省略时,自动产生100个元素
结构矩阵和单元矩阵
  1. 结构矩阵

    格式为: 结构矩阵元素.成员名=表达式

    >> a(1).x1=10;a(1).x2='liu';a(1).x3=[11,21;34,78];
    >> a(2).x1=12;a(2).x2='wang';a(2).x3=[34,191;27,578];
    >> a(3).x1=10;a(3).x2='liu';a(3).x3=[11,21;34,78];
    
  2. 单元矩阵

    建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用大括号括起来

    >> b={10,'liu',[11,21;34,78];12,'wang',[34,191;27,578];14,'cai',[13,890;67,231]}
    b =
      3×3 cell 数组
        {[10]}    {'liu' }    {2×2 double}
        {[12]}    {'wang'}    {2×2 double}
        {[14]}    {'cai' }    {2×2 double}
    
1.4 矩阵元素的引用
矩阵元素的引用方式
  1. 通过下标来引用矩阵的元素

    >> A=[1,2,3;4,5,6];
    >> A(4,5)=10;
    >> A
    A =
         1     2     3     0     0
         4     5     6     0     0
         0     0     0     0     0
         0     0     0     0    10
    
  2. 通过序号来引用

    >>  A=[1,2,3;4,5,6];
    >>  A(3)
    ans =
         2
    

    序号与下标是对应的,以m*n的矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i

    也可以通过sub2ind和ind2sub函数实现相互转换

    • sub2ind函数:将矩阵中指定元素的行、列下标转换成储存的序号。
      调用格式为D=sub2ind(S,I,J)

      S是矩阵的行数和列数,I是代表某个元素的行下标,J表示某个元素的列下标

      >> A = [1:3;4:6];
      >> D=sub2ind(size(A),[1,2;2,2],[1,1;3,2])
      D =
           1     2
           6     4
      
    • ind2sub函数:将矩阵元素的序号转换成对应的下标。

      调用格式为[I,J]=ind2sub(S,D)

      S是矩阵的行数和列数,I是代表某个元素的行下标,J表示某个元素的列下标

      >> [I,J]=ind2sub(size(A),D)
      I =
           1     2
           2     2
      J =
           1     1
           3     2
      
  3. 利用冒号表达式获得子矩阵

    子矩阵是指由矩阵中的一部分元素构成的矩阵

    >> A=[1:5;6:10;11:15];
    >> A(1:2,:)
    ans =
         1     2     3     4     5
         6     7     8     9    10
    >> A(2:3,1:2:5)
    ans =
         6     8    10
        11    13    15
    

    end运算符:表达某一维的末尾元素下标

    >> A(end,:)
    ans =
        11    12    13    14    15
    >> A([1,3],3:end)
    ans =
         3     4     5
        13    14    15
    
删除矩阵中的元素

利用空矩阵删除矩阵的元素

>> A=[1,2,3,0,0;7,0,9,2,6;1,4,-1,1,8]
A =
     1     2     3     0     0
     7     0     9     2     6
     1     4    -1     1     8
>> A(:,[2,4])=[]
A =
     1     3     0
     7     9     6
     1    -1     8
改变矩阵的形状

reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二位矩阵。

>> x=[1:12];
>> reshape(x,3,4)
ans =
     1     4     7    10
     2     5     8    11
     3     6     9    12

A(:)矩阵A的每一列元素堆叠起来,成为一个列向量。

>> A=[-45,65,71;27,35,91]
A =
   -45    65    71
    27    35    91
>> B=A(:)
B =
   -45
    27
    65
    35
    71
    91
1.5 MATLAB基本运算
基本算数运算
  • 加减运算:两个矩阵必须同型,如果是标量与矩阵进行加减运算,把标量和矩阵中的每一个元素进行加减运算

  • 乘法运算:要求A的列数和B的行数要相等

  • 除法运算:如果A为非奇异方阵,则B/A=B*inv(A),A\B=inv(A)*B

    >> A=[1,2,3;4,2,6;7,4,9];
    >> B=[4,3,2;7,5,1;12,7,92];
    >> C1=A/B
    C1 =
        7.9623   -4.2453   -0.0943
       -4.5472    2.9434    0.1321
       -5.1321    3.6415    0.1698
    >> C2=A\B
    C2 =
        0.5000   -0.5000   44.5000
        1.0000    0.0000   46.0000
        0.5000    1.1667  -44.8333
    >> C3=A*inv(B)
    C3 =
        7.9623   -4.2453   -0.0943
       -4.5472    2.9434    0.1321
       -5.1321    3.6415    0.1698
    >> C4=inv(A)*B
    C4 =
        0.5000   -0.5000   44.5000
        1.0000    0.0000   46.0000
        0.5000    1.1667  -44.8333
    
  • 乘方运算

点运算
>> A=[1,2,3;4,2,6;7,4,9];
B=[4,3,2;7,5,1;12,7,92];
>> C=A.*B
C =
     4     6     6
    28    10     6
    84    28   828
>> C=A*B
C =
    54    34   280
   102    64   562
   164   104   846
关系运算
  • 关系运算符:<、>、<=、>=、==、~=
  • 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0
  • 当参与比较的量是两个同型的矩阵时,按照每个位置分别比较,得到1和0的矩阵
  • 标量和矩阵比较时,将标量与矩阵每个值进行比较,得到1和0的矩阵
逻辑运算

逻辑运算符:&、|、~

  • a&b a、b全为非0的时候,结果才为1,否则为0
  • a|b a、b中只要有一个非0,结果为1,否则为0
  • ~a如果a为非0,结果为0否则为1
  • 如果参与逻辑运算是两个同型的矩阵时,按照每个位置分别运算,得到1和0的矩阵
  • 标量和矩阵运算时,将标量与矩阵每个值进行逐个计算,得到1和0的矩阵

在各个运算中,算数运算的优先级最高,逻辑运算的优先级最低,但逻辑非运算是单目运算,它的优先级比双目运算要高

%求全部水仙花数	各位数字的立方之和等于该数字本身的三位正整数
>>  A=[100:999];
>> A1=rem(A,10);%个位
A2=rem(fix(A/10),10);%十位
A3=rem(fix(A/100),10);%百位
>> k=find(A==A1.*A1.*A1+A2.*A2.*A2+A3.*A3.*A3)
k =
    54   271   272   308
>> S=A(k)
S =
   153   370   371   407
1.6 MATLAB中的字符串
字符串的表示

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

>> xm='Northwestern Polytechnical University'
xm =
    'Northwestern Polytechnical University'
>> xm(1:3)
ans =
    'Nor'

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

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

>> ch=['abcdef';'123456'];
>> ch(2,3)
ans =
    '3'
字符串的操作
  1. 字符串的执行

    格式:eval(s) 将参数字符串中的内容当作作为对应的MATLAB命令来执行

    >> t=pi
    t =
        3.1416
    >> m='[t,sin(t),cos(t)]'
    m =
        '[t,sin(t),cos(t)]'
    >> eval(m)
    ans =
        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. 字符串的比较

    • 利用关系运算符
      每个字符依次按照ASCII码值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素为1或0

    • 字符串比较函数

      strcmp(s1,s2):用于比较字符串s1、s2是否相等,如果相等返回1,否则反回0

      strncmp(s1,s2,n):用于比较两个字符串前n个字符是否相等,如果相等返回1,否则返回0

      strcmpi(s1,s2):在忽略字母大小的前提下,比较字符串s1和s2是否相等,如果相等,返回1,否则返回0

      strcmpi(s1,s2):在忽略字母大小的前提下,比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0

  4. 字符串的查找与替换

    findstr(s1,s2):返回短字符串在长字符串中的开始位置

以用来获取字符串矩阵所对应的ASCII码数值矩阵**

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

    >> s1='MATLAB';
    >> a=abs(s1)
    a =
        77    65    84    76    65    66
    >> char(a+32)
    ans =
        'matlab'
    
  1. 字符串的比较

    • 利用关系运算符
      每个字符依次按照ASCII码值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素为1或0

    • 字符串比较函数

      strcmp(s1,s2):用于比较字符串s1、s2是否相等,如果相等返回1,否则反回0

      strncmp(s1,s2,n):用于比较两个字符串前n个字符是否相等,如果相等返回1,否则返回0

      strcmpi(s1,s2):在忽略字母大小的前提下,比较字符串s1和s2是否相等,如果相等,返回1,否则返回0

      strcmpi(s1,s2):在忽略字母大小的前提下,比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0

  2. 字符串的查找与替换

    findstr(s1,s2):返回短字符串在长字符串中的开始位置

    strrep(s1,s2,s3):将字符串s1中的所有字符串s2替换为字符串s3

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值