1、豪斯霍尔德变换
一般地,对给定的mmm维向量aaa,考虑分块 a=[a1a2]a=\left[ \begin{matrix} {{a}_{1}} \\ {{a}_{2}} \\ \end{matrix} \right]a=[a1​a2​​],其中a1{{a}_{1}}a1​是(k−1)(k-1)(k−1)维向量,1≤k<m1\le k<m1≤k<m。如果豪斯霍尔德向量为v=[0a2]−αekv=\left[ \begin{matrix} 0 \\ {{a}_{2}} \\ \end{matrix} \right]-\alpha {{e}_{k}}v=[0a2​​]−αek​,其中α=−sign(ak)∣∣a2∣∣2\alpha =-sign({{a}_{k}})||{{a}_{2}}|{{|}_{2}}α=−sign(ak​)∣∣a2​∣∣2​,ek{{e}_{k}}ek​是单位矩阵的第k{k}k列,则由此形成的豪斯霍尔德变换可消去aaa的后m−km-km−k个分量。对k=1,2,⋯,nk=1,2,\cdots ,nk=1,2,⋯,n用这种方法可定义一系列豪斯霍尔德变换,以消去m×nm\times nm×n阶矩阵AAA的副对角线及以下的元素,对AAA的列按从左到右的顺序依次作上述变换,就可将矩阵约化为上三角阵。每个豪斯霍尔德变换只对AAA的未被约化的部分起作用,并不影响前面已约化好的部分,因而在依次变换过程中,已得到的零元素能得以保持。对任意向量uuu,经过豪斯霍尔德变换HHH后,为 Hu=(I−2vvTvTv)u=u−(2vTuvTv)vHu=\left( I-2\frac{v{{v}^{T}}}{{{v}^{T}}v} \right)u=u-\left( 2\frac{{{v}^{T}}u}{{{v}^{T}}v} \right)vHu=(I−2vTvvvT​)u=u−(2vTvvTu​)v,这个变换的计算量比通常的矩阵向量相乘要少得多,且只要知道向量vvv即可,不必具体算出矩阵HHH。
2、伪代码

3、Matlab实现

%% Matlab 2018b——用豪斯霍尔德变换进行矩阵的QR分解:A→R(上三角阵)
A=[1,0,0;0,1,0;0,0,1;-1,1,0;-1,0,1;0,-1,1];
% b=[1237,1941,2417,711,1177,475];
% A=[A,b'];
[m,n]=size(A);
alpha=zeros(1,n);
beta=alpha;
gama=alpha;
v=zeros(m,n);
E=eye(m,n);
for i=1:nalpha(i)=-1*sign(A(i,i))*sqrt(sum(A(i:m,i).*A(i:m,i)));v(:,i)=[zeros(i-1,1);A(i:m,i)]-alpha(i).*E(:,i);beta(i)=v(:,i)'*v(:,i);if beta(i)==0continue; endfor j=i:ngama(j)=v(:,i)'*A(:,j);A(:,j)=A(:,j)-(2*gama(j)/beta(i)).*v(:,i);  end
end
R=A;

4、OpenCV实现

// OpenCV 4.5.0——用豪斯霍尔德变换进行矩阵的QR分解:A→R(上三角阵)
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat A = (Mat_<float>(6, 3) << 1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 1, 0, -1, 0, 1, 0, -1, 1);Size n = A.size();Mat alpha = Mat::zeros(1, n.width, CV_32FC1);Mat V = Mat::zeros(n, CV_32FC1);Mat E = Mat::eye(n, CV_32FC1);Mat beta = alpha.clone(), gama = alpha.clone();Mat temp, temp1; // 过程暂存变量for (int i = 0; i < n.width; i++){       temp = A(Range(i, n.height), Range(i, i + 1)).clone();temp1 = temp.mul(temp);        // 各项求平方reduce(temp1, temp1, 0, REDUCE_SUM);    // 平方和alpha.at<float>(i) = -1 * A.at<float>(i, i) / fabsf(A.at<float>(i, i)) * sqrt(temp1.at<float>(0));vconcat(Mat::zeros(i, 1, CV_32FC1), temp, temp);V.col(i) = temp - alpha.at<float>(i)*E.col(i);temp1 = V.col(i).t()*V.col(i);beta.at<float>(i) = temp1.at<float>(0);if (beta.at<float>(i) == 0)continue;for (int j = i; j < n.width; j++){temp = V.col(i).t()*A.col(j);gama.at<float>(j) = temp.at<float>(0);A.col(j) = A.col(j) - (2 * gama.at<float>(j) / beta.at<float>(i))*V.col(i);}}cout << A << endl;getchar();return 0;
}

参考文献:《科学计算导论》(第2版)——Michael T. Health 著 张威等 译

用豪斯霍尔德(Householder)变换进行矩阵的QR分解,及其Matlab和OpenCV实现相关推荐

  1. (23)利用Householder变换求A的QR分解

    (23)利用Householder变换求A的QR分解 补发笔记

  2. matlab qr分解作用,MATLAB论文_矩阵的QR分解及其MATLAB实现.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab MATLAB论文_矩阵的QR分解及其MATLAB实 ...

  3. 对矩阵进行QR分解的Matlab代码

    摘自Introduction to Linear Algebra by Gilbert Strang 结合课后习题进行分析 命名初值 n = 3; a = [2;2;-1]; b = [0;-3;3] ...

  4. [矩阵的QR分解系列四] QR(正交三角)分解

    QR分解 简介 QR分解 定义 存在和唯一性 存在性证明 唯一性证明 分解方法 施密特(Schmidt)方法 吉文斯(Givens)方法 豪斯霍尔德(Householder)方法 例子 施密特(Sch ...

  5. 矩阵的QR分解以及在最小二乘法中的应用

    一.最小二乘法   最小二乘法是一种数学优化方法,通过最小化误差的平方和来拟合数据点.   以线性回归模型为例,如果我们用最小二乘法来求解线性回归的系数,可得: err(yi−y^)=1n∑i=1n( ...

  6. [矩阵的QR分解系列一] 施密特(Schmidt)正交规范化

    施密特正交规范化 简介 规范化步骤 例子 引用 之前介绍的矩阵的三角分解系列介绍了利用矩阵初等变换解决了矩阵三角化问题以及具体的三角分解.但是以初等变换工具的三角分解方法并不能消除病态线性方程组不稳定 ...

  7. 矩阵的QR分解c语言编程,[矩阵的QR分解系列五] Eigen中的QR分解

    之前介绍的矩阵的三角分解系列介绍了利用矩阵初等变换解决了矩阵三角化问题以及具体的三角分解.但是以初等变换工具的三角分解方法并不能消除病态线性方程组不稳定问题,而且有时候对于可逆矩阵有可能也不存在三角分 ...

  8. 矩阵的QR分解(jama和emjl对比,UJMP锦上添花)

    一.QR分解法(QR Decomposition) QR分解法是三种将矩阵分解的方式之一.其它两种:Cholesky和LU.QR分解经常用来解线性最小二乘法问题.QR分解也是特定特征值算法即QR算法的 ...

  9. 数据挖掘--矩阵的QR分解

    矩阵的QR分解: A=QR,其中Q为正交矩阵,R为上三角矩阵. 具体可以通过HouseHold变换做到,分步进行,如下图: 如果矩阵A是可逆矩阵的话,那么分出的矩阵R一定是列线性无关的.此时,R的对角 ...

最新文章

  1. oracle手工启动,SQLSERVER服务手工启动 批处理文件
  2. [译] Redux 有多棒?
  3. JavaScript实现最小公倍数LCM算法(附完整源码)
  4. 风雨网规路:跌倒了,是件坏事吗?
  5. 人生应该记住的16句话
  6. linux ubuntu安装 mono,在 Ubuntu Server 上安装配置 Mono 生产环境
  7. Python入门(一) 异常处理
  8. sdoi2015 位图+区间+矩形
  9. Linux| |对于UDP的学习
  10. C#中的表达式与运算符
  11. 以后装个云集群和云节点啥的太简单了(ubuntu)
  12. 三维重建笔记_光束平差法(Bundle Adjustment, BA)
  13. 乐高ev3python教程_入门篇丨使用EV3机器人,趣味学习Python编程语言~
  14. 【项目篇-资料获取】怎么获取创新创业比赛资料、优秀作品?如何去借鉴?
  15. linux下rsync命令,Linux 命令之rsync命令详解
  16. Vue+Vuex+Axios+ECharts 画一个动态更新的中国地图
  17. 外形很犀利 Win7旗舰版全新体验
  18. vue 生命周期 返回不触发_Vue生命周期activated之返回上一页不重新请求数据操作...
  19. 廖雪峰webApp部署
  20. php 加减速 操作,手动挡减挡减速正确方法 加挡先加速减挡先减速

热门文章

  1. nested exception is java.lang.UnsupportedClassVersionError: com/google/common/util/concurrent/MoreEx
  2. python 抢购还是js抢购好_一句JS帮你秒杀,抢购
  3. wepy-小程序开发框架学习(一)
  4. win下一些常用的工具软件及网管管理系统
  5. ftrace--------------trace points
  6. Zabbix 整合ldap认证
  7. 300多名中国人在菲律宾非法就业出事了?
  8. java中浅蓝色代表的代码_淡蓝色的帆
  9. Centos 7 安装python 3.8
  10. 取证分析骗子效果图骗子QQ2902303431