MATLAB: 基本语法

MATLAB基本语法及矩阵算术操作

基本语法

数据类型

  • 创建变量无需显式声明数据类型,会自动隐式推断
  • 数据类型分为:
    • 数值:整型、长整型、单双精度、复数等
    • 数组:索引1开始
      • 结构体数组:类似C的结构体
      • 向量与矩阵:信息的基本单位,用于存储数值数据
      • 字符串:实际上是字符型向量
      • 元胞数组(cell array):每个元胞允许存储不同类型、不同维度的数据,例如变量、数值、字符串等
    • 自定义类
    • 其它,如布尔、字符、函数指针、内置类等
  • 约定:数组将泛指所有数组类型,涉及区分矩阵、元胞数组和结构体数组时不使用数组称呼

运算符

  • 加减乘幂(+-*^):矩阵的加减乘幂
  • 左除(\)、右除(/):矩阵的除法(或矩阵方程的求解)
    • X\Y返回X−1YX/Y返回XY−1
    • 即左除为左操作数的逆左乘右操作数,右除为右操作数的逆右乘左操作数
    • 单个数被视作一行一列的矩阵,一定可逆且逆等于其倒数,数的右除即符合习惯的数值除法
  • 前接点运算符(.* .^ .\ ./):对同型矩阵按元素求乘、幂、左除、右除
  • 方括号([]):创建向量或矩阵
  • 百分号(%):后接注释
  • 关系运算:
    • 大多运算符与C相同,其中不等号为~=,均为对同型矩阵按元素比较,返回布尔矩阵
    • isequal:对整体比较,返回布尔值,且认为NaN != NaN
    • isequaln:认为NaN == NaN
  • 逻辑运算:与C不同,单个&、|表示逻辑与和逻辑或
  • 按位运算:位运算都通过函数进行,函数名通常为bit + 位运算的形式

特殊变量、常量

  • 对大小写敏感
  • ans:最近计算过的表达式的结果
  • Inf:数值量,无穷
  • NaN:数值量,not a num
  • pi:数值量,π
  • i、j:数值量,$\sqrt{-1}$

条件语句

  • 条件表达式将隐式调用logical(),不需要用括号包围条件表达式
  • if、elseif、else
  • switch、case、otherwiseotherwise对应default,在匹配到唯一的case并执行对应语句块后,立刻跳出switch
  • for、while、continue、breakbreak专用于循环语句,不属于switch语句
  • end:所有if、for、while等条件语句都应匹配一个end,用于终止块
    • end在数组变量的括号内时,表示数组结尾的索引
    • 为增加可读性,函数一般也添加end表示终止

常用命令或函数

MATLAB是脚本语言,所有脚本语句都可在命令行运行,语句分为表达式和命令,常用命令如下:

脚本数据相关

  • who:返回多行一列的元胞数组,储存所有定义过的变量,单独使用时作为一条命令而不是表达式执行
  • whos:返回结构体数组,存储更多信息如长度、所占字节、类型等,单独使用时作为一条命令执行
  • format改变精度,默认formatshort,默认精度为4位小数,只能作为命令
    • format long:显示16位小数
    • format bank:四舍五入后显示2位小数
    • format short/default:改为默认精度
    • format rat(ional):返回最接近的形如两个整数除法的表达式
  • clc清屏,只能作为命令
  • clear删除所有变量,只能作为命令
  • global:声明全局变量

输入输出相关

  • disp(arr|str):显示数组或字符串
  • input("提示",format):输出提示,等待输入,返回输入
  • ;:取消打印

向量及矩阵

  • 方括号[]用于创建向量,其中若使用空格或逗号作分隔即为行向量,使用分号作分隔即为列向量,向量为一维数组

  • 仍用方括号创建矩阵,用空格或逗号区分列,用分号区分行,要求不同行向量的列数一致,矩阵为二维数组

    1
    2
    [1 2 3; 4 5 6]  1 2 3
    4 5 6
  • 特殊矩阵创建:

    • rand(m, n):创建m × n随机数矩阵,每个元素介于01之间
    • ones|zeros:单独时为一阶值为1|0的矩阵,参与运算时自动计算行列数
    • ones(m, n)|zeros(m,n):全为1|0m × n矩阵
    • eye:单独时为一阶单位矩阵,参与运算时将被视为ones
    • eye(n)n单位矩阵
    • eye(n,m)m列的标准型矩阵
    • diag(x,n=0):必须提供参数,其中x为指定的对角元素向量n为对角线编号,$\begin{cases}n>0&主对角线向上数第n条\\n=0&主对角线\\n<0&主对角线向下数第|n|条\end{cases}$,返回size(M)+n的三角型矩阵
    • diag(A,n=0):必须提供参数,其中A为指定矩阵,返回由该矩阵的第n条对角线元素构成的列向量
    • magic(n)n>2时产出魔方矩阵,即用1 ∼ n2生成所有行和、列和相等的矩阵
  • 批量创建向量或矩阵:

    • 冒号(:)表达式:
      • 创建的矩阵占有新的内存,而抽取出的矩阵相当于引用
      • Begin:End->创建从BeginEnd等距行向量,距离为1
      • Begin:dist:End->创建从BeginEnd等距行向量距离为dist
      • 数组(代表行索引的向量):抽取第一列的部分元素
      • 数组(代表行索引的向量, 代表列索引的向量):抽取由这些行列构成的子阵
      • 数组(:,j):抽取第j列所有元素,抽取行向量同理
      • 数组(:)->所有元素构成一个列向量
    • linspace(Begin, End, count=100):返回从BeginEnd的具有指定个数等距行向量
    • 其它:1_space
  • 矩阵的算术运算:

    • transpose():返回转置后的数组
    • inv():如果可逆,返回逆
    • rank():返回秩
    • det():如果可求行列式,返回行列式
    • rref():返回行最简型
    • poly():返回由特征方程det (λEA) = 0的系数构成的行向量
    • eig()
      • e=eig(A):返回由特征值构成的列向量
      • [V,D]=eig(A):返回对角为特征值的对角型矩阵D,且V满足AV=VD,即V的每列是右特征向量
      • [V,D,W]=eig(A):额外返回每列为左特征向量的满矩阵W
    • istriu()|istril():判断矩阵是否为上三角或下三角型