本blog主要内容有:矩阵的奇异性、条件数与病态矩阵、矩阵求逆。

奇异矩阵和非奇异矩阵singular matrix&nonsingular matrix

概念和定义

若n阶矩阵A的行列式不为零,即 |A|≠0,则称A为非奇异矩阵或满秩矩阵,否则称A为奇异矩阵或降秩矩阵。

奇异矩阵是线性代数的概念,就是对应的行列式等于0的方阵。

奇异矩阵和非奇异矩阵的判断和性质

奇异矩阵一定是方阵吗

首先,看这个矩阵是不是方阵(即行数和列数相等的矩

阵。若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。

不过限定在某个知识范围内是指方阵,例如线性代数当中只对方阵进行奇异矩阵的定义。正常来讲是不限定必须是方阵的,比如在奇异值分解当中,用作估计的时候会定义奇异值矩阵不满秩的矩阵为奇异阵,当然就不再限定是方阵。这种情况下矩阵不可求广义逆,即使求莫奈伪逆也要用特殊的方法,另外这种矩阵如果有物理意义的话,往往不满足正交核函数分解的条件。

一个矩阵A非奇异当且仅当:(等价的概念)

A的所有特征值都不为零(lambda=0则|A|=0,只要矩阵A有一个特征值为零,一定是奇异矩阵。即零特征值反映矩阵的奇异性)

或A的行列式不为零,即 |A|≠0(A 为可逆矩阵,也即A的行列式不为零)

或A可逆

或A的秩为n(非奇异矩阵 A满秩,Rank(A)=n;奇异矩阵 A的秩Rank(A)

或A的列向量线性无关

或矩阵方程AX=b有唯一非零解(如果A为奇异矩阵,则AX=b有无穷解或者无解)

或矩阵方程AX=0有且仅有零解(如果A为奇异矩阵,则AX=0有无穷解)

一个非奇异矩阵可表示成若干个初等矩阵之积。

一个矩阵非奇异当且仅当它代表的线性变换是个自同构。Note: 若A为非奇异矩阵,其顺序主子阵Ai(i=1,...,n-1)不一定均非奇异。

如果n 阶方阵A奇异,则一定存在一个n*1阶非零向量X使: X'AX=0;成立。

[更详细的描述ref:张贤达: 矩阵分析与应用 1.7逆矩阵与伪逆矩阵]

注意事项计量经济学中,当样本容量太少或是当变量间存在完全相关性时会提示“near singular matrix”,意为“近奇异矩阵”。

在信号处理中,当信号协方差矩阵不是奇异矩阵时,则信号不相关或者部分相关。

优化有两大难题,一是:局部最小值,二是:ill-condition病态问题。前者俺就不说了,大家都懂吧,我们要找的是全局最小值,如果局部最小值太多,那我们的优化算法就很容易陷入局部最小而不能自拔,这很明显不是观众愿意看到的剧情。那下面我们来聊聊ill-condition。

条件数condition number与病态矩阵

ill-condition对应的是well-condition,分别代表什么?

假设我们有个方程组AX=b,我们需要求解X。如果A或者b稍微的改变,会使得X的解发生很大的改变,那么这个方程组系统就是ill-condition的,反之就是well-condition的。

举个例子

左边的那个。第一行假设是我们的AX=b,第二行我们稍微改变下b,得到的x和没改变前的差别很大。第三行我们稍微改变下系数矩阵A,可以看到结果的变化也很大。换句话来说,这个系统的解对系数矩阵A或者b太敏感了。又因为一般我们的系数矩阵A和b是从实验数据里面估计得到的,所以它是存在误差的,如果我们的系统对这个误差是可以容忍的就还好,但系统对这个误差太敏感了,以至于我们的解的误差更大,那这个解就太不靠谱了。所以这个方程组系统就是ill-conditioned病态的,不正常不稳定有问题的。

右边那个就叫well-condition的系统了。

对于一个ill-condition的系统,输入稍微改变下,输出就发生很大的改变,这表明我们的系统不能实用。例如对于一个回归问题y=f(x),我们是用训练样本x去训练模型f,使得y尽量输出我们期待的值,例如0。那假如我们遇到一个样本x’,这个样本和训练样本x差别很小,面对他,系统本应该输出和上面的y差不多的值的,例如0.00001,最后却给我输出了一个0.9999,这很明显不对呀。就好像,你很熟悉的一个人脸上长了个青春痘,你就不认识他了,那你大脑就太差劲了,哈哈。

奇异的本质原因在于矩阵有0特征值,x在对应特征向量的方向上运动不改变Ax的值。如果一个特征值比其它特征值在数量级上小很多,x在对应特征向量方向上很大的移动才能产生b微小的变化,这就解释了为什么这个矩阵为什么会有大的条件数,事实上,正规阵在二范数下的条件数就可以表示成 abs(最大特征值/最小特征值)。

病态的衡量标准:条件数condition number

所以如果一个系统是ill-conditioned病态的,我们就会对它的结果产生怀疑。那到底要相信它多少呢?我们得找个标准来衡量吧,因为有些系统的病没那么重,它的结果还是可以相信的。终于回来了,上面的condition number就是拿来衡量ill-condition系统的可信度的。

condition number的定义

条件数是线性方程组Ax=b的解对b中的误差或不确定度的敏感性的度量。数学定义为矩阵A的条件数等于A的范数与A的逆的范数的乘积,即cond(A)=‖A‖·‖A的逆‖,对应矩阵的3种范数,相应地可以定义3种条件数。

condition number衡量的是输入发生微小变化的时候,输出会发生多大的变化。也就是系统对微小变化的敏感度。

从线性代数的分析可知,矩阵的条件数总是大于1,正交矩阵的条件数等于1,奇异矩阵的条件数为无穷大,而病态矩阵的条件数则为比较大的数据(远大于1)。也就是说奇异矩阵一定是病态的!

如果方阵A是非奇异的,那么A的conditionnumber定义为:

也就是矩阵A的norm乘以它的逆的norm。所以具体的值是多少,就要看你选择的norm是什么了。

如果方阵A是奇异的,那么A的condition number就是正无穷大了。

实际上,每一个可逆方阵都存在一个condition number。但如果要计算它,我们需要先知道这个方阵的norm(范数)和Machine Epsilon(机器的精度)。

当然,这个定义依赖于范数的选取。

若∥ ⋅ ∥ {\displaystyle \|\cdot \|}

是 l 2 {\displaystyle l_{2}}

矩阵范数则

κ ( A ) = σ m a x ( A ) σ m i n ( A ) {\displaystyle \kappa (A)={\frac {\sigma _{max}(A)}{\sigma _{min}(A)}}}

其中

σ m a x ( A ) {\displaystyle \sigma _{max}(A)}

σ m i n ( A ) {\displaystyle \sigma _{min}(A)}

分别是

A {\displaystyle A}

的极大和极小

奇异值。因此

若A {\displaystyle A}

是正规矩阵则

κ ( A ) = | λ m a x ( A ) λ m i n ( A ) | {\displaystyle \kappa (A)=\left|{\frac {\lambda _{max}(A)}{\lambda _{min}(A)}}\right|}

(

λ m a x ( A ) ,   λ m i n ( A ) {\displaystyle \lambda _{max}(A),\ \lambda _{min}(A)}

分别是

A {\displaystyle A}

的极大和极小(根据模数)

特征值)

若A {\displaystyle A}

是酉矩阵则

κ ( A ) = 1 {\displaystyle \kappa (A)=1}

若 ∥ ⋅ ∥ {\displaystyle \|\cdot \|}

是l ∞ {\displaystyle l_{\infty }}

矩阵范数而A {\displaystyle A}

是下三角矩阵,非奇异(也即a i i ≠ 0 ∀ i {\displaystyle a_{ii}\neq 0\;\forall i}

)则:κ ( A ) ≥ max i ( | a i i | ) min i ( | a i i | ) {\displaystyle \kappa (A)\geq {\frac {\max _{i}(|a_{ii}|)}{\min _{i}(|a_{ii}|)}}}

其它意义下的条件数

奇异值分解,多项式求根,特征值和其它许多问题的条件数也可以有定义。

通常,如果一个数值问题是适定的,它可以表达为一个函数f {\displaystyle f}

映射它的数据(一个实数的m {\displaystyle m}

元组x {\displaystyle x}

)到它的解(一个实数的n {\displaystyle n}

元组y {\displaystyle y}

)。

它的条件数则定义为解中的相对误差的半径和数据中的相对误差的比的最大值,取遍整个问题的定义域:

max { | f ( x ) − f ( x ∗ ) f ( x ) | / | x − x ∗ x | : | x − x ∗ | < ϵ } {\displaystyle \max \left\{\left|{\frac {f(x)-f(x^{*})}{f(x)}}\right|\left/\left|{\frac {x-x^{*}}{x}}\right|\right.:|x-x^{*}|

其中ϵ {\displaystyle \epsilon }

是问题中的数据的偏差的某个合理的小数值。

如果f {\displaystyle f}

也是可微的,这可以近似的表示为

| f ′ ( x ) f ( x ) | . | x | {\displaystyle \left|{\frac {f'(x)}{f(x)}}\right|.\left|x\right|}

.

为什么要范数?

范数就相当于衡量一个矩阵的大小,我们知道矩阵是没有大小的,但上面不是要衡量一个矩阵A或者向量b变化的时候,我们的解x变化的大小吗?所以肯定得要有一个东西来度量矩阵和向量的大小吧?它就是范数,表示矩阵大小或者向量长度。对于AX=b,我们可以有以下的结论:

也就是我们的解x的相对变化和A或者b的相对变化是有像上面那样的关系的,其中k(A)的值就相当于倍率,相当于x变化的界。

一句话总结:condition number是一个矩阵(或者它所描述的线性系统)的稳定性或者敏感度的度量,如果一个矩阵的condition number在1附近,那么它就是well-conditioned的,如果远大于1,那么它就是ill-conditioned的,如果一个系统是ill-conditioned的,它的输出结果就不要太相信了。

矩阵求逆

非奇异正方矩阵A的逆矩阵A-1

m*n(m!=n)的长方形满列秩矩阵的左伪逆矩阵(A^HA)^-1A^H, 满行秩矩阵的右伪逆矩阵A^H(AA^H)^-1

秩亏缺矩阵的逆矩阵:Moore-Penrose逆矩阵

[张贤达: 矩阵分析与应用 1.7逆矩阵与伪逆矩阵]

奇异矩阵/病态矩阵的求逆

L2范数有助于处理条件数 condition number不好的情况下矩阵求逆很困难的问题。

如将下面的奇异矩阵XTX改造一下再求逆:

还有SVD分解的方法?Moore-Penrose逆矩阵?

ref: [张贤达: 矩阵分析与应用]

java求矩阵条件数_数值分析:矩阵求逆-奇异性、条件数相关推荐

  1. 数值分析:矩阵求逆-奇异性、条件数

    http://blog.csdn.net/pipisorry/article/details/52241141 本blog主要内容有:矩阵的奇异性.条件数与病态矩阵.矩阵求逆. 奇异矩阵和非奇异矩阵s ...

  2. java求矩阵的逆矩阵_Java逆矩阵计算

    我正在尝试用Java计算逆矩阵. 我正在遵循伴随方法(首先计算伴随矩阵,然后转置这个矩阵,最后,将它乘以行列式值的倒数). 当矩阵不太大时,它可以工作.我已经检查过,对于尺寸为12×12的矩阵,可以快 ...

  3. java求矩阵的逆矩阵_java n*n矩阵求值及求逆矩阵

    展开全部 import java.math.*; import java.util.*; import java.text.*; public class matrix { static int ma ...

  4. java求矩阵_java实现的n*n矩阵求值及求逆矩阵算法示例

    本文实例讲述了java实现的n*n矩阵求值及求逆矩阵算法.分享给大家供大家参考,具体如下: 先来看看运行结果: java版的写出来了,用的跟c语言相同的算法,然后看看能不能以后加个框做成程序: imp ...

  5. java 求集合平均数_图像二值化方法介绍(转载学习)

    ImageJ中图像二值化方法介绍 概述 二值图像分析在对象识别与模式匹配中有重要作用,同时也在机器人视觉中也是图像处理的关键步骤,选择不同图像二值化方法得到的结果也不尽相同.本文介绍超过十种以上的基于 ...

  6. java求小数高精度_浅谈Java中的高精度整数和高精度小数

    在实际编码中,会遇到很多高精度的事例,比如,在计算金钱的时候就需要保留高精度小数,这样计算才不会有太大误差: 在下面的代码中,我们验证了,当两个float型的数字相加,得到的结果和我们的预期结果是有误 ...

  7. java求最小步数_关于java:查找两点之间的最小步数?

    我有一个网格,网格有两个"材料"- 地板 壁 例如 : 在此网格中,我们具有具有大小和位置的对象(对象的位置是左上角的点). 我们可以在每个对象上执行一些操作,例如- 提升 下移 ...

  8. python二分法求最值_数值分析之二分法、试值法 python

    @ 数值分析之非线性方程求解 文章目录 二分法.试值法的本质 (1) 二分法求利率 题目 输入输出格式 举例 输入: 输出: 思路和要点 代码 结果 (2)试值法法求利率 题目 输入输出格式 举例 输 ...

  9. java求圆弧切线_两个圆的公切线

    两个圆的公切线 圆上任意一点拥有唯一的圆心角 struct circle{ Point p; double r; // 通过圆心角求圆上某一点 Point point(double a){ retur ...

最新文章

  1. java用户输入解析_Java中的3种输入方式实现解析
  2. Oracle11gR2 64bit+Oracle11gR2Client32bit+pl/sql 9
  3. python入门学习基础数据结构与语法
  4. python opencv 实现任意角度的透视变换
  5. navicat修改sqlserver密码_oracle密码过期
  6. Java编程在线学习靠谱吗?能学会吗?
  7. 2021CSP:游记
  8. 标题 计算机构自由度时主要步骤有哪些,2010年1月全国自考混凝土结构设计试题和答案...
  9. git版本库的创建和yaf框架环境的部署
  10. Hls之http协议实现
  11. docker ssh连接
  12. cpu烤机温度测试软件,ATX2.0与ATX3.0机箱烤机温度对比测试,竖装显卡真的会把风挡死...
  13. 视频mov如何转换成mp4?
  14. 支付FM免签通道常见问题—监控APP找不到对应金额的收款人订单
  15. h5调用指纹识别_基于HTML Canvas实现“指纹识别”技术,canvas指纹
  16. [JavaWeb实训Day3]__button_框架布局点击事件
  17. 搜狗输入法状态栏闪烁解决办法
  18. 【JS基础】立即执行函数表达式(自执行函数)
  19. 第 9 章 Part / Chapter / Section
  20. vue生成二维码带图标

热门文章

  1. Docker 的新变化你知道多少?
  2. mac c语言运行程序,Mac运行C语言
  3. Jungle Scout中国市场首发亚马逊FBA卖家百万美金案例中文版详解
  4. 前端和后端到底有什么区别?待遇和前景如何?
  5. 2DPCA—二维主成分分析详解及编程
  6. 长沙市民吴先生乘坐滴滴D1后,取消了买特斯拉的计划
  7. 全球500强企业里用的两字母域名!
  8. vivo是安卓手机吗_vivo新机Y73s评测:谁说买手机一定要买旗舰机?_安卓手机
  9. Anaconda3\Scripts\activate.bat 不是内部或外部命令,也不是可运行的程序的问题处理方法
  10. 自然语言处理--加载使用facebook的预训练 fastText 模型wiki-news-300d-1M.vec