MATLAB基本语法

MATLAB 界面

打开 MATLAB 后,出现下面界面,这就是咱们的开发环境。当然,不同的版本可能略有差别,但我们不用管。我们这里主要用的是 命令行窗口(Command Window),其他用到再说。

输入命令

MATLAB 的命令行窗口和 Python 的命令模式很类似,你可以把 MATLAB 当作一个计算器,直接输入加减乘除,按回车后,就会出现运算结果。如:

输入

1+1

输出

ans =

     2

如果你不想看到输出结果,你可以在命令后面加分号,这样就不会显示结果。

输入

1+1;

输出 无输出,直接准备下一条输入

>>

如果你想一次运行多条命令,你可以把命令放在同一行里,用 , 隔开。也可以采用另一个做法:输入完一条命令后,按 Shift + Enter 切换到下一行,接着输入,最后按回车就可以显示所有结果。

输入

>> 1+1 %按shift+enter
2+2

输出

ans =

     2


ans =

     4

基本数据类型

MATLAB 是用于科学计算的,所以会有很多高精度的数据类型,以及一些数学上的数据类型。主要分为 数值类型、字符串、结构、单位数组和函数句柄等。下面一一介绍。

数值类型

数据格式 示例 说明
int8, int16
int32, int64
uint8……
输入
int16(2^15)
得到
ans=32767
分为有符号和无符号。占用内存比浮点少
single single(0.1) 单精度浮点类型
double 5.32 双精度浮点类型,默认数值类型

在此我们不纠结各种数值所能表示的范围,这个一搜就有。我们只注意几点:

  1. MATLAB 默认使用双精度浮点类型,这就会造成一定的问题,比如计算 1-0.2-0.2-0.2-0.2-0.2,显示的结果是 5.5511e-17,这点要注意。
  2. 整数只能与同类的整数或双精度标量值组合使用
  3. 双精度浮点数与其他类型计算,结果由其他类型决定,这点与 Python 截然相反

MATLAB 还有数学上的数值类似:复数,用 ij 作为虚部标志。

输入

(1+1j)*(1-1j)

输出

ans =

     2
函数 说明 函数 说明
complex(a,b) 构造复数 a+jb i, j 虚部标识
real(z) 返回实部 imag(z) 返回虚部
abs(z) 返回模 angle(z) 返回辐角
conj(z) 返回共轭复数    

MATLAB 还定义了两个特殊的值:无穷量 Inf 和 非数值量 NaN。无穷一般表示运算溢出,非数值量则是由 0/0,Inf/Inf 等非正常运算产生。

输入

1/0

输出

ans =

   Inf

输入

0/0

输出

ans =

   NaN

字符串

MATLAB 的字符和 Python 差不多,都是可以用 " "' ',根据字符的种类来选择编码类型 ASCII 或 UTF8,我们可以用 abs() 来查看 ASCII 码(不做演示)。

结构体

MATLAB 也有和 c 类似的结构体,创建方法如下:

输入

patient.name='John Doe';
patient.billing=127;
patient

输出

patient =

  包含以下字段的 struct:

       name: 'John Doe'
    billing: 127

或者用 struct() 函数创建:

输入

patient=struct('name', 'jogn Doe', 'billing', 127)

输出 同上

要访问结构直接输入变量名即可,比如 patient.name

要组合结构,可以直接用如下方法:

输入

patient1=struct('name', 'jogn Doe', 'billing', 127);
patient2=struct('name', 'Tim Burg', 'billing', 37);
patient=[patient1, patient2]

输出

patient =

  包含以下字段的 1×2 struct 数组:

    name
    billing

数组、字典

以后再说,现在说也没啥用。

运算

算数运算

运算符 运算 运算符 运算
A+B A 加 B    
A-B A 减 B    
A*B A 乘 B A.*B A、B 对应元素相乘
A/B A 除 B A./B A、B 对应元素相除
A^B A 的 B 次幂 A.^B A 每个元素的 B 次幂

