基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵

目录

前言

一、Givens旋转简介

二、Givens旋转解释

三、Givens旋转进行QR分解

四、Givens旋转进行QR分解数值计算例子

 五、求逆矩阵

六、MATLAB仿真

七、参考资料

总结


前言

        在进行QR分解时,HouseHolder变换一次将一个向量除第一个元素以外都转化成零。而有一种方法,可以每次将向量的一个元素转化成0,也可以最终达到正交化的目的,它就是Givens旋转。Givens旋转矩阵是正交矩阵,使用Givens旋转很容易就可以将一个向量的某个分量的某个指定分量化为0。本文会通过列举例子说明如何将一个矩阵通过Givens旋转分解为Q矩阵和R矩阵,最后,会用MATLAB进行仿真,当然,代码也会分享出来。


提示:以下是本篇文章正文内容,希望能帮助到各位,转载请附上链接。

一、Givens旋转简介

        Givens旋转矩阵是正交矩阵,使用Givens旋转很容易就可以将一个向量的某个分量的某个指定分量化为0。

        本文中主要考虑实数的情况。

        2×2的Givens旋转矩阵如下:

\mathbf{G}=\begin{bmatrix}\cos\theta&\sin\theta\\-\sin\theta&\cos\theta\end{bmatrix}

其中 

\cos\theta=\frac{x}{\sqrt{x^2+y^2}},\quad\sin\theta=\frac{y}{\sqrt{x^2+y^2}}

那么就可以将向量\textbf{v}=[x \ y]^T旋转到x轴上面去,如下图所示。当然改变正余弦函数也能旋转到y轴上面去。

\textbf{w}=\textbf{Gv}=\begin{bmatrix}\cos\theta&\sin\theta\\-\sin\theta&\cos\theta\end{bmatrix}\begin{bmatrix} x\\ y \end{bmatrix}=\begin{bmatrix} x\cos\theta+y\sin\theta\\ -x\sin\theta+y\cos\theta \end{bmatrix}= \begin{bmatrix} \sqrt{x^2+y^2}\\ 0 \end{bmatrix}

        可以把简写三角函数,如下所示

\begin{bmatrix}c&s\\-s&c\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}\sqrt{x^2+y^2}\\0\end{bmatrix}

二、Givens旋转解释

        我们将向量\textbf{v}=[x \ y]^T看成一个复数,即

z_1=x+iy=re^{i\varphi}=r\cos\varphi+ir\sin\varphi

\left.\textbf{G}\cdot\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}\cos\theta&\sin\theta\\-\sin\theta&\cos\theta\end{bmatrix}\left[\begin{array}{c}x\\y\end{array}\right.\right]=\left[\begin{array}{c}x\cos\theta+y\sin\theta\\\\-x\sin\theta+y\cos\theta\end{array}\right]

将其也看成一个复数

z_2=(x\cos\theta+y\sin\theta)+i(-x\sin\theta+y\cos\theta)\\ \\=r[(\cos\varphi\cos\theta+\sin\varphi\sin\theta)+i(\sin\varphi\cos\theta-\sin\theta\cos\varphi)]\\ \\ =r(\cos(\varphi-\theta)+i\sin(\varphi-\theta))\\ \\=re^{i(\varphi-\theta)}

对比z_1=re^{i\varphi}z_2=re^{i(\varphi-\theta)},学过复数的话,显然就能看出这是顺时针旋转了\theta的角度。

三、Givens旋转进行QR分解

        下面我们来说明如何通过Givens旋转来实现QR分解。其实原理很简单,就是通过将原矩阵A的主对角线下方的元素都通过Givens旋转置换成0,形成上三角矩阵R,同时左乘的一系列Givens矩阵相乘得到一个正交阵Q
        如下图所示,G(m,n)是Givens旋转矩阵,相当于用某一列的第m个元素去将第n个元素清零。

        也可以通过下图来理解,其中×表示没有发生变化的元素,m表示值改变的元素,每一个向右的箭头表示原矩阵左乘了1次Givens矩阵。

        由上图我们会发现清一个0时只影响两行,所以对一个高阶矩阵,在清某一列的几个0时可以同时执行,加快计算速度。比如对于4×4阶矩阵,可以在选第1列的第1个元素去将第一列的第2个元素清零的同时,也选择第1列的第3个元素去将第一列的第4个元素清零。

