MATLAB: 基本语法
MATLAB基本语法及矩阵算术操作
基本语法
数据类型
- 创建变量无需显式声明数据类型,会自动隐式推断
- 数据类型分为:
- 数值:整型、长整型、单双精度、复数等
- 数组:索引从
1开始- 结构体数组:类似
C的结构体 - 向量与矩阵:信息的基本单位,用于存储数值数据
- 字符串:实际上是字符型向量
- 元胞数组(
cell array):每个元胞允许存储不同类型、不同维度的数据,例如变量、数值、字符串等
- 结构体数组:类似
- 自定义类
- 其它,如布尔、字符、函数指针、内置类等
- 约定:数组将泛指所有数组类型,涉及区分矩阵、元胞数组和结构体数组时不使用数组称呼
运算符
- 加减乘幂(
+-*^):矩阵的加减乘幂 - 左除(
\)、右除(/):矩阵的除法(或矩阵方程的求解)X\Y返回X−1Y,X/Y返回XY−1- 即左除为左操作数的逆左乘右操作数,右除为右操作数的逆右乘左操作数
- 单个数被视作一行一列的矩阵,一定可逆且逆等于其倒数,数的右除即符合习惯的数值除法
- 前接点运算符(
.* .^ .\ ./):对同型矩阵按元素求乘、幂、左除、右除 - 方括号(
[]):创建向量或矩阵 - 百分号(
%):后接注释 - 关系运算:
- 大多运算符与
C相同,其中不等号为~=,均为对同型矩阵按元素比较,返回布尔矩阵 isequal:对整体比较,返回布尔值,且认为NaN != NaNisequaln:认为NaN == NaN
- 大多运算符与
- 逻辑运算:与
C不同,单个&、|表示逻辑与和逻辑或 - 按位运算:位运算都通过函数进行,函数名通常为
bit + 位运算的形式
特殊变量、常量
- 对大小写敏感
ans:最近计算过的表达式的结果Inf:数值量,无穷NaN:数值量,not a numpi:数值量,πi、j:数值量,$\sqrt{-1}$
条件语句
- 条件表达式将隐式调用
logical(),不需要用括号包围条件表达式 if、elseif、elseswitch、case、otherwise:otherwise对应default,在匹配到唯一的case并执行对应语句块后,立刻跳出switch块for、while、continue、break:break专用于循环语句,不属于switch语句end:所有if、for、while等条件语句都应匹配一个end,用于终止块end在数组变量的括号内时,表示数组结尾的索引- 为增加可读性,函数一般也添加
end表示终止
常用命令或函数
MATLAB是脚本语言,所有脚本语句都可在命令行运行,语句分为表达式和命令,常用命令如下:
脚本数据相关
who:返回多行一列的元胞数组,储存所有定义过的变量,单独使用时作为一条命令而不是表达式执行whos:返回结构体数组,存储更多信息如长度、所占字节、类型等,单独使用时作为一条命令执行format:改变精度,默认format为short,默认精度为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随机数矩阵,每个元素介于0和1之间ones|zeros:单独时为一阶值为1|0的矩阵,参与运算时自动计算行列数ones(m, n)|zeros(m,n):全为1|0的m × n矩阵eye:单独时为一阶单位矩阵,参与运算时将被视为oneseye(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->创建从Begin到End的等距行向量,距离为1Begin:dist:End->创建从Begin到End的等距行向量,距离为dist数组(代表行索引的向量):抽取第一列的部分元素数组(代表行索引的向量, 代表列索引的向量):抽取由这些行列构成的子阵数组(:,j):抽取第j列所有元素,抽取行向量同理数组(:)->用所有元素构成一个列向量
linspace(Begin, End, count=100):返回从Begin到End的具有指定个数的等距行向量- 其它:

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