数值计算矩阵浅析

对于一个m*n的矩阵A,其实质就是一个映射,譬如对于一个n维的矢量x,Am*nx就是将x从n维映射到m维空间。如果A是一个正交矩阵,则A就代表一个旋转,即用A中的列向量作为一组正交基,重新表示x.

一、正交矩阵

Un*n的正交矩阵  <=>  U-1=UT

  • |U| = ±1
  • U的各行(列)为单位向量且相互正交
  • 保范性,即||x|| = ||Ux||,若U为正交矩阵

前两条容易理解,现在证明第三条,||x||表示x的欧式长度,||x|| = (xTx)1/2, 保范性就是矢量x乘以一个正交矩阵,其范数保持不变,假设U为正交矩阵:

||Ux||2 = (Ux)T(Ux) = xTUTUx = xTx = ||x||2

二、矩阵的RQ分解

矩阵的RQ分解是指将一个矩阵A分解成RQ两个矩阵相乘的形式,即A = RQ,其中R(Right)为上三角矩阵,Q为正交矩阵。与RQ分解类似的有QL、LQ、QR分解。

1、Givens矩阵实现

以3维Givens矩阵为例,通过计算的到c和s(具体见MVG附录),按步骤依次对三维矩阵A右乘某个Givens矩阵使A的左下角的各个值为0

例如:AQ1Q2Q= R      A = RQ3TQ2TQ1T  = RQ     (其中Q = Q3TQ2TQ1T )

2、HouseHold矩阵实现

HuserHold矩阵实现RQ分解和Givens类似,都是利用特殊矩阵来实现,具体见MVG附录。

三、对称和反对称矩阵

如果A T = A,称A为对称矩阵;如果A T = -A,称A为对反称矩阵。

以3*3的反对称矩阵为例,任何3*3的反对称矩阵A,都能找到一个适当的向量a,A = [a]x.

两个3维矢量a、b的叉乘:a*b = [a]xb = (aT[b]x)T

四、特征值分解(EVD)

对任意方阵An*n,都可以分解成 A n*n = PDP-1.

若A是实对称矩阵的话,则有A n*n = UDUT,其中U为正交矩阵。若对矢量x做一个A映射,即Ax = UDUTx ,即将A映射分解成三个映射,先做UTx,将x用A的特征向量来表示,再做DUTx,由于D是对角矩阵,对角线上的元素为各个特征向量所对应的特征值,那么该映射表示在新的基上把x做拉伸或压缩(特征值大于1做拉伸,小于1做压缩),最后再用U映射会原来的基。

五、Choleshy分解

对于任意正定实对称矩阵A都能分解成KKT,即A = KKT,其中K为对角元素全为正的上三角矩阵。

证明:A为实对称矩阵,故  A = UDUT

因为A正定,故D对角线上的元素全为正值,故D可写成D = EET,其中E为对角阵,对角线元素值为D的平方根

则A  =  UEETUT = UE(UE)T,记V = UE,则A = VVT

对V进行RQ分解,V = KQ, 则A = KQQTKT = KKT(因为Q为正交矩阵)

以上证明的过程也为Choleshy分解的过程。这只是一种构造性方法,还有更加高效的方法,见MVG附录。

六、奇异值分解(SVD)

特征值分解只能分解方阵,那对于非方阵则采用SVD分解,设A为m*n的矩阵,则

m*n = Um*mDm*nVn*nT

其中U和V都为正交矩阵,D为对角矩阵,且可知D对角线上的元素为ATA的特征值得平方根,V中的列向量为其特征值所对应的特征向量。

证明:首先ATA为半正定的,即特征值大于等于0.

A = UDVT

则ATA = VDTUTUDVT = VD2VT

证毕。

注意:SVD是非常有用的矩阵分解方法,用SVD可以干很多事:

  • 求(超定)方程组的根
  • 图像压缩
  • 矩阵分解
  • 求伪逆

七、伪逆

对可逆矩阵求逆比较简单,但对不可逆的矩阵矩阵如何求伪逆呢?

定义:对于对角矩阵D,其伪逆为D+

D+ii = 0,如果Dii = 0

D+ii = Dii-1,若果Dii ≠ 0

那么对于m*n的矩阵A,其伪逆为:

+ = VD+UT

时间: 2024-10-07 02:04:14

数值计算矩阵浅析的相关文章

Armadillo之计算矩阵的行列式(determinant)

