3.5 线性代数相关的函数
本小节我们将介绍 MATLAB 在线性代数中的一些常用函数, 以下内容大多仅涉及到初等线性代数的知识,大家可以查阅线性代数的书籍复习相关概念。
函数名
功能
det
计算方阵的行列式(determinant)
rank
计算矩阵的秩
trace
计算方阵的迹(对角线元素的和)
rref
将矩阵变换成行最简型矩阵(Reduced row echelon form 简化行阶梯形)
inv
计算方阵的逆矩阵(inverse matrix), inv(X)的结果和 X^(-1)相同
transpose
返回转置矩阵(有复数的话转置后虚部符号保持不变),transpose(A)和 A.'的结果相同
triu
返回矩阵的上三角部分,triangle(三角形) + upper(高、 上方)
tril
返回矩阵的下三角部分,triangle(三角形) + lower(低、下方)
eig
计算方阵的特征值和特征向量(eigenvalue and eigenvector)
norm
计算向量或者矩阵的范数(这个概念大家可能没接触过,它在机器学习中用的较多)

1.det,rank,trace,rref,inv,transpose函数

最前面的六个函数都很简单,我们直接来看例子:
notion image

2.triu 函数和 tril 函数(可用于对称矩阵的构造)

triu 函数和 tril 函数用法相同,可分别用来返回矩阵的上三角部分和下三角部分。
  •  triu(A,k)返回 A 的第 k 条对角线上以及该对角线上方的元素,其他位置元素用 0 填充, k 等于 0 时可以简写成 triu(A)。
  • tril(A,k)返回 A 的第 k 条对角线上以及该对角线下方的元素,其他位置元素用 0 填充, k 等于 0 时可以简写成 tril(A)。
默认值 k = 0 是主对角线, k > 0 位于主对角线上方,而 k < 0 位于主对角线下方。
notion image
notion image
下面我们用这两个函数来做一个有趣的练习题:生成一个 n 阶(例如 n=4)的对称矩阵, 里面的每个元素都是位于区间[0, 9]中的随机整数。
notion image
这几行代码综合性非常强, 核心的思路就是将这个对称矩阵分成三个部分: 首先随机生成 对称矩阵的上半部分(不包括主对角线),这是一个上三角矩阵; 然后将其转置来确保矩阵的 元素是对称的;最后使用 diag  函数生成一个随机的对角矩阵。将上半部分、下半部分以及对 角矩阵相加即可得到这个对称矩阵。
具体代码的解释如下: 对于一个 n 阶的对称矩阵, 它的上三角部分(不包括主对角线) 有 n*(n- 1)/2 个元素,上方代码中将其赋值给 num;矩阵 A 初始化为一个 n 阶全为 0 的矩阵;true(n) 创建了一个 n 阶的逻辑矩阵,其中所有元素都为逻辑值 1;triu(true(n),1)返回了一个不包括主对角线的上三角的逻辑矩阵, 我们用它对 A 矩阵进行逻辑索引;  randi([0,9],num,1)生成了一个 有 num 个元素的向量,其中每个元素都是位于区间[0, 9]中的随机整数; A(triu(true(n),1))选取 了矩阵 A 的上三角部分(不包括主对角线),然后将其赋值为随机生成的整数; A'是矩阵 A 的 转置,由于我们已经填充了 A  的上三角部分,将它转置我们可以确保下三角部分与上三角部分是对称的; diag(randi([0,9],n,1))生成了一个主对角线上的元素为区间[0, 9]中的随机整数, 而 其它地方都为 0 的 n 阶矩阵;将这三个矩阵相加,即可得到最终的对称矩阵。
以后我们学了循环语句后, 还可以利用循环语句生成, 虽然循环语句更直观且代码易于编 写,但直接基于矩阵操作在 MATLAB 中通常更高效,尤其是对于大型矩阵。

3.eig 函数

eig 函数可用来计算方阵的特征值和特征向量,它有两种最基础的用法:
  • e = eig(A) 返回一个列向量, e 中包含方阵 A 的所有特征值。
  •  [V,D] = eig(A) 返回特征向量构成的矩阵 V 和特征值构成的对角矩阵 D,V 中的每一 列就是 D 中对应特征值的特征向量。
举个最简单的例子:学过线性代数的同学应该会求矩阵A =  2(1)    1(2)] 的特征值和特征向量, 这是手算的结果: A的两个特征值分别为− 1和3 ,其中− 1对应的特征向量为k1  1] ,3对应的
特征向量为k2   1(1)] ,这里的k1 和k2 均为非零常数。
我们用 MATLAB 来验算下:
notion image
有同学会有疑惑, 为什么 MATLAB 算出来的特征向量这么奇怪?特征值-1 对应的特征向 量是[ -0.7071; 0.7071],特征值 3 对应的特征向量是[0.7071; 0.7071]。这是因为特征值对应的特 征向量不是唯一的, 前面可以乘以任意的非零常数。在 MATLAB 中,eig 函数会对特征向量进 行缩放,使得各特征值对应的特征向量的模长均为 1。
再来看个例子:
notion image
练习题:请你将上方 A 矩阵的特征值从大到小降序排列,对应的特征向量的顺序也要跟 着特征值的顺序改变。
notion image
另外, MATLAB 计算得到的特征值或特征向量可能会有一定的误差, 这是 MATLAB 的浮 点数运算误差导致的,大家以后遇到了有印象即可。

4.norm 函数

下面我们来介绍最后一个函数:norm 函数,它可以用来计算向量或者矩阵的范数。范数这个概念大家可能没听过,它在机器学习中用的较多。
我们这里只介绍向量的范数,假设向量,常用的向量范数有下面三种:
notion image
在 MATLAB 中的调用方法分别为: norm(x,1)、norm(x,2)和 norm(x,p)。事实上, 1-范数和 2-范数都属于 p-范数的特例, MATLAB 中 p 默认取 2,即 norm(x)是 norm(x,2)的简写形式, 表 示计算 2-范数。
我们来看几个例子:
notion image
事实上,如果你不会 norm 函数,也可以用我们之前的方法计算向量的范数: p-范数等价 于: sum(abs(x).^p) ^ (1/p),这里的 1/p 要加括号。特别地, 将 p 分别取 1 和 2 即可得到 1-范数 和 2-范数。

5.拓展: 范数和距离的联系

1)欧式距离(Euclidean Distance

欧式距离是最常见的两点之间距离定义的方法,又被称为欧几里得度量, 它定义于欧几里 得空间中。点和点之间的欧氏距离为:
notion image
notion image
例如x(1, 2)和y(4, 6)直接计算欧氏距离结果 5,将它们视为向量: x = [1, 2] ,y = [4, 6], 那么作差后x − y  =  [ − 3, −4],向量[ − 3, −4]对应的 2-范数也为 5,和欧氏距离的结果相同。

2)曼哈顿距离(Manhattan Distance

假设城市所有的道路是平行且垂直的,如下图所示,你需要驾车从 X 点到达 Y 点,那么 你的驾驶距离应该如何计算?
notion image
你能直接计算 X 和 Y 两点之间的欧式距离作为你的驾驶距离吗?当然不行,除非你乘坐 的飞机。这时候,我们可以使用曼哈顿距离来表示实际的驾驶距离。
和点之间的曼哈顿距离定义为:
notion image
notion image
例如x(1, 2)和y(4, 6)直接计算曼哈顿距离结果 7,将它们视为向量作差后得到[ − 3, −4],向 量[ − 3, −4]对应的 1-范数也为 7,和曼哈顿距离的结果相同。

3)闵可夫斯基距离 (Minkowski Distance)

闵可夫斯基距离(简称为闵氏距离) 不是一种特定的距离, 而是一组距离的定义。 x和y之 间的闵氏距离为:
notion image
其中p是一个正数,当p = 1时就是曼哈顿距离,当p = 2时,就是欧氏距离。
notion image

Loading...
公告
🎉大学生科技协会(2024)网站试运行🎉
-- 感谢您的支持 --- 科协获:
小平科技创新团队 (青少年科技创新领域国家级最高荣誉,全校唯一)
全国高校百强社团 中国大学生ican物联网创新创业实践教育基地 校十佳社团 “一院一品”智能空间 科技竞赛优秀组织单位
阅读科协简介了解更多吧!