输入

A = 2*eye(2), B=ones(2), C=A*B, D=A.^2, E=C.^A

输出(对结果进行了整理,以缩短文章长度)

A =          B =          C =          D =          E =

     2     0      1     1      2     2      4     0      4     1
     0     2      1     1      2     2      0     4      1     4

关系运算

关系运算符 关系说明 关系运算符 关系说明
< 小于 <= 小于等于
> 大于 >= 大于等于
== 等于 ~= 不等于

返回 1 为真,返回 0 为假。关系运算除了可以是两个数之间,也可以是两个矩阵之间。

输入

A=1:5, B=6-A
A==B

输出

A =
     1     2     3     4     5
B =
     5     4     3     2     1
ans =
  1×5 logical 数组
   0   0   1   0   0

逻辑运算

逻辑运算符 说明
&
|
~
xor(x, y) 异或
any(x) 有任何非 0 元素返回 1
all(x) 所以元素非 0 返回 1

运算也可以是两个矩阵之间。

输入

A=1:5, B=6-A
(A>3) | (B>3)

输出

A =
     1     2     3     4     5

B =
     5     4     3     2     1

ans =
  1×5 logical 数组
   1   1   0   1   1

运算优先级

优先级 运算 优先级 运算
1 () 6 关系运算
2 转置和乘幂 7 &
3 +, -, ~ 8 |
4 _, /, .*, ./ 9 &&
5 : 10 ||

矩阵

矩阵是 MATLAB 最重要的数据类型,甚至是 MATLAB 名字的一部分(Matrix)

创建矩阵

矩阵的创建有两种方式,一种为逐个列出元素,另一种则是借助特殊构造函数。

  1. 创建一般矩阵:用方括号[]括起元素,同行元素用逗号,或空格隔开,行与行之间用分号隔开;

输入

A = [1 2 3;4,5,6]

输出

A =
     1     2     3
     4     5     6
  1. 创建特殊矩阵
函数名 功能
ones(n) n×n 的 1 矩阵
ones(m,n,…,p) m×n×…×p 的 1 矩阵
ones(size(A)) 和 A 同样形状的 1 矩阵
zeros() 全 0 矩阵,类比 ones()
eye() 单位矩阵,类比 ones()
diag(x) 对角矩阵,对角线值为 x
rand(n) 随机 0~1 分布的 n×n 矩阵
randn(n) 均值 0,方差 1 的正态分布的 n×n 矩阵
magic(n) n×n 的矩阵,每一行每一列的元素之和相等

输入

eye(2,3)

输出

ans =
     1     0     0
     0     1     0

矩阵索引

有两种索引方法,一种是常见的双索引,就和 Python 一样;一种是单索引,就是把所有元素按列排成一个数组,然后选取顺数第几个。注意,MATLAB 的索引是从 1 开始的。

输入

M=magic(3), A=M(2,3), B=M(8)

输出

M =

     8     1     6
     3     5     7
     4     9     2

A =
     7

B =
     7

还可以索引多个元素:

索引表达式 说明
A(:, j) 第 j 列列向量
A(i, :) 第 i 行行向量
A(:, j:k) 第 j 到 k 列构成的子阵
A(i:k, :) 第 i 到 k 行构成的子阵
A(:) 将 A 每列合并成一个合并成一个列向量
A(j:k) 选取第 j 到 k 个元素组成行向量
A(i:j:k) 选取 i, i+j, i+2j…组成行向量
A([j1, j2…]) 选取第 j1, j2…个元素组成行向量
A([i1, i2, …], [j1, j2…]) 返回第 i1, i2…行和第 j1, j2…列的元素

输入

M=magic(5), A=M(2:3, 3:4), B=M([7:8 16:18])

输出

M =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9


A =
     7    14
    13    20


B =
     5     6     8    14    20

更多关于矩阵的内容可以查看相关章节。