计算矩阵的行列式很简单,用det方法或是log_det方法 1 det(A) 如果A不是方阵的(square),将抛出std::logic_error异常 例: mat m = "3,2,4;1,-2,3;2,3,2;"; double d = det(m); cout << d << endl; 运行结果是-3 2 log_det(value, sign,A) 文档里推荐当矩阵A比较大时,使用本函数来代替det函数(估计会加快计算速度) det(A)=exp(

随时更新———个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客

目标检測.识别.分类.特征点的提取 David Lowe:Sift算法的发明者,天才. Rob Hess:sift的源代码OpenSift的作者,个人主页上有openSift的下载链接.Opencv中sift的实现.也是參考这个. Koen van de Sande:作者给出了sift,densesift,colorsift等等经常使用的特征点程序.输出格式见个人主页说明,当然这个特征点的算法,在Opencv中都有实现. Ivan Laptev:作者给出了物体检測等方面丰富C\C++源代码,及部

python与数值计算环境搭建

数值计算的编程的软件很多种,也见过一些编程绘图软件的对比. 利用Python进行数值计算,需要用到numpy(矩阵) ,scipy(公式符号), matplotlib(绘图)这些工具包. 1.Linux系统中一般会带有Python.可以用命令查看是否安装Python $ python Python 2.7.5 (default, Feb 11 2014, 07:46:25) [GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2 Type "help&

网格数值计算中周期性边界条件的处理

涉及到网格的数值计算中,边界条件的处理总是一个比较烦人的东西. 一者,本来好好的逐格处理过程,到边界这里总是要中断一下,或者加两个if,或者for循环中要精心处理下标关系,以免混乱,动不动就给你来个数组越界. 二者,并行计算的时候,最好的情况是所有网格统一处理.尤其是在CUDA编程中,代码中出现if很有可能大大降低执行效率.如果只对中间的网格进行并行处理,那么边界点的网格,单独做处理边界的kernel太烦,拷贝回内存处理更是得不偿失. 最近几天正在学习Level Set算法,研究从网上下载的代码

图片变换【Matrix】矩阵 简介

Matrix矩阵介绍 官方文档地址:https://developer.android.com/reference/android/graphics/Matrix.html 在Android中,对图片的处理需要使用到Matrix类,Matrix是一个3 x 3的矩阵,内部就是个一维数组,内部有9个元素,可以通过setValues(float[])进行初始化,通过getValues(float[])把拿到的矩阵值赋给传入的数组. 源码中的介绍就一句话:The Matrix class holds

浅析IRF虚拟化技术增强企业网络架构的弹性

浅析IRF虚拟化技术增强企业网络架构的弹性  [摘要]随着"云"时代到来和各种虚拟化技术日趋成熟,对传统企业网络架构提出新挑战.例如:在不破坏企业原有网络架构和资产投入情况下,可以为企业网络提供更好的扩展性,其中包括简化管理.简化网络运行.降低整体投入成本.扩展端口密度和带宽容量.保护用户投资,使企业网络具备高可用性和持续的.不间断的运行效果.为了达到此效果,可利用H3C的IRF虚拟化技术在企业网络架构中增强弹性,现浅析如下. 关键词:云时代.企业网络.虚拟化技术.持续不间断.IRF.

(转)Esfog_UnityShader教程_UnityShader语法实例浅析

距离上次首篇前言已经有一段时间了,一直比较忙,今天是周末不可以再拖了,经过我一段时间的考虑,我决定这一系列的教程会避免过于深入细节,一来可以避免一些同学被误导,二来会避免文章过于冗长难读, 三来可以让大家有更多自己思考的时间.如果我想讲述一些细节问题会另开一个系列. UnityShader语法实例浅析 上一次我在前言里大体上讲述了一下图形渲染的流程以及Shader是如何参与的,我们这系列教程还是更注重实际应用多一些,所以这一节为了以后打基础,我们来分析一下UnityShader的语法结构.如果没

Linux江湖17:适合数值计算的语言需要具备什么样的特色

2015年1月,我继续徜徉在数值计算的海洋中.这段时间里,我抽空看了Python科学计算和数值分析方面的书,也仔细研读了Octave的用户手册,甚至连古老的Fortran.新兴的R语言我都去逐一了解.对于数值计算的库,我了解了一下Boost的uBLAS,以前也用过OpenCV,当然,了解最多的还是Python中的NumPy.SciPy和pandas. 前几篇随笔搞了不少工具论,所以今天我就专门来论一论编程语言.我的这个Linux江湖系列是一会儿方法论一会儿工具论,每过一段时间也谈谈编程语言.今天

浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联

浅析人脸检测之Haar分类器方法 一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来. 目前的人脸检测方法主要有两大类:基于知识和基于统计. Ø  基于知识的方法:主要利用先验知识将人脸看作器官特征的组合,根据眼睛.眉毛.嘴巴.鼻子等器官的特征以及相互之间的几何位置关系来检测人脸. Ø  基于统计的方法:将人脸看作一个整体的模式——二维像素矩