• 【MATLAB】 01 基本操作与数组输入


    01 基本操作与数组输入

    Intro

    认识 MATLAB 操作界面

    可以通过 Layout 选择需要显示的窗口及布局

    使用 MATLAB 编程有两种方法

    • 命令行 (命令窗口)
    • 脚本 (.m 文件)

    像使用计算器一样使用 MATLAB

    • 运算符 +,-,*,/,^

    • 计算的结果 以 ans 显示

    在这里插入图片描述

    • 优先级

      • 同一优先级从左到右
      • 优先级为
        1. Parenthesis (())
        2. Power (^)
        3. Multiplication and division (*,/)
        4. Addition and subtraction (+,-)

    Exercise

    Calculate:
    cos ⁡ ( ( 1 + 2 + 3 + 4 ) 3 5 ) sin ⁡ ( π ) + ln ⁡ ( tan ⁡ ( 1 ) ) 2 3.5 × 1.7 e sin ⁡ ( 10 )

    cos((1+2+3+4)35)sin(π)+ln(tan(1))23.5×1.7esin(10)" role="presentation" style="position: relative;">cos((1+2+3+4)35)sin(π)+ln(tan(1))23.5×1.7esin(10)
    cos(5(1+2+3+4)3 )sin(π )+ln(tan(1))23.5×1.7esin(10)

    嵌套函数

    sin(cos(pi))
    
    • 1

    与下方等价

    cos(pi)
    sin(ans)
    
    • 1
    • 2

    多行代码 可以合为单行代码执行

    MATLAB 先计算cos(pi) 并将计算结果储存到变量 ans
    在计算 sin(ans) 时, 与 sin(cos(pi)) 等价

    变量

    • 变量在赋值前, 不需要先声明
    • 单等号 = 是赋值运算符(Assignment Operator)
      • 将等号右边的值 赋值给等号左边
    • 大小写敏感
    • 变量命名不能以数字开始, 但可以包含数字

    数据类型

    • logical
    • char
    • numeric
      • int8, int16, int32, int64, uint8, uint16, uint32, uint64
      • single
      • double
    • cell
    • struct

    whowhos

    使用命令 who 可以查看当前变量
    使用命令 whos 可以查看当前变量及其数据类型

    >> a = 5
    
    a =
    
         5
    
    >> a * 6
    
    ans =
    
        30
    
    >> who
    
    Your variables are:
    
    a    ans  
    
    >> whos
      Name      Size            Bytes  Class     Attributes
    
      a         1x1                 8  double              
      ans       1x1                 8  double  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    特殊变量与常量

    • ans
    • i,j : complex number
    • Inf : ∞ \infty
    • eps : 2.2207 e − 016 2.2207e-016 2.2207e016
    • NaN : not a number
    • pi : π \pi π
    >> x = 1/0
    
    x =
    
       Inf
    
    >> x = inf / inf
    
    x =
    
       NaN
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    以上均是关键字
    使用命令 iskeyword 显示关键字

    >> iskeyword
    
    ans =
    
      20×1 cell array
    
        {'break'     }
        {'case'      }
        {'catch'     }
        {'classdef'  }
        {'continue'  }
        {'else'      }
        {'elseif'    }
        {'end'       }
        {'for'       }
        {'function'  }
        {'global'    }
        {'if'        }
        {'otherwise' }
        {'parfor'    }
        {'persistent'}
        {'return'    }
        {'spmd'      }
        {'switch'    }
        {'try'       }
        {'while'     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    标识符查找顺序

    1. Variable 变量
    2. Built-in function 内置函数
    3. Subfunction 子函数
    4. Private function 私有函数
      1. MEX-file
      2. P-file
      3. M-file

    例如:

    >> cos='This String.';
    >> cos(8) % 字符向量的第8个元素
    
    ans =
    
        'r'
    
    >> clear % 清除全部变量
    >> cos(8)
    
    ans =
    
       -0.1455
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    注意: 不要使用 内置函数 或 关键字 作为变量名

    指定数字格式

    默认数字格式为 short 显示小数点后四位

    使用 format [style] 指定数字格式

    StyleResultExample
    shortShort, fixed-decimal format with 4 digits after the decimal point.3.1416
    longLong, fixed-decimal format with 15 digits after the decimal point for double values, and 7 digits after the decimal point for single values.3.141592653589793
    shortEShort scientific notation with 4 digits after the decimal point.3.1416e+00
    longELong scientific notation with 15 digits after the decimal point for double values, and 7 digits after the decimal point for single values.3.141592653589793e+00
    bankCurrency format with 2 digits after the decimal point.3.14
    hexHexadecimal representation of a binary double-precision number.400921fb54442d18
    ratRatio of small integers. 以有理数形式显示结果355/113

    命令行下使用

    观察以下两个命令的不同

    >> a = 10
    >> b = 10;
    
    • 1
    • 2

    命令后加 ; 表示不向终端显示结果

    与其他终端相同, 使用 ↑ \uparrow 快速输入之前的命令

    一些常用的命令

    • clc 清空命令窗口
    • clear 清除工作区的所有变量
      • 谨慎使用, 建议只删除不需要的变量 clear [variable]
    • who 查看工作区的变量
    • whos 查看工作区变量的详细信息

    数组输入

    Array (Vector and Matrix) Input

    行向量 Row vector

    >> a = [1 2 3 4]
    
    • 1

    列向量 Column vector

    >> b = [1; 2; 3; 4]
    
    • 1

    >> a * b
    
    ans =
    
        30
    
    >> b * a
    
    ans =
    
         1     2     3     4
         2     4     6     8
         3     6     9    12
         4     8    12    16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • Key in the following matrix in MATLAB

    A = [ 1 21 6 5 17 9 31 2 7 ] A=

    [121651793127]" role="presentation" style="position: relative;">[121651793127]
    A= 153121172697

    >> A = [1 21 6; 5 17 9; 31 2 7]
    
    A =
    
         1    21     6
         5    17     9
        31     2     7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用下标获取矩阵中的元素

    注意: 与其他编程语言中不同, MATLAB 中向量的下标从 1 开始

    >> A = [1 21 6; 5 17 9; 31 2 7]
    
    A =
    
         1    21     6
         5    17     9
        31     2     7
    
    >> A(8)
    
    ans =
    
         9
    
    >> A([1 3 5])
    
    ans =
    
         1    31    17
    
    >> A([1 3; 1 3])
    
    ans =
    
         1    31
         1    31
    
    >> A(3,2)
    
    ans =
    
         2
    
    >> A([1 3], [1 3])
    
    ans =
    
         1     6
        31     7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    观察以上命令运行的结果 可以看出 MATLAB 获取矩阵中元素的方法

    • 没有逗号
      • A([index]) 从上往下, 从左往右 对元素从 1 开始标号
      • A([1 3 5]) 取出下标为 1 3 5 的元素, 结果为数组
      • A([1 3; 1 3]) 取出下标为 1 3 的元素 放在矩阵的第一行, 再取出下标为 1 3 的元素 放在矩阵的第二行

    • 有逗号
      • A([row], [column]) 根据(行,列)坐标取出元素
      • A([1 3], [1 3]) 取出 ([行 行], [列 列]) 交点上的元素 放入矩阵, 也就是 第 1, 3 行 与 第 1,3 列 交点上的元素

    Exercise

    完成以下赋值
    A = [ 1 21 6 5 17 9 31 2 7 ] ⟹ [ 1 76 6 5 17 9 31 0 7 ] ⟹ [ 1 0 0 5 0 0 31 0 7 ] ⟹ [ 1 0 0 5 0 0 ] A=\left[

    121651793127" role="presentation" style="position: relative;">121651793127
    \right] \Longrightarrow\left[
    176651793107" role="presentation" style="position: relative;">176651793107
    \right]\Longrightarrow\left[
    1005003107" role="presentation" style="position: relative;">1005003107
    \right]\Longrightarrow \left[
    100500" role="presentation" style="position: relative;">100500
    \right] A= 153121172697 153176170697 1531000007 [150000]

    提示 请先看完下面的冒号运算符

    A(3,:)表示选中第三列的全部
    A(3,:)=[]让第三列等于一个空向量, 就是删除第三列

    冒号运算符

    • 如果想要创建这样的数组: A = [ 1 2 3 ⋯ 100 ] A =

      [123100]" role="presentation" style="position: relative;">[123100]
      A=[123100]

    • 可以使用冒号运算符(Colon Operator)

    • 语法
      j : k ⟹ [ j ,   j + 1 ,   j + 2 , ⋯   ,   j + m ] j : i : k ⟹ [ j ,   j + i ,   j + 2 i , ⋯   , j + m × i ]

      j:k[j, j+1, j+2,, j+m]j:i:k[j, j+i, j+2i,,j+m×i]" role="presentation" style="position: relative;">j:k[j, j+1, j+2,, j+m]j:i:k[j, j+i, j+2i,,j+m×i]
      j:kj:i:k[j, j+1, j+2,, j+m][j, j+i, j+2i,,j+m×i]
      start:length:end 未指定步长时, 默认步长为 1

    A = [ 1 2 3 ⋯ 100 ] A =

    [123100]" role="presentation" style="position: relative;">[123100]
    A=[123100] 可以使用 A=[1:100] 创建

    矩阵拼接

    相同形状的矩阵可以连接在一起

    例如:

    >> A=[1 2; 3 4];
    >> B=[9 9; 9 9];
    >> F=[A B]
    
    F =
    
         1     2     9     9
         3     4     9     9
    
    >> F=[A; B]
    
    F =
    
         1     2
         3     4
         9     9
         9     9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    矩阵运算

    • 可以用在矩阵上的运算符 : +,-,*,/,^,.,'

    对以下矩阵:
    A = [ 1 2 3 4 5 4 9 8 7 ] B = [ 3 3 3 2 4 9 1 3 1 ] a = 2 A=\left[

    123454987" role="presentation" style="position: relative;">123454987
    \right] \quad B=\left[
    333249131" role="presentation" style="position: relative;">333249131
    \right] \quad a=2 A= 149258347 B= 321343391 a=2
    做如下运算:

    >> A
    
    A =
    
         1     2     3
         4     5     4
         9     8     7
    
    >> B
    
    B =
    
         3     3     3
         2     4     9
         1     3     1
    
    >> a
    
    a =
    
         2
    
    >> A+a
    
    ans =
    
         3     4     5
         6     7     6
        11    10     9
    
    >> A/a
    
    ans =
    
        0.5000    1.0000    1.5000
        2.0000    2.5000    2.0000
        4.5000    4.0000    3.5000
    
    >> A./a
    
    ans =
    
        0.5000    1.0000    1.5000
        2.0000    2.5000    2.0000
        4.5000    4.0000    3.5000
    
    >> A^a
    
    ans =
    
        36    36    32
        60    65    60
       104   114   108
    
    >> A.^a
    
    ans =
    
         1     4     9
        16    25    16
        81    64    49
    
    >> A'
    
    ans =
    
         1     4     9
         2     5     8
         3     4     7
    
    >> A+B
    
    ans =
    
         4     5     6
         6     9    13
        10    11     8
    
    >> A*B
    
    ans =
    
        10    20    24
        26    44    61
        50    80   106
    
    >> A.*B
    
    ans =
    
         3     6     9
         8    20    36
         9    24     7
    
    >> A/B
    
    ans =
    
        0.0714    0.2857    0.2143
        1.1667         0    0.5000
        3.2619   -0.2857   -0.2143
    
    >> A./B
    
    ans =
    
        0.3333    0.6667    1.0000
        2.0000    1.2500    0.4444
        9.0000    2.6667    7.0000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109

    .加上运算符, 表示矩阵对应元素间的运算 而不是矩阵之间的运算
    '表示对矩阵求转置

    注意: 矩阵不能相除, 这里矩阵间的除法运算 与 A × B − 1 A\times B^{-1} A×B1 的结果大概相等
    也就是表示对一个空间, 先进行 A A A 线性变化, 然后再进行 B B B 线性变化的逆变化

    这里涉及到了 线性代数的本质
    简要概括为:

    • 矩阵
      • 形式上看, 是一个数表
      • 本质上是对空间施加线性变化
      • 对矩阵求逆(inv())之后再相乘, 表示“还原变化”
    • 行列式
      • 形式上看, 是一个数
      • 本质上是经过 行列式对应矩阵 所代表的线性变化后
        线性空间内图形的 长度(1维)/面积(2维)/体积(3维)/… 变化的倍数
      • 对矩阵求对应行列式的值: det()

    一些特殊的矩阵

    • linespace() :
    • eye(n) : 主对角线上全是 1 1 1, 其他地方全为 0 0 0 n × n n\times n n×n 矩阵
    • zeros(n1,n2) : n 1 × n 2 n_1\times n_2 n1×n2 零矩阵
    • ones(n1,n2) : n 1 × n 2 n_1\times n_2 n1×n2 单位矩阵
    • diag() : 输入数组, 会将数组元素放在对角线上, 其他元素全为零
    • rand() : 生成随机矩阵

    矩阵相关的函数

    • max(A) 找出 A 矩阵中每一列最大的元素 结果为行向量

      • 嵌套使用可以找出 A 矩阵中最大的元素 max(max(A))
    • min() 用法与 max() 一样

    • sum(A) 对 A 每一列的元素求和 结果为行向量

      • 嵌套使用可以得到 A 矩阵中所有元素的和
    • mean(A) 对 A 的每一列求平均数 结果为行向量

      • 嵌套使用可以得到 A 矩阵中所有元素的平均值
    • sort(A) 对 A 的每一列进行排序, 从上到下递增

      • 是列操作
    • sortrows(A) 对 A 的第一列进行排序 同时把对应列所在行也进行移动

      • 例如

        • >> A=[1 2 3; 0 5 6; 7 0 9]
          
          A =
          
               1     2     3
               0     5     6
               7     0     9
          
          >> sortrows(A)
          
          ans =
          
               0     5     6
               1     2     3
               7     0     9
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
    • size(A) 得到 A 矩阵的阶数 结果为两个数 第一个数为行数 第二个数为列数

    • length(A) 得到 A 向量的长度

    • find(A==[num]) 返回 A 矩阵中等于 [num] 的元素的下标

  • 相关阅读:
    Java-集合类
    四川易点慧电子商务抖音小店:安全正规,购物新选择
    什么是自动化测试框架?如何搭建自动化测试框架详解
    mybatis-plus通过inSql实现子查询以及运算符
    CData Drivers for Asana复制和仓储
    第九节:类和对象【三】【static、代码块、对象的打印】
    最新SparkAI创作系统V2.6.2/ChatGPT网站系统H5源码+微信公众号版+AI绘画系统源码/支持GPT联网提问/支持Prompt应用
    解读数据可用性赛道:如何讲好模块化区块链的叙事?
    失效的访问控制漏洞复现(dvwa)
    关于MAC电脑无法正常登陆H3C iNodes登陆的解决办法
  • 原文地址:https://blog.csdn.net/Bluur/article/details/126271112