在提到矩阵的QR分解前,必须要提到Gram–Schmidt方法,理论上QR分解是由Gram–Schmidt正交化推出来的。那么Gram–Schmidt正交化究竟是什么。
在三维空间存在直角坐标系,其中任意一点都可以由(x,y,z)坐标唯一确定,在这个坐标系中,X、Y、Z三轴都是相互正交(垂直)的。那么推广到n维欧式空间,就是n个线性无关的基向量组成的一组基,n维欧式空间中任意一位置,都可以由这组基线性表示。
那么就引出来另一个问题,怎么得到一组两两相互正交的正交基呢?这一过程就是Gram–Schmidt正交化。下面简
单推理一下Gram–Schmidt正交化方法的得出过程。重点是正交投影这种思想。
现在设是欧式空间
的一组基,我们希望由此得到
这组正交基。
先令,那么如何得到
呢?可以将
正交分解为
,如下图所示:
由此可以得到,因此
。So
那么呢?显然可以由相同的方法得出,如下图所示:
由此可得。推广到第j个正交向量可得:
以上就是求正交基的Gram–Schmidt正交化方法。
对于可逆矩阵A的列向量组进行Gram–Schmidt正交化,可得标准正交向量
:
用矩阵表达即是:
T=(tij),A=(),Q=(
),这里注意Q是正交矩阵。若记
,则A = QR,其中T的逆矩阵R仍然是上三角矩阵。
由此得到QR分解定义:
对于n阶方阵A,若存在正交矩阵Q和上三角矩阵R,使得A = QR,则该式称为矩阵A的完全QR分解或正交三角分解。(对于可逆矩阵A存在完全QR分解)。
从上面可以看出矩阵QR分解是由Gram–Schmidt正交化推理出来的一种方阵分解形式,矩阵QR分解的计算方法也是以Gram–Schmidt正交化为核心。通过Gram–Schmidt正交化求出正交矩阵Q,再通过得到矩阵R。
这里对于Gram–Schmidt正交化求正交矩阵Q提出一种改进的计算方法(改进的地方是每产生一个单位正交向量后,就用后续的向量减去它,消去其中包含这个正交向量的部分):
其实对于非方阵的m*n(m≥n)阶矩阵A也可能存在QR分解的,A = QR。这时Q为m*n阶的半正交矩阵,R为n*n阶上三角矩阵。这时的QR分解不是完整的(方阵),因此称为约化QR分解(对于列满秩矩阵A必存在约化QR分解)。
同时也可以通过扩充矩阵A为方阵或者对矩阵R补零,可以得到完全QR分解。
参考资料:
《矩阵分析与计算》,李继根,张新发
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。
透明度设置:WindowManager.LayoutParams lp=this.getWindow().getAttributes(); lp.dimAmount=0.5f; this.getWindow().setAttributes(lp); this.getWindow().addFlags(WindowManager.LayoutPara..._android开发全屏半透明dialog
互联网时代,企业培训管理如何创新?最近,互联网思维颠覆餐饮行业、互联网思维颠覆房地产行业、互联网思维颠覆打火机……大量互联网思维“颠覆”的文章进入眼帘,于是笔者也在思考,在传统行业、传统产品被互联网思维影响下忙着升级、转型、重塑商业模式的时候,HR在管理企业培训的时候是否也应有所创新?专注于企业培训线上、线下培训管理信息化的学力银行平台专家认为,颠覆企业培训不是一件容易的事,但企业培训必然
linux-2.6.36.3/* * Ok, this is the main fork-routine. * * It copies the process, and if successful kick-starts * it and waits for it to finish using the VM if required. */long do_fork(u
1.基础环境Android SDK r24(项目未设置NDK)gradle 4.1-6.4(打包工具)360加固账号蒲公英账号Jenkins已经部署安装好2.配置编译打包步骤注意:这里主要是修改build.gradle 配置和添加local.properties 文件到代码中,具体是根据项目情况来决定脚本: ```bash #修改build.gradle配置和添加local.p..._jenkins android 加固
Behavior():注册一个 behavior,接受一个 Object 类型的参数。properties:同组件的属性。data:同组件的数据。behaviors:引入其它的 behavior。observers:同组件数据字段监听器。methods:同组件的方法。created:生命周期函数。attached:生命周期函数。ready:生命周期函数。moved:生命周期函数。detached:生命周期函数。lifetimes:组件生命周期声明对象。_wx://component-export
1.EL表达式的扩展 EL表达式目前只用在对象上,无法在对象的属性上使用. 自定义EL表达式 1)先写一个类,每个静态方法说明了一种作用. 2)写一个定义文件,声明类,方法和使用标签的name 3)在jsp里声明这个定义文件 4)使用格式是:${前缀:定义文件里的name(元素)}2.服务器验证 1)自己写验证代码 a.先写好jsp的表单,做...
文章目录目的基础说明输出PWM信号总结目的单片机输出PWM信号是很常用的一种功能需求,STM32中通常使用Timer来输出PWM信号,这篇文章将对相关内容做个说明。基础说明在使用Timer输出PWM信号需要了解一些Timer的基础知识,可以查看 《使用HAL库开发STM32:Timer基础说明与定时功能使用》 这篇文章中的 Timer基础说明 章节。输出PWM信号总结..._hal_tim_pwm_start
Java实训学习笔记06---一级目录二级目录三级目录一级目录二级目录三级目录_java 反射 实例化
转自:http://www.cnblogs.com/celestial/archive/2012/06/30/2571417.htmliOS编程规范编码规范一、文档结构管理1.建立Libraries文件夹,所有第三方库放入其中。2.建立Utilities文件夹,自已封装的类放入其中。3.建立Constants.h头文件,所有的常量定义于其中。Constants...
这个是《Cocos2d-X by Example Beginner's Guide》上的第二个例子,用鼠标点屏幕点一下就会生成一个炸弹,等炸弹大到一定程度再点击屏幕,炸弹就爆炸了,光圈碰到下落的绿色物体就加分了,绿色物体落到地上,就减生命的,生命到0就Game Over了。
问:摄像头的数字信号和模拟信号有什么区别?是不是只有模拟信号才能当监控器使用?答:都可以 但是模拟信号回放的时候只有四分之一D1格式 不清晰问:摄像头如何将模拟信号转换为数字信号?答:不是转换 是编码 目前比较流行的是 mp4 和 h264 编成数字信号后 通过解码库再解成模拟信号显示出来问:监控的模拟信号和数字信号是指采集卡还是摄像头?又或者是两者都必需是才是?从外观上_摄像头感光芯片是模拟还是数字的
字符串是用双引号" "或者单引号’ '括起来的一个或多个字符。字符串可以保存在变量中,也可以单独存在。可以用type()函数测试一个字符串的类型。Python语言转义符:\输出带有引号的字符串,可以使用转义符。使用\\可以输出带有转义符的字符串。字符串是一个字符序列:字符串最左端位置标记为0,依次增加。字符串中的编号叫做“索引”。单个索引辅助访问字符串中的特定位置。Python中字符串索引从..._python字符串中的编号叫什么