• MATLAB入门一基础知识


    MATLAB入门一基础知识

    此篇为课程学习笔记

    链接: link

    什么是MATLAB

    平时所说的MATLAB既是一款软件又是一种编程语言,只是这种高级解释性语言是在配套的软件下进行开发的

    MATLAB的一个特性

    MATLAB的一个特性,如果一条语句以英文分号‘;’结尾,那么这条语句对应的内容或者运行结果不会在命令窗口中被显示,如果没有分号‘;’则会被显示。

    最常见的函数

    内置输出函数disp(X)

    disp函数是MATLAB的内置输出函数,直接调用它可以在命令窗口中输出你想输出的结果X。
    X可以是各种各样的数据,包括数字、字符、矩阵等等。

    内置输入函数input()

    用于用户对程序内输入数据,具体用法为x = input(prompt)或者str = input(prompt,‘s’),前者表示输入一个数值,后者表示输入一个字符串。
    当程序运行到这个地方时,在命令窗口内,需要用户输入一个数据,以回车键结束,那么这个数据会存储到x(如果使用的是字符型输入,则存储到str),其中,prompt表示提示语,一般是一个字符串,而且这个字符串必须有(可以为空字符串"")。

    数字转字符函数num2str(A)

    用于将数字A转换为字符串,根据这个函数的构造很容易看出它的意思“number to string”。

    函数

    在MATLAB中,对函数的调用方法分为直接调用和间接调用。

    • 直接调用:一个M文件中只能有一个主函数,这个主函数(与m文件同名)可以被其他文件的函数调用,但其他子函数不能
    • 间接调用:使用函数句柄,创建函数句柄需要使用到操作符@。创建格式为:
    Function_Handle = @Function_FileName;
    
    
    • 1
    • 2

    其中Function_Handle变量保存了这个函数句柄,Function_FileName变量是函数所对应的m文件名称或者是MATLAB内部函数的名称。如:

    F_Handle = @cos;
    x = 0:0.25 * pi : 2 * pi;
    F_Handle(x)
    
    结果为:
    >> learn_Matlab
    
    ans =
    
        1.0000    0.7071    0.0000   -0.7071   -1.0000   -0.7071   -0.0000    0.7071    1.0000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    结构体

    MATLAB中的结构体和C语言中的结构体类似。创建结构体的方式有两种:

    1. 通过字段赋值创建:
      例如:
    Student.Name = 'Sam';
    Student.Grade = '6';
    Student.Subject = {'Chinese', 'Math', 'English'};
    Student.Result = {99,99,99};
    Student
    
    运行结果:
    >> learn_Matlab
    
    Student = 
    
      包含以下字段的 struct:
    
           Name: 'Sam'
          Grade: '6'
        Subject: {'Chinese'  'Math'  'English'}
         Result: {[99]  [99]  [99]}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    1. 通过struct函数创建:
      例如:
    Schedule = struct('Day','Thu','Time','15:00','Number','18')
    
    运行结果:
    >> learn_Matlab
    
    Schedule = 
    
      包含以下字段的 struct:
    
           Day: 'Thu'
          Time: '15:00'
        Number: '18'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    补充:repmat 函数定义
    B = repmat(A,n)
    B = repmat(A,r1,…,rN)
    B = repmat(A,r)

    这是一个处理矩阵内容有重复时使用,其功能是以A的内容堆叠在(r1xr2)的矩阵B中,B矩阵的大小由r1r2r3*…及A矩阵的内容决定。
    如:

    Schedule = struct('Day','Thu','Time','15:00','Number','18')
    SS = repmat(Schedule,1,2);
    SS(1)
    SS(2)
    
    运行结果:
    
    >> learn_Matlab
    Schedule = 
      包含以下字段的 struct:
           Day: 'Thu'
          Time: '15:00'
        Number: '18'
    ans = 
      包含以下字段的 struct
           Day: 'Thu'
          Time: '15:00'
        Number: '18'
    ans = 
      包含以下字段的 struct:
           Day: 'Thu'
          Time: '15:00'
        Number: '18'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    结构体数组:

    newArray = struct('Day', {'Thu', 'Fri'}, 'Time', {'15:00', '13:00'}, 'Number', {12, 2})
    newArrary(1)
    newArrary(2)
    
    运行结果:
    >> learn_Matlab
    newArray = 
      包含以下字段的 1×2 struct 数组:
    
        Day
        Time
        Number
    ans = 
      包含以下字段的 struct:
           Day: 'Thu'
          Time: '15:00'
        Number: 12
    ans = 
      包含以下字段的 struct:
           Day: 'Fri'
          Time: '13:00'
        Number: 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    数组类型

    在MATLAB中,进行运算的所有数据类型,都是按照数组及矩阵的形式进行存储和运算的,而两者的运算方式完全不同,数组强调的是元素对元素,而矩阵是用线性代数的运算方式。
    数组的定义是广义的,数组的元素可以是任何数据类型。利用数组的构建方法可以直接对变量进行赋值:

    array = [1 2 3 4 5]
    运行结果:
    >> learn_Matlab
    array =
         1     2     3     4     5
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    也可以使用冒号”:“来代表一系列的值:

    array = 0:10  % 表示从0开始,步长为1,到10结束的一系列数字序列;
    % 序列最后一个数小于等于10
    array1 = 0:2:9 % 表示从0开始,步长为2,到9结束的一系列数字序列;
    % 序列最后一个数小于等于9
    
    >> learn_Matlab
    array =
         0     1     2     3     4     5     6     7     8     9    10
    array1 =
         0     2     4     6     8
    运行结果:
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    空数组的创建:

    array = []
    
    运行结果:
    >> learn_Matlab
    array =
         []
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    单元(cell)数组

    使用单元数组的目的在于:它可以把不同类型数据归并到一个数组中。单元数组的维数不受限制。

    1. 使用赋值语句创建单元数组:
      与一般数组有所不同的是,单元数组使用花括号”{}“来创建,使用逗号”,“或空格来分隔每一个单元,使用分号”:“来分行。
    C = {'x', [1;3;6]; 10, pi}
    whos C
    
    运行结果:
    >> learn_Matlab
    C =
      2×2 cell 数组
        {'x' }    {3×1 double}
        {[10]}    {[  3.1416]}
      Name      Size            Bytes  Class    Attributes
      C         2x2               490  cell    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. 利用cell函数创建空单元数组:
    %创建一个m*n的空单元数组,其中每一个单元均为空矩阵
    cellName = cell(2, 3)
    >> learn_Matlab
    cellName =
      2×3 cell 数组
        {0×0 double}    {0×0 double}    {0×0 double}
        {0×0 double}    {0×0 double}    {0×0 double}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    单元数组的寻访

    在单元数组中,寻访单元和单元中的内容是不一样的,对应的是两种不同的操作。为此MATLAB设计了相对应的操作对象:单元外标识(cell indexing)和单元内编址(content Addressing).
    对于单元数组C, **cell(m,n)**指的是单元数组中的第m行第n列的单元,它返回的是一个单元,**cell{m,n}**指的是单元数组中的第m行第n列单元中的内容,返回的是单元中的值。例如:

     C = {2[2 4;3 6;1 3], 'string'; sin(pi/8),3>10, 'code'}
     v1 = C(2, 2)
     class(v1)
     v2 = C{2, 2}
     class(v2)
    
    运行结果:
    >> learn_Matlab
    C =
      2×3 cell 数组
        {[     2]}    {3×2 double}    {'string'}
        {[0.3827]}    {[       0]}    {'code'  }
    v1 =
      1×1 cell 数组
        {[0]}
    ans =
        'cell'
    v2 =
      logical
       0
    ans =
        'logical'
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    1. 单元数组的合并

    a{1, 1} = 'cellclass';
    a{1, 2} = [1 2 2];
    a{2, 1} = ['q' 'w' 'e'];
    a{2, 2} = [6 5 4];
    a
    b = {'Jan'}
    c = {a, b}
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2. 删除单元数组中指定的单元
    只需要将空矩阵复制给指定的单元即可。

    a{1, 1} = 'cellclass';
    a{1, 2} = [1 2 2];
    a{2, 1} = ['q' 'w' 'e'];
    a{2, 2} = [6 5 4];
    
    a{2, 2} = []
    a(1, 2) = {[]}
    
    运行结果:
    >> learn_Matlab
    a =
      2×2 cell 数组
        {'cellclass'}    {1×3 double}
        {'qwe'      }    {0×0 double}
    a =
      2×2 cell 数组
        {'cellclass'}    {0×0 double}
        {'qwe'      }    {0×0 double}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3. 使用reshape函数改变单元数组的形状
    reshape函数的调用格式:

    teimC = reshape(C, m, n)
    %该函数将单元数组C改变为一个具有m行n列的新单元数组。
    
    • 1
    • 2

    例如:

    C = {ones(3), 'hello,world', zeros(5), [21, 3, 2]}
    newC = reshape(C,2,2)
    
    运行结果为:
    >> learn_Matlab
    C =
      1×4 cell 数组
        {3×3 double}    {'hello,world'}    {5×5 double}    {1×3 double}
    newC =
      2×2 cell 数组
        {3×3 double   }    {5×5 double}
        {'hello,world'}    {1×3 double}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    map容器类型

    map的本意是映射,就是将一个量映射到另一个量,map中的内容是键值对,即一个key对应一个value。map中存储的数据可以是任何类型的。

    • 创建map对象
    mapObj = containers.Map({key1,key2,……}, {value1, value2,……})
    %当键和值是字符串时,需要稍做变更
    mapObj = containers.Map({'key1', 'key2',……}, {'value1', 'value2',……})
    
    
    • 1
    • 2
    • 3
    • 4

    例如:

    scheduleMap = containers.Map({'Mon', 'Tue', 'Wed', 'Thu', 'Fri'}, {'Maths', 'Chinese', 'History', 'Geography', 'Biology'})
    
    运行结果:
    >> learn_Matlab
    
    scheduleMap = 
    
      Map - 属性:
    
            Count: 5
          KeyType: char
        ValueType: char
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    可以使用MapName.property来访问Map的属性,如:

    scheduleMap.KeyType 
    
    运行结果:
    ans =
        'char'
    
    • 1
    • 2
    • 3
    • 4
    • 5

    也可以先创建一个空的Map,再通过键值对的对应来补充其内容。

    • 读取Map对象
      可以通过keys()函数来查看所有的key,也可以通过values()函数来查看所有的值。
      如:
    keys(scheduleMap)
    values(scheduleMap)
    
    运行结果:
    ans =
      1×5 cell 数组
        {'Fri'}    {'Mon'}    {'Thu'}    {'Tue'}    {'Wed'}
    ans =
      1×5 cell 数组
        {'Biology'}    {'Maths'}    {'Geography'}    {'Chinese'}    {'History'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    读取格式如下:

    valueName = mapName(keyName)
    %当键名是一个字符串时,需要使用单引号将键名括起来
    
    • 1
    • 2

    例子:

    course = scheduleMap('Wed')
    
    输出为:
    
    course =
        'History'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果需要对多个键进行访问时,可以使用values函数:

    values(scheduleMap,{'Mon', 'Thu'})
    
    输出为:
    ans =
      1×2 cell 数组
        {'Maths'}    {'Geography'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 编辑Map对象
      从map中是删除键值对:
    %使用remove函数的格式:
    remove('mapName', 'keyName')
    
    • 1
    • 2

    例如:

    scheduleMap = containers.Map({'Mon', 'Tue', 'Wed', 'Thu', 'Fri'}, {'Maths', 'Chinese', 'History', 'Geography', 'Biology'})
    
    remove(scheduleMap, 'Thu')
    
    keys(scheduleMap)
    values(scheduleMap)
    
    输出为:
    ans = 
      Map - 属性:
            Count: 4
          KeyType: char
        ValueType: char
    ans =
      1×4 cell 数组
        {'Fri'}    {'Mon'}    {'Tue'}    {'Wed'}
    ans =
      1×4 cell 数组
        {'Biology'}    {'Maths'}    {'Chinese'}    {'History'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    添加键值对:
    需要注意的是:原Map对象里的key是什么类型的,新添加的key就得是什么类型的。

    %调用格式为
    existingMapObj(newKeyName) = newValue
    
    • 1
    • 2

    例如:

    scheduleMap('Sta') = 'public'
    keys(scheduleMap)
    values(scheduleMap)
    
    输出为:
    ans =
      1×6 cell 数组
        {'Fri'}    {'Mon'}    {'Sta'}    {'Thu'}    {'Tue'}    {'Wed'}
    ans =
      1×6 cell 数组
        {'Biology'}    {'Maths'}    {'public'}    {'Geography'}    {'Chinese'}    {'History'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    修改key:
    如果需要在保持值不变的情况下,对键名进行修改,则首先要删除键值对,然后再添加。
    修改value:通过复制操作覆盖原有的值。

    基本矩阵操作

  • 相关阅读:
    6-图文打造LeeCode算法宝典-数组与排序算法题解
    ETH POS 2.0 Staking 测试网质押流程
    安达发|富士康科技集团利用自动排程APS软件打造智慧工厂
    七、垃圾收集中级
    2022-08-27 第六小组 瞒春 学习笔记
    【Redis 基础】什么是缓存穿透、缓存雪崩和缓存击穿
    idea/vscode插件安装推荐
    Hive sql 行列转换(行转列,列转行)
    SAP UI5 Form 表单的 Responsive Grid Layout 布局中的 breakpoint
    c++ 友元函数
  • 原文地址:https://blog.csdn.net/m0_47484802/article/details/132794899