概述
本次内容涉及 MATLAB 中的矩阵,这是我们使用 MATLAB 处理数据的基本元素,学习本节的内容可以掌握基本的如何处理矩阵。
本次的内容几乎都可以凭借线性代数的了解来学习,代码块中的代码可以 复制粘贴到 MATLAB 中运行,或者将一个代码块复制到一个新文件选择单步运行(step run),在该命令下每次只执行一个语句,逐个观察输出即可。部分函数的用法很多不能穷举,举出来的函数一般来说足够使用,读者在使用之前也可以先调用 help 命令查看该函数的其他用法。
创建矩阵
在上一节中,我们认识了 MATLAB 的基本操作,其中一种定义变量的方法为直接赋值如:a=1,事实上,这种操作的本质上就是定义了一个最简单的 1×1 的矩阵(这一现象可以在 workspace 中观察到)。
一个矩阵的基本形式可以表达为以下形式
1 | % 两种形式是完全等价的,但是更推荐使用第一种形式。 |
其中,上述矩阵为行数为 2,列数为 4 的矩阵,一个 MATLAB 矩阵遵循以下原则;
- 矩阵的元素以方括号包含;
- 同一行不同列以逗号分隔;
- 同一列不同行以分号分隔;
- 每行(或者每列)必须有相同数量的元素;
- 矩阵元素可以是数值(不区分整数,浮点数和复数)或者字符串之一。
1.直接创建
一般来说可以使用直接赋值的思路直接创建,如下所示:
1 | % 创建一维行向量(行矩阵); |
事实上,这种直接赋值的方法实在过于费时费力,我们通常还会使用另一种方法:用冒号运算符创建等差数列(a:b:c)
1 | 1:2:10 % (a:b:c)中 a 为等差数列首项的值,b 为公差,c 为区间限,数列储存为行向量; |
2.调用函数
MATLAB 的库函数中含有很多快速创建矩阵的函数,常见的有:ones,zeros,eye,rand,magic,true,false,这里逐项给出说明:
ones 函数
1 | ones(n); % 创建 n×n 的方阵,每个元素的值都为 1; |
zeros 函数
1 | zeros(n); % 创建 n×n 的方阵,每个元素的值都为 0; |
eye 函数
1 | eye(n); % 创建 n×n 的单位阵,即正对角线上的每个元素的值都为 1; |
rand 函数
1 | rand(n); % 创建 n×n 的方阵,元素的值服从区间 0-1 的均匀随机分布; |
randn 函数
1 | % randn函数只是 rand 的变体,元素服从标准正态分布。 |
magic 函数
1 | magic(n); % 创建 n×n 的方阵,该方阵满足每行每列对角线和相等; |
true 函数
1 | true(n); % 创建 n×n 的逻辑方阵,该方阵所有元素都是 true; |
false 函数
1 | false(n); % 创建 n×n 的逻辑方阵,该方阵所有元素都是 true; |
这里还有另一类生成函数,能快速生成一维矩阵:linspace,logspace 等。
linspace 函数
1 | linspace(x1,x2); % 直接将区间 x1-x2 划分为 100 个线性等分的点,返回间隔点向量; |
logspace 函数
1 | logspace(x1,x2); % 直接将区间 x1-x2 划分为 100 个对数间隔的点,返回间隔点向量; |
运算符
比较走运的是,MATLAB 中运算符的优先级和一般的数理知识并不冲突,运算符和变量不要求强制的空格,「我加空格纯粹为了美观,当然取负号时最好不要加空格」,因此只需要认识 MATLAB 的一些运算符,就可以比较容易的上手矩阵运算。矩阵的运算这一部分的内容与线性代数的内容一致,已经有线性代数基础的应该容易理解,没有线性代数的基础的同学建议单步执行以下命令,仔细观察结果的变化,熟悉这些运算符的作用。
运算符操作总体上分为两类:数组运算符和矩阵运算符。
1.数组运算符
数组运算符可以理解为针对矩阵元素的运算,与矩阵本身的性质无关,也是逐个的运算。
1 | %% 数组运算符 |
2.矩阵运算符
1 | %% 矩阵运算符 |
小结
本次的内容几乎都只要复制粘贴到 MATLAB 中执行即可,几乎只需要观察即可。生成函数很多不需要死记,函数名几乎可以直译,开始用几次就可以无压力记住(即使记错了某个字母,MATLAB 也会提示正确的名字)。