四、Givens旋转进行QR分解数值计算例子

        设矩阵\textbf{A}=\begin{bmatrix}0&&4&&2\\0&&3&&1\\2&&1&&-2\end{bmatrix},用Givens旋转的方法对其进行QR分解。

解:由于其第1列的第2个元素已经为0了,不用对它进行消0操作,我们首先用第1列的第1个元素对第1列的第3个元素清0。

易求

c=\frac{0}{\sqrt{0^2+2^2}}=0,\:\: s=\frac{2}{\sqrt{0^2+2^2}}=1

则Givens矩阵可写为

\textbf{G}_1=\begin{bmatrix} 0 &0 &1 \\ 0&1 &0 \\ -1& 0 &0 \end{bmatrix}

所以

\textbf{G}_1\textbf{A}=\begin{bmatrix} 0 &0 &1 \\ 0&1 &0 \\ -1& 0 &0 \end{bmatrix}\begin{bmatrix}0&&4&&2\\0&&3&&1\\2&&1&&-2\end{bmatrix}=\begin{bmatrix}2&&1&&-2\\0&&3&&1\\0&&-4&&-2\end{bmatrix}

接下来对上面结果右下角的四个元素进行Givens旋转,用3去将-4消为0。

易求

c=\frac{3}{\sqrt{3^2+(-4))^2}}=\frac{3}{5},\:\: s=\frac{-4}{\sqrt{3^2+(-4))^2}}=-\frac{4}{5}

则Givens矩阵可写为

\textbf{G}_2=\begin{bmatrix} 1 &0 &0 \\ 0&\frac{3}{5}&-\frac{4}{5}\\ 0& \frac{4}{5} &\frac{3}{5} \end{bmatrix}

所以

\textbf{G}_2\textbf{G}_1\textbf{A}=\begin{bmatrix} 1 &0 &0 \\ 0&\frac{3}{5}&-\frac{4}{5}\\ 0& \frac{4}{5} &\frac{3}{5} \end{bmatrix}\begin{bmatrix}2&&1&&-2\\0&&3&&1\\0&&-4&&-2\end{bmatrix}=\begin{bmatrix} 2 &1 &-2 \\ 0&5&\frac{11}{5}\\ 0& 0 &-\frac{2}{5} \end{bmatrix}

所以

\textbf{R}=\begin{bmatrix} 2 &1 &-2 \\ 0&5&\frac{11}{5}\\ 0& 0 &-\frac{2}{5} \end{bmatrix}

所以

\textbf{Q}=(\textbf{G}_2\textbf{G}_1)^T=\textbf{G}_1^T\textbf{G}_2^T\\\\=\begin{bmatrix} 0 &0 &-1 \\ 0&1 &0 \\ 1& 0 &0 \end{bmatrix}\begin{bmatrix} 1 &0 &0 \\ 0&\frac{3}{5}&\frac{4}{5}\\ 0& -\frac{4}{5} &\frac{3}{5} \end{bmatrix}\\ \\ \\=\begin{bmatrix} 0 &\frac{4}{5} &-\frac{3}{5} \\ 0&\frac{3}{5}&\frac{4}{5}\\ 1& 0 &0\end{bmatrix}

\textbf{A}=\textbf{QR}=\begin{bmatrix} 0 & \frac{4}{5} & \frac{-3}{5} \\ 0& \frac{3}{5}& \frac{4}{5} \\ 1 &0&0 \end{bmatrix} \begin{bmatrix}2&1&-2\\0&5&\frac{11}{5}\\0&0&\frac{-2}{5}\end{bmatrix}=\begin{bmatrix}0&4&2\\0&3&1\\2&1&-2\end{bmatrix}

 五、求逆矩阵

        分解得到Q矩阵和R矩阵后可参考下面两篇文章进行求逆矩阵:

        施密特正交化QR分解求逆矩阵与MATLAB仿真:http://t.csdnimg.cn/d1IGR

        一种基于约化因子上三角矩阵求逆方法与MATLAB仿真:http://t.csdnimg.cn/uZJkG

