学习一门技术最好的方式就是阅读官方文档,你可以查看 MATLAB官方文档
MATLAB基本语法
变量
- MATLAB中的变量不需要声明。
- 使用
=
为变量赋值。
变量名
- 与大多数编程语言相同,MATLAB中的变量名是大小写敏感的。
- 变量名只能由[
0~9
,a~z
,A~Z
,_
]组成,且变量名不能以数字开头。
保留变量不适合做变量名
MATLAB中有一些变量有其具体意义,不适合用作变量名。
变量 | 意义 |
---|---|
ans |
上一句的运算结果 |
i 和j |
复数单位 |
Inf |
无穷大 |
eps |
浮点相对精度,即1.0到下一个浮点数之间的距离(值为2.2204e-16) |
NaN |
非数字 |
pi |
圆周率 |
除此以外,使用iskeyword
函数可以查看MATLAB语言中的所有关键字,这些关键字也不允许被用作变量名。
变量名不应当覆盖内置函数名
在MATLAB中,变量的调用优先级高于函数,因此变量名不应该覆盖内置函数。
cos = 'This string.';
cos(8) % 对字符串进行索引取值,得到'r'
若某函数被变量名所覆盖,则调用clear <变量名>
可以取消绑定在该函数名上的变量名。
clear cos % 清除绑定在cos上的变量
cos(8) % 调用内置余弦函数运算得到-0.1455
clear
是一个比较危险的命令,因为该命令后若不加参数,则表示清除当前工作区内的所有变量。
变量类型
MATLAB中的变量类型有:logical
、char
、numeric
、cell
、struct
以及由它们组成的数组或矩阵。
数字型变量的显示格式
我们直接定义的数字型变量,默认是以double
形式存储的。
我们可以通过format <显示格式>
改变数字型变量的显示格式。
显示格式 | 说明 | 例子 |
---|---|---|
short |
短定点格式。显示小数点后4位 | 3.1416 |
long |
长定点格式。对double 类型变量显示小数点后15位,对float 类型变量显示小数点后7位 |
3.141592653589793 |
shortE |
短科学计数法,显示小数点后4位,并带有科学计数法标记 | 3.1416e+00 |
longE |
长科学计数法。对double 类型变量显示小数点后15位,对float 类型变量显示小数点后7位,并带有科学计数法标记 |
3.141592653589793e+00 |
bank |
银行格式。显示小数点后2位 | 3.14 |
hex |
十六进制格式 | 400921fb54442d18 |
rat |
比例格式 | 355/113 |
MATLAB命令行
-
使用行尾
;
抑制输出:在一行命令后使用;
抑制输出,否则运算结果将被显示在终端上。 -
其他实用的命令:
命令 作用 clc
清除终端的输出 clear
清除当前工作区内所有变量 who
以简略格式显示工作区内所有变量 whos
以复杂格式显示工作区内所有变量
使用MATLAB进行数字运算
我们可以使用MATLAB计算数学表达式。
- MATLAB常见的数学运算符有:
+
、-
、*
、/
、^
。 - 数学表达式被计算后,其值被存入变量
ans
。 - 运算的优先级规则:
- 同等优先级下从左向右运算。
- 优先级顺序(从高到低):
- 括号
()
- 乘方
^
- 乘除法
*
、/
- 加减法
+
、-
- 括号
下面例子演示了数学表达式求值:
待求数学表达式 | MATLAB命令 |
---|---|
$( \cos\left(\sqrt{\frac{{\left(1+2+3+4\right)}^3}{5}}\right) )$ | cos(sqrt((1+2+3+4)^3/5)) |
$(\sin\left(\sqrt{\pi}\right) + \ln\left(\tan\left(1\right)\right))$ | sin(sqrt(pi))+log(tan(1)) |
$( 2^{3.5 \times 1.7} )$ | 2^(3.5*1.7) |
$(e^{\sin(10)} )$ | exp(sin(10)) |
MATLAB内置的数学函数
- MATLAB内置的算数运算函数
- 基本运算:
- 加:
+
,sum
,cumsum
- 减:
-
,diff
- 乘:
.*
,*
,prod
,cumprod
- 除:
./
,.\
,/
,\
- 乘方:
.^
,^
- 加:
- 取模运算:
mod
,rem
,idivide
,ceil
,fix
,floor
,round
- 基本运算:
- MATLAB内置的三角运算函数
- 正弦:
sin
,sind
,asin
,asind
,sinh
,asinh
- 余弦:
cos
,cosd
,acos
,acosd
,cosh
,acosh
- 正切:
tan
,tand
,atan
,atand
,atan2
,atan2d
,tanh
,atanh
- 余割:
csc
,cscd
,acsc
,acscd
,csch
,acsch
- 正割:
sec
,secd
,asec
,asecd
,sech
,asech
- 余切:
cot
,cotd
,acot
,acotd
,coth
,acoth
- 斜边:
hypot
- 转换:
deg2rad
,rad2deg
,cart2pol
,cart2sph
,pol2cart
,sph2cart
- 正弦:
- MATLAB内置的指数对数函数:
exp
,expm1
,log
,log10
,log1p
,log2
,nextpow2
,nthroot
,pow2
,reallog
,realpow
,realsqrt
,sqrt
- MATLAB内置的复函数:
abs
,angle
,complex
,conj
,cplxpair
,i
,imag
,isreal
,j
,real
,sign
,unwrap
使用MATLAB进行矩阵运算
定义矩阵
向终端输入矩阵
在MATLAB中,可以使用[]
将待输入的矩阵内容括起来,使用空格或逗号分隔行内变量,并使用分号分隔每一行。
下面是一些例子演示矩阵的定义方式和对应的结果:
MATLAB命令 | 得到的矩阵 |
---|---|
A = [1 2 3 4] |
$\begin{bmatrix} 1 & 2 & 3 & 4 \end{bmatrix}$ |
A = [1; 2; 3; 4] |
$\begin{bmatrix} 1 \ 2 \ 3 \ 4 \end{bmatrix}$ |
A = [1 21 6; 5 17 9; 31 2 7] |
$\begin{bmatrix} 1 & 21 & 6 \ 5 & 17 & 9 \ 31 & 2 & 7 \end{bmatrix}$ |
使用冒号运算符创建向量
使用冒号运算符:
可以创建一个向量,其语法如下:
冒号表达式 | 得到的结果 |
---|---|
j:k |
$\begin{bmatrix} j & j+1 & j+2 & ... & j+m \end{bmatrix}$ |
j:i:k |
$\begin{bmatrix} j & j+i & j+2i & ... & j+m*i \end{bmatrix}$ |
下面是一些例子演示冒号运算符的使用:
MATLAB语句 | 得到的结果 |
---|---|
1:5 |
$\begin{bmatrix} 1 & 2 & 3 & 4 & 5 \end{bmatrix}$ |
1:2:5 |
$\begin{bmatrix} 1 & 3 & 5 \end{bmatrix}$ |
[1:5; 2:3:15; -2:0.5:0] |
$\begin{bmatrix} 1 & 2 & 3 & 4 & 5 \ 2 & 5 & 8 & 11 & 14 \ -2 & -1.5 & -1 & -0.5 & 0 \end{bmatrix}$ |
'a':2:'z' |
'acegikmoqsuwy' |
定义特殊矩阵
以下命令可以定义一些特殊矩阵:
命令 | 得到的结果 |
---|---|
eye(n) |
一个 n × n 的单位矩阵 |
zeros(n1, n2) |
一个 n1 × n2 的全零矩阵 |
ones(n1, n2) |
一个 n1 × n2 的全一矩阵 |
diag(vector) |
以向量 vector 中的元素作为对角线创建一个对角矩阵,其余元素为零 |
矩阵的索引
-
MATLAB中的矩阵是以列主序存储的,索引下标从1开始。
-
矩阵有两种索引方式:按一维索引和按二维索引。对于一个一般的矩阵,其索引顺序如下:
$$ \begin{bmatrix} 1 & 4 & 7 \ 2 & 5 & 8 \ 3 & 6 & 9 \end{bmatrix} $$
-
矩阵的索引可以使用冒号
:
,表示选取所有行或所有列。 -
矩阵的索引可以是一个或两个向量,表示选中向量内的所有行或所有列。
下面是一些例子演示矩阵索引的规则:
原矩阵 | 索引 | 得到的结果 |
---|---|---|
A = [1 2 3 4 5 6 7 8 9] |
A(8) |
8 |
A = [1 2 3 4 5 6 7 8 9] |
A([1 3 5]) |
$\begin{bmatrix} 1 & 3 & 5 \end{bmatrix}$ |
A = [1 2 3 4 5 6 7 8 9] |
A([1 2; 3 4]) |
$\begin{bmatrix} 1 & 2 \ 5 & 6 \end{bmatrix}$ |
A = [1 2 3; 4 5 6; 7 8 9] |
A(3,2) |
8 |
A = [1 2 3; 4 5 6; 7 8 9] |
A([1,2], :) |
$\begin{bmatrix} 1 & 2 & 3 \ 4 & 5 & 6 \end{bmatrix}$ |
A = [1 2 3; 4 5 6; 7 8 9] |
A([1 3], [1 2]) |
$\begin{bmatrix} 1 & 2 \ 7 & 8 \end{bmatrix}$ |
矩阵的操作
操作矩阵的运算符
以下是一些操作矩阵的常用运算符:
运算符 | 操作 | 形式 | 例子 |
---|---|---|---|
+ |
矩阵与向量相加 | A+b |
$[6\ 3] + 2 = [8\ 5]$ |
- |
矩阵与向量相减 | A-b |
$[6\ 3] - 2 = [4\ 1]$ |
+ |
矩阵与矩阵对应位置相加 | A+B |
$[6\ 3] + [4\ 8] = [10\ 11]$ |
- |
矩阵与矩阵对应位置相减 | A-B |
$[6\ 3] - [4\ 8] = [2\ -5]$ |
* |
矩阵与矩阵相乘 | A*B |
$[6\ 3] \cdot [4\ 8]' = 48$ |
.* |
矩阵与矩阵对应位置相乘 | A.*B |
$[6\ 3] \cdot [4\ 8] = [24\ 24]$ |
/ |
矩阵与矩阵右除(等价于A*inv(B) ) |
A/B |
$[6\ 3] / [4\ 8] = 0.6$ |
\ |
矩阵与矩阵左除(等价于inv(A)*B ) |
A\B |
$[6\ 3] \backslash [4\ 8] = [0.06667\ 1.3333;\ 0\ 0]$ |
./ |
矩阵与矩阵对应位置右除 | A./B |
$[6\ 3] ./ [4\ 8] = [1.5\ 0.375]$ |
.\ |
矩阵与矩阵对应位置左除 | A.\B |
$[6\ 3] .\ [4\ 8] = [0.6667\ 2.6667]$ |
^ |
矩阵与向量乘方 | A^b |
$[1\ 2;\ 3\ 4]^3 = [37\ 54;\ 81\ 118]$ |
.^ |
矩阵与矩阵对应位置乘方 | A.^B |
$[1\ 2;\ 3\ 4].^[1\ 2;\ 3\ 4] = [1\ 4;\ 27\ 256]$ |
操作矩阵的函数
下面是一些操作矩阵的常用函数:
max(A, [], dim)
: 获取矩阵 A 的 dim 维度上的最大值;min(A, [], dim)
: 获取矩阵 A 的 dim 维度上的最小值;sum(A, dim)
: 获取矩阵 A 的 dim 维度上的和;mean(A, dim)
: 获取矩阵 A 的 dim 维度上的平均值;sort(A, dim, direction)
: 根据 dim 维度对矩阵 A 进行排序,direction 表示排序的顺序;sortrows(A, column)
: 对矩阵 A 根据每行的第 column 个元素进行升序排序;size(A, dim)
: 获取矩阵 A 的 dim 维度上的大小;find(A, n)
: 获取矩阵 A 前 n 个非零元素的索引。
对于上述函数,除第一个参数外,其他参数都是可选的。