病态矩阵与条件数

1. 病态系统

现在有线性系统: Ax = b, 解方程

很容易得到解为: x1 = -100, x2 = -200. 如果在样本采集时存在一个微小的误差,比如,将 A 矩阵的系数 400 改变成 401:

则得到一个截然不同的解: x1 = 40000, x2 = 79800.

当解集 x 对 A 和 b 的系数高度敏感,那么这样的方程组就是病态的 (ill-conditioned).

2. 条件数

那么,如何评价一个方程组是病态还是非病态的呢?在此之前,需要了解矩阵和向量的 norm, 这里具体是计算很简单的 infinity norm(无穷范数), 即找行元素绝对值之和最大的,举个例子:

infinity norm 具有三角性质:||x+y|| <= ||x|| + ||y||. 理解了这些概念,下面讨论一下衡量方程组病态程度的条件数,首先假设向量 b 受到扰动,导致解集 x 产生偏差:

即有:

同时,由于

综合上面两个不等式:

即得到最终的关系:

如果是矩阵 A 产生误差,同样可以得到:

其中, 条件数定义为:

一般来说,方程组解集的精度大概是 个十进制的位的误差。 比如,IEEE 标准表示的双精度浮点数的有效位是 16 位,如果条件数是 1e+10, 那么得到的结果中只有 6 位是精确的。所以,只有当方程组是良态时,残差 R = Ax - b 才能准确指示解的精度。

3. 病态的由来

自己的看法:

线性系统 Ax = b 为什么会病态?归根到底是由于 A 矩阵列向量线性相关性过大,表示的特征太过于相似以至于容易混淆所产生的。举个例子, 现有一个两个十分相似的列向量组成的矩阵 A:

在二维空间上,这两个列向量夹角非常小。假设第一次检测得到数据 b = [1000, 0]^T, 这个点正好在第一个列向量所在的直线上,解集是 [1, 0]^T。现在再次检测,由于有轻微的误差,得到的检测数据是 b = [1000, 0.001], 这个点正好在第二个列向量所在的直线上,解集是 [0, 1]^T。两次求得到了差别迥异的的解集。

4. 与特征值和 SVD 的关系

  1. 特征值

假设 A 的两个单位特征向量是 x1, x2, 根据特征向量的性质:

上述矩阵 A 的特征值和特征向量分别为:

对于平面上的某一个向量 b,可以分解为两个特征向量的线性组合:

把上式带入,

如果  远远大于 , 当 b 点在 x1 方向发生移动, m 值改变, 解集 x 变化不明显, 反之, 如果在 x2 方向移动, n 值改变,解集 x 变化非常大 !可以看到,特征值对解集起到了一个 scaling 的作用。反过来说,如果一个特征值比其它特征值在数量级上小很多,x在对应特征向量 (x2) 方向上很大的移动才能产生b微小的变化.

        2.  SVD

SVD 分解:

联系上次学到的 SVD 知识,将 A 分解成三个矩阵的乘积,中间的对角线矩阵也起到了 scaling 的作用。我们按照正向思维来考虑这个问题,现在来了一个解集 x 向量,左乘 A 矩阵等价与左乘 USV^T, x 向量正好等于 V^T 最后一行向量,经过 S 矩阵的 scaling 缩小之后对 b 的影响非常小。也就是说, 解集 x 在 V^T 最后一行的行向量方向自由度最大!自由度越大,越不稳定,极端情况是该方向奇异值为 0, 解集可以在该方向取任意值,这也正好对应了矩阵 A 有零特征值, Ax 在对应特征向量的方向上移动不改变 Ax 的值。

在不同的 norm 下,条件数又可以由最大奇异值与最小奇异值之间的比值,或者最大特征值和最小特征值之间比值的绝对值来表示,详情请参考维基百科

最后, A 的条件数究竟等于多少呢? cond(A) = 2e+06

5. 病态矩阵处理方法

真正的自由是建立在规范的基础上的。病态矩阵解集的不稳定性是由于解集空间包含了自由度过大的方向,解决这个问题的关键就是将这些方向去掉,而保留 scaling 较大的方向,从而把解集局限在一个较小的区域内。在上面的讨论中, A 矩阵的特征向量不一定正交,不适合做新基, SVD 分解正好分解出了正交基,可以选前 k 个 v^T 向量作为正交基。

比如,现在只选取前一个 (0.707, 0.707) 方向作为基,解集局限咋 y = x 这条直线上。直观的解释就是, A 矩阵的两个列向量过于类似,我们就可以将它们等同看待,第一次 b = (1000, 0), 解集是(0.5, 0.5), 第二次 b = (1000, 0.001), 解集还是 (0.5, 0.5).

总结起来,解决 A 病态就是将解集限定在一组正交基空间内,即对于坐标 y, 选择 k 个正交基 Zk,解决问题:

这个就是 reduce-rank model. 具体方法有 truncated SVD 和 Krylov subspace method。

