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

2024-03-28 01:44

本文主要是介绍基于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分解算法。

这篇关于基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854073

相关文章

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

python安装完成后可以进行的后续步骤和注意事项小结

《python安装完成后可以进行的后续步骤和注意事项小结》本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、... 目录验证安装配置环境(可选)安装python包创建和运行Python脚本虚拟环境(可选)注意事项安装

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

poj 2187 凸包or旋转qia壳法

题意: 给n(50000)个点,求这些点与点之间距离最大的距离。 解析: 先求凸包然后暴力。 或者旋转卡壳大法。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <s

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

二维旋转公式

二维旋转公式 ros的tf工具包可以很方便的实现任意坐标系之间的坐标转换。但是,如果只是想简单的测试想法,而又不想编写过于庞杂的代码,考虑自己写二维旋转的函数。而与二维旋转问题对偶的另一个问题便是二维坐标系旋转变换。这两个问题的形式基本一样,只是旋转的角度相差一个负号。就是这个容易搞混,所以做个笔记,以备查用。 1. 二维旋转公式(算法) 而(此文只针对二维)旋转则是表示某一坐标点 ( x

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x