六、MATLAB仿真

        可见,仿真结果和上面的数值计算结果吻合。

七、参考资料

        参考资料:https://download.csdn.net/download/m0_66360845/89043215


总结

        以上就是今天要讲的内容,本文介绍了Givens旋转,在我理解的基础上讲解了它的几何意义,以及怎样用它将可逆矩阵分解成Q矩阵和R矩阵。同时,也用MATLAB验证了Givens旋转 QR分解算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/504331.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python基础——文件操作【文件编码、文件的打开与关闭操作、文件读写操作】

📝前言: 这篇文章主要讲解一下python中对于文件的基础操作: 1,文件编码 2,文件的打开与关闭操作 3,文件读写操作 🎬个人简介:努力学习ing 📋个人专栏:C语言入…

docker centos7在线安装Nginx

目录 1.在线安装Nginx2.配置开机启动 1.在线安装Nginx # 安装Nginx yum install epel-release yum install nginx2.配置开机启动 # 启动Nginx systemctl start nginx # 开机自启 systemctl enable nginx一般docker内的centos7安装Nginx的目录结构是: /etc/nginx为…

蓝桥杯第七届大学B组详解

目录 1.煤球数量; 2.生日蜡烛; 3.凑算式 4.方格填数 5.四平方和 6.交换瓶子 7.最大比例 1.煤球数量 题目解析:可以根据题目的意思,找到规律。 1 *- 1个 2 *** 3个 3 ****** 6个 4 ********** 10个 不难发现 第…

教培机构办公管理系统B端实战项目作品集Figma源文件

这是一套教培机构办公管理系统设计复盘作品集,都提供分层源文件 交付文件:设计复盘作品集源文件作品集里面的B端设计项目包装样机字体文件 交付格式:figma 作品集文件页数:19页 B端项目文件页数:15页 B端项目源文…

linux文件系统:VFS

文章目录 vfs1 super_block2 dentry2.1 dentry树2.2 dentry的cache2.3 挂载 3 inode4 文件file5 vfs各结构体的关系 vfs Linux内核通过虚拟文件系统(Virtual File System,VFS)管理文件系统 VFS为所有的文件系统提供了统一的接口&#xff0c…

算法沉淀——动态规划篇(子数组系列问题(上))

算法沉淀——动态规划篇(子数组系列问题(上)) 前言一、最大子数组和二、环形子数组的最大和三、乘积最大子数组四、乘积为正数的最长子数组长度 前言 几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都…

Available platform plugins are: linuxfb, minimal, offscreen, vnc.

说明: buildroots根文件中已经移植好了QT的库,但是运行QT交叉编译之后的可执行文件报错: qt.qpa.plugin: Could not find the Qt platform plugin "eglfs" in "" This application failed to start because no Qt platf…

P4995 跳跳!(贪心)

多么痛的领悟&#xff01;大数据要开long long&#xff01;&#xff01;&#xff01;简单longlong就AC&#xff01; 代码1&#xff1a; #include<algorithm> #include<iostream> #include<cstring> #include<queue> #include<cmath> using name…

哪种排序算法在不同情况下性能最好?

哪种排序算法在不同情况下性能最好&#xff1f;&#x1f50d;&#x1f4ca; 哪种排序算法在不同情况下性能最好&#xff1f;&#x1f50d;&#x1f4ca;&#x1f4dd; 摘要&#x1f680; 引言&#x1f4cb; 正文内容&#xff08;详细介绍&#xff09;冒泡排序快速排序&#x1f…

基于ssm旅游资源网站(java项目+文档+源码)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的旅游资源网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 旅游资源网站的主要使用者分为管理…