矩阵论基础知识5(病态矩阵与条件数 )相关推荐

  1. 矩阵论基础知识4——强大的矩阵奇异值分解(SVD)及其应用

    强大的矩阵奇异值分解(SVD)及其应用 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如 ...

  2. 矩阵论基础知识——病态矩阵与条件数

    1. 病态系统 现在有线性系统: Ax = b, 解方程 很容易得到解为: x1 = -100, x2 = -200. 如果在样本采集时存在一个微小的误差,比如,将 A 矩阵的系数 400 改变成 4 ...

  3. 矩阵论基础知识2(正交、 Givens 变换、Householder变换)

    机器学习中的矩阵方法02:正交 说明:Matrix Methods in Data Mining and Pattern Recognition 读书笔记 1. 正交的一些概念和性质 在前一章的最小二 ...

  4. 矩阵论(零):线性代数基础知识整理(2)——矩阵的秩与向量组的秩

    矩阵论专栏:专栏(文章按照顺序排序) 本篇博客承接上篇矩阵论(零):线性代数基础知识整理(1)--逆矩阵.初等变换.满秩分解,主要整理秩相关的结论. 线性方程组的解与向量组的秩 线性方程组的解(初步讨 ...

  5. 矩阵论(零):线性代数基础知识整理(1)——逆矩阵、(广义)初等变换、满秩分解

    矩阵论专栏:专栏(文章按照顺序排序) 线性代数是矩阵论的先修课程,本篇博客整理线性代数的基础理论知识,为矩阵论的学习做准备.限于篇幅,梳理的重点将在定理和结论上(只给出部分必要的定义),对最基础的概念 ...

  6. 矩阵论(零):线性代数基础知识整理(5)——特征值与相似

    矩阵论专栏:专栏(文章按照顺序排序) 本篇博客的上篇是矩阵论(零):线性代数基础知识整理(4)--线性空间与线性变换,梳理了线性空间与线性变换的相关内容.本文主要整理矩阵的特征值与相似的相关内容. 方 ...

  7. 2021-03-15 深入理解SLAM技术【1】 基础知识

    1 啥是SLAM? SLAM是真正的3d技术,是解决移动车辆的定位和动态地图生成的问题的.比如说,你要构造一个自主机器人,能实现路面行走,障碍规避,而且理解三维透视场景,甚至将这种场景翻译成几何场景, ...

  8. 矩阵分析与应用(一)——矩阵基础知识、广义逆

    文章目录 前言 部分符号约定 关于矩阵理论的碎碎念 一些基础知识与本门课知识串讲 矩阵奇异与线性无关 向量空间.内积.范数 行列式.特征值.迹 逆.广义逆 矩阵方程.向量化.Kronecker积 向量 ...

  9. 嵌入式Linux的OTA更新,基础知识和实现

    嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...

最新文章

  1. 比RNN快136倍!上交大提出SRNN,现在RNN也能做并行计算了
  2. python安装方法32位_【Python】pycharm安装32位win7出现的问题解决办法。
  3. mvn filter autoconfig 产生自动配置
  4. jbod ugood 磁盘驱动状态_如何检查Mac磁盘空间,mac磁盘空间其他怎么清理
  5. ActiveMQ入门实例
  6. 单例模式小记【原创】
  7. 基于阈值的损失函数_推荐 :常见损失函数和评价指标总结(附公式amp;代码)...
  8. 多台云服务器中Redis的主从复制
  9. Linux 下 Weblogic 的安装 、配置以及发布
  10. Java中的MD5加密
  11. 基于实时流的数据基础-分享
  12. Verilog语法概述(一)
  13. RPG游戏制作-01-搭建游戏框架,初进游戏世界
  14. sklearn之make_blobs:产生数据集
  15. Javascript 报错 Uncaught TypeError: x is not a function 常见错误总结
  16. 中小企业常遇到这些问题,看APS系统是如何解决的
  17. 国内外Unity视频学习网站大全
  18. CSS之盒子的边距塌陷(兄弟、父子)与解决方案
  19. 移动端软键盘弹起遮挡输入框问题的解决方案
  20. 什么是类比估算法=自上而下的估算

热门文章

  1. 前后台系统(一、前端js和后端fcgi通信 )
  2. 微信小程序0基础快速入门(史上最全!!!)
  3. java多功能计算器编程,java 编程 计算器 本人菜菜!!!
  4. 联想7400PRO清零
  5. MIDI文件深入剖析
  6. 英语计算机统考成绩多久出来,计算机二级考试成绩多久出来
  7. Web前端学习笔记11:JavaScript_注释_输入输出_变量_数据类型_关键字_保留字_运算符_流程控制
  8. Anaconda打开之后无法显示界面,再打开显示There is an instance of anaconda navigator already running
  9. PHP开发转账到支付宝账户功能
  10. jq使用face-api.js 识别人脸对比是否是同一个人