[关闭]
@devilogic 2020-05-07T12:11:46.000000Z 字数 3317 阅读 601

MyMath数学库(三) - 矩阵操作

我的无人车之路 mymath


矩阵操作使用了著名的C++矩阵库Eigen在其基础之上封装了模板函数,主要是提供两个功能,一个是求矩阵的伪逆矩阵,一个是计算状态空间下连续形式到离散形式的线性变换。源文件在matrix_operations.hpp中,直接包含即可使用,但是在编译程序时,要使用-I参数包含Eigen的路径。
虽然此库只涉及了两个函数,但是确蕴含了很丰富的线性代数与优化知识,在介绍完模块的基本使用后,后边小节补充了一些关于矩阵的逆以及双线性变换的知识,不是非常系统。其中涉及的几个知识点都有讨论。

3.1 函数表

函数名 说明
pseudo_inverse(方阵) 求一方阵的Moore-Penrose伪逆。
pseudo_inverse(任意矩阵) 求一任意矩阵的Moore-Penrose伪逆。
continuous_to_discrete(类型模板) 计算状态空间表示形式的连续形式到离散形式的双线性变换。
continuous_to_discrete(以double类型基础类型的矩阵Matrixd为参数) 计算状态空间表示形式的连续形式到离散形式的双线性变换。

3.2 使用例子

3.3 Eigen开源库

30adcbef76094b36c3fb2f28a6cc7cd98c109d8d.jpg-26.9kB
Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。Eigen是一个开源库。这里是官网地址
不用编译直接包含即可使用,这里就不做太多叙述了。强力推荐。

3.4 行列式求解

3.5 矩阵的逆

若存在一个矩阵使得,则称矩阵为非奇异的或可逆的。矩阵称为的乘法逆元。其中。我们将非奇异矩阵的乘法逆元简称为的逆元,并记作
一个矩阵有逆,首先条件是一个方阵,其次每个向量都是线性无关的。这里列出线性方程组的一些情况。

  1. 个方程,个未知数,具备有唯一解。(非奇异方阵)
  2. 个方程, 个未知数,方程有无数解。(亚定方程组)
  3. 个方程, 个未知数,方程可能有唯一解(个线性相关的方程),也可能无解,只能求最小二乘解。(超定方程组)

3.5.1 非奇异方阵的求逆算法

设非奇异方阵,由于与单位矩阵是行等价的。所以可以通过一系列的线性初等变换得到


由于是可逆的,其乘积也是可逆的,则
在具体实施方面可以通过的增广矩阵求行最简形得到的逆矩阵。矩阵的行初等变换可以通过高斯消元算法实现。具体算法定义如下:

【算法】高斯消元法

在算法进行之前首先定义两个辅助算法,一个是对矩阵进行排序算法,其次检查矩阵是否为行阶最简型号。

矩阵排序算法

假设函数名为matrix_sort(M)。采用什么样的排序算法都可以,当两个向量比较时自定义算法,从第列到第列的元素,一个一个元素进行检测直到遇到一个非元素则计数完毕,计数越多则表示当前向量越大,全向量最大排在矩阵的最后一列。

检查是否行阶段梯形矩阵

假设函数名为is_row_echelon_form(M)在调用此函数之前,首先使用matrix_sort对矩阵进行排序。因为有排序算法的原因,所以从最后一行开始检测,如果是全行则检测它的上一行,如果不是全行则检测当前行的倒数第二列是否是,如果是则说明是行最简型的

行最简行型算法

目标矩阵为一个的矩阵

  1. 使用matrix_sort(M)函数对目标矩阵进行排序。目的是将首变量为非的行排在前面。
  2. 使用is_row_echelon_form(M)判断当前矩阵是否是一个行阶段梯形矩阵,如果是则退出,不是则继续流程3。
  3. 从第行开始,选取作为首变量。排序算法保证了这里的首变量是此行的第个元素。
  4. 遍历其余的行,并且选取作为要操作的元素,检测是否为
  5. 如果则跳过,并跳过剩下的行。因为排序的原因,在它之后的所有行数对应列的元素都应该为
  6. 如果不为,则使用乘以第行的结果减去第行的结果作为新的第行。
  7. 这里由于数值计算的原因,可能有些向量元素只是趋近于,将这些趋近于的值都当作来处理。
  8. 回到流程1。

3.6 矩阵的值域与零空间

3.7 矩阵的正交空间

3.8 矩阵的最小二乘解

一个超定线性方程组的解一般可以化为最小二乘问题。给定一个的方程组,其中,一般我们不能期望找到一个向量,使得等于。事实上,可以寻找一个向量,使得最接近
给定一个方程组,其中为一个()矩阵,并且,则对每一,可以构造一个残差。

其中间的距离为
我们希望寻找一个向量,使得是最小的。最小化等价于最小化。达到最小值的向量称为方程组的最小二乘解。
为方程组的最小二乘解,且,则就是的列空间中和最接近的向量。向量称为上个的投影。
其中必为正交补)中的元素。因此为最小二乘问题的解的充要条件是。我们知道的零域。这也可说明一个向量是方程组的最小二乘解,当且仅当。残差属于的零域。

因此,为求解最小二乘问题,我们必须求解
此方程表示的线性方程组成为正规方程组。一般地,正规方程组可能存在多个解;然而,若均为解,则由于中的投影是唯一的,故
有唯一解。其解

3.9 矩阵的内积空间

3.10 矩阵的特征值与特征向量

考虑方程。这个方程出现在很多线性代数的应用问题中。如果方程有非零解,则称为的特征值,且称为属于的特征向量。一般地,我们可以将特征值看成与线性变换相关联的自然频率。若为一矩阵,则可将看成一个上的线性算子。
很多应用问题都涉及将一个线性变换重复作用到一个向量上。求解这类问题的关键是针对算子选择一个在某种意义下很自然的坐标系或基,并使得包含该算子的计算得以简化。对应于这一组新的基向量(特征向量),我们关联一个缩放因子(特征值)表示该算子的自然频率。
我们设一的矩阵, ,我们反复应用上。,最后这个稳定下来保持不变,那么这个向量成为这个过程的稳态向量。线性算子只是将向量缩小或扩大了倍而已,所以将这个倍数提取出来为,向量

3.11 矩阵的特征值分解

3.12 连续到离散的变换

【算法】双线性变换

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注