Givens变换

本文深入探讨了Givens变换的定义与性质,这是一种在数值线性代数中用于将向量特定分量化零的旋转变换。文章首先介绍了Givens变换的基本形式,随后详细解释了其如何通过旋转向量在特定平面内的分量来实现这一目标。此外,还提供了计算Givens变换参数的有效数值方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘抄自《数值线性代数(徐树方)》

Givens变换是一种将n维向量x在第(i,k)两个维度确定的坐标平面内进行旋转(从而将其中一个分量化0)的变换,因此它又叫平面旋转变换。

Householder变换将一个向量中的若干个分量化0相比,Givens变换将向量的其中一个分量化0。

本篇先介绍Givens变换的定义及其性质,再推导一种用于求Givens变换的数值化方法

一、Givens变换的定义及性质

 定义:Givens变换有以下形式:

 

 

        公式1

 

 

 

 

其中:c=cosθ,s=sinθ ,易证G(i,k,θ)是一个正交矩阵。

公式1看起来有些复杂,但其实可以注意到G(i,k,θ)的构成十分简单:将n×n的单位矩阵I在(i,i),(i,k),(k,i),(k,k)位置的元素替换成c,s,-s,c,从数值上看,G(i,k,θ)x的结果y

\[\left\{ \begin{array}{l}
{y_i} = c{x_i} + s{x_k}\\
{y_k} = - s{x_i} + c{x_k}\\
{y_j} = {x_j},j \ne i,k
\end{array} \right.\]

从几何上看,G(i,k,θ)的效果实际上是将向量x沿k→i的角度旋转了θ角度。

若要yk=0,只需取:

$c = \frac{{{x_i}}}{{\sqrt {x_i^2 + x_k^2} }},s = \frac{{{x_k}}}{{\sqrt {x_i^2 + x_k^2} }}$  公式2

为了避免溢出,实际上并不是按照公式2计算c和s,而是按照以下公式:

\[\left[ {\begin{array}{*{20}{c}}
c&s\\
{ - s}&c
\end{array}} \right]\left[ \begin{array}{l}
a\\
b
\end{array} \right] = \left[ \begin{array}{l}
r\\
0
\end{array} \right]\]

二、用于计算Givens变换的算法

 

 

转载于:https://www.cnblogs.com/reasno/p/9643529.html

### Givens 变换矩阵的定义 在数值分析线性代数中,Givens 变换矩阵是一种用于执行旋转操作的正交矩阵。对于任意两个实数 \(a\) \(b\),存在一个 2×2 的 Givens 矩阵 \(G(c,s)\),其中 \(c=\cos(\theta)\) \(s=\sin(\theta)\)[^1]: \[ G(c, s) = \begin{pmatrix} c & s \\ -s & c \end{pmatrix} \] 当应用于更高维度的空间时,Givens 矩阵通常是一个单位矩阵,除了第 \(i,i\)、\(j,j\)、\(i,j\) \(j,i\) 这四个位置上的元素外。 ### 实现方法 为了构建一个 n 维空间中的 Givens 矩阵来零化向量的一个特定分量,可以按照如下方式创建该矩阵并将其乘以原向量: ```python import numpy as np def givens_rotation(i, j, theta, size): """Create a Givens rotation matrix.""" mat = np.eye(size) c, s = np.cos(theta), np.sin(theta) mat[i, i] = c mat[j, j] = c mat[i, j] = -s mat[j, i] = s return mat ``` 通过调整参数 `theta` 来控制旋转角度,从而达到所需的变换效果。 ### 应用场景 #### QR 分解 Givens 变换常被用来实现矩阵的 QR 分解,在此过程中逐步将给定矩阵转换成上三角形式。这种方法具有良好的数值稳定性,并且适用于稠密矩阵以及稀疏矩阵的情况。 #### 解决最小二乘问题 利用 Givens 变换可有效地求解超定方程组(即未知数少于独立观测值),这有助于提高计算效率与精度。 #### 特征值计算 尽管不是最常用的方法之一,但在某些情况下也可以采用基于 Givens 转换的技术来进行特征分解或奇异值分解(SVD)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值