RK3588平台开发系列讲解(I2C开发篇)

目录 前言 I2C 流程 Trasmint only mode(I2C_CON[1:0]2’b00) Mix mode (I2C_CON[1:0]2’b01 or I2C_CON[1:0]2’b11) Receive only mode (I2C_CON[1:0]2’b10) I2C 驱动参数配置 I2C 使用 1 Kernel space 2User space GPIO 模拟 I2C I2C 常见问题 前言 ROCKCHIP 系…

四、戴尔R630本地服务器Linux Centos7.9系统安装docker-ce-20.10.10-3.el7版本

如需查阅上一步骤,请点击下面链接:3、Linux Centos7.9系统的iDRAC远程管理、网络设置、SecureCRT远程登录终端、企业级静态ip地址配置-CSDN博客文章浏览阅读898次,点赞17次,收藏15次。iDRAC连接登录服务器远程管理。https://blog.csdn.net/weixin_67440240/article/details…

【Anaconda】Linux下Anaconda安装和虚拟环境配置

Linux下Anaconda安装和虚拟环境配置 一、安装anaconda二、conda虚拟环境管理三、jupyter相关启动部署四、遇到问题 下面介绍整体流程&#xff0c;遇到问题优先看“遇到问题章节”&#xff01; 一、安装anaconda 1.下载anaconda安装包 &#xff08;1&#xff09;可以选择在官网…

linux i2c-tools使用总结

1,安装iic-tools sudo apt install i2c-tools -y 2,查看有几条iic总线 [root@sino-platform:/root]# ls /dev/i2c- i2c-0 i2c-1 i2c-2 i2c-3 3,查看i2c命令 [root@sino-platform:/root]# i2c i2cdetect i2cdump i2cget i2cset 4,iic-help命令 [root@sino-platform…

postcss安装和使用(详细)

1,安装postcss&#xff1a; 在此之前需要安装有node.js 第一步 命令&#xff1a;cnpm install postcss-cli -g 第二步 命令&#xff1a;cnpm install postcss –g 推荐内容 2,下载autoprefixer插件&#xff0c;并创建postcss.config.js文件并写入配置代码 autoprefixer插件…

信息素养和社会责任

1.信息素养&#xff1a; 信息素养是一种了解、收集、评估、和利用信息的知识结构能力。 信息素养的四个要素&#xff1a;信息意识&#xff0c;信息知识&#xff0c;信息能力&#xff0c;信息道德 信息意识是先导&#xff08;前提&#xff09;&#xff0c;是对关键信息具有持…

大学教材《C语言程序设计》(浙大版)课后习题解析 | 第七、八章

概述 本文主要提供《C语言程序设计》(浙大版) 第七、八章的课后习题解析&#xff0c;以方便同学们完成题目后作为参考对照。后续将更新第九、十章节的课后习题解析&#xff0c;如想了解更多&#xff0c;请持续关注该专栏。 专栏直达链接&#xff1a;《C语言程序设计》(浙大版)…

【OceanBase实战之路】第3篇:多租户架构实现资源隔离

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 一、什么是OceanBase的多租户二、兼容模式2.1 MySQL 模式2.2 Oracle 模式三、租户介绍3.1 系统租户3.2 用户租户3.3 Meta 租…

STLExporter 是用于将 Three.js 场景中的几何体数据导出为 STL 格式的类。

demo案例 STLExporter 是用于将 Three.js 场景中的几何体数据导出为 STL 格式的类。下面是关于 STLExporter 的入参、出参、方法和属性的讲解&#xff1a; 入参 (Parameters): scene: THREE.Scene 类型的参数&#xff0c;表示要导出为 STL 格式的 Three.js 场景对象。 出参…

Python API(happybase)操作Hbase案例

一、Windows下安装Python库&#xff1a;happybase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase&#xff0c;需要开启HBase的Thrift服务。所以&#xff0c;在Linux服务器上&#xff0c;执行如…