0


易懂的吉文斯(Givens)变换(一)

文章目录

二阶Givens旋转矩阵

在QR分解中,Givens旋转是一种用于将矩阵变成上三角形的技术。

别的教程里面往往会直接给出一个n*n阶的通用Givens矩阵形式,但是这样太过抽象难懂了,而且难以领略到Givens变换的背后内涵,四臂西瓜我在学习矩阵论的时候就深陷其害,现在我写这篇教程,就是淋过雨,要为后人撑伞!

Givens矩阵,也可以叫旋转矩阵,它实际上是通过旋转,归零矩阵中的特定元素。不好理解吧?看了下面的例子就明白了。

为了方便理解,我们先以二阶为例。

作用于向量

现在我们手上有这么一个向量:

       a 
      
     
       1 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
       
       
        
         
         
           2 
          
         
        
       
      
     
       ) 
      
     
    
   
     a_1 = \begin{pmatrix} 4\\2\end{pmatrix} 
    
   
 a1​=(42​)

现在我们想把这个向量,旋转到x轴上,变成

       a 
      
     
       1 
      
      
       
      
        ′ 
       
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           r 
          
         
        
       
       
        
         
         
           0 
          
         
        
       
      
     
       ) 
      
     
    
   
     a_1^{'} = \begin{pmatrix} r\\0\end{pmatrix} 
    
   
 a1′​=(r0​)

image-20240714002128670

这个变换可以用如下的方式进行表示:

       ( 
      
      
       
        
         
         
           c 
          
         
        
        
         
         
           s 
          
         
        
       
       
        
         
          
          
            − 
           
          
            s 
           
          
         
        
        
         
         
           c 
          
         
        
       
      
     
       ) 
      
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
       
       
        
         
         
           2 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
          
          
            4 
           
          
            c 
           
          
            + 
           
          
            2 
           
          
            s 
           
          
         
        
       
       
        
         
          
          
            − 
           
          
            4 
           
          
            s 
           
          
            + 
           
          
            2 
           
          
            c 
           
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           r 
          
         
        
       
       
        
         
         
           0 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       a 
      
     
       1 
      
      
       
      
        ′ 
       
      
     
    
   
     \begin{pmatrix}c&s\\-s&c\end{pmatrix}\begin{pmatrix}4\\2\end{pmatrix} = \begin{pmatrix}4c+2s \\ -4s+2c \end{pmatrix}=\begin{pmatrix}r\\0\end{pmatrix}= a_1^{'} 
    
   
 (c−s​sc​)(42​)=(4c+2s−4s+2c​)=(r0​)=a1′​

此处的

        ( 
       
       
        
         
          
          
            c 
           
          
         
         
          
          
            s 
           
          
         
        
        
         
          
           
           
             − 
            
           
             s 
            
           
          
         
         
          
          
            c 
           
          
         
        
       
      
        ) 
       
      
     
       = 
      
      
      
        ( 
       
       
        
         
          
           
           
             cos 
            
           
             ⁡ 
            
           
             ( 
            
           
             θ 
            
           
             ) 
            
           
          
         
         
          
           
           
             sin 
            
           
             ⁡ 
            
           
             ( 
            
           
             θ 
            
           
             ) 
            
           
          
         
        
        
         
          
           
           
             − 
            
           
             sin 
            
           
             ⁡ 
            
           
             ( 
            
           
             θ 
            
           
             ) 
            
           
          
         
         
          
           
           
             cos 
            
           
             ⁡ 
            
           
             ( 
            
           
             θ 
            
           
             ) 
            
           
          
         
        
       
      
        ) 
       
      
     
    
      \begin{pmatrix}c&s\\-s&c\end{pmatrix} = \begin{pmatrix}\cos(\theta)&\sin(\theta)\\-\sin(\theta)&\cos(\theta)\end{pmatrix} 
     
    
  (c−s​sc​)=(cos(θ)−sin(θ)​sin(θ)cos(θ)​)

表示一个标准的旋转矩阵。对应向量旋转角度$ \theta$。

于是我们可以得到下面的方程组

      { 
     
     
      
       
        
         
         
           4 
          
         
           c 
          
         
           + 
          
         
           2 
          
         
           s 
          
         
        
       
       
        
         
         
           = 
          
         
           r 
          
         
        
       
      
      
       
        
         
         
           − 
          
         
           4 
          
         
           s 
          
         
           + 
          
         
           2 
          
         
           c 
          
         
        
       
       
        
         
         
           = 
          
         
           0 
          
         
        
       
      
     
    
   
     \left \{ \begin{matrix} 4c+2s &= r \\ -4s+2c &= 0 \end{matrix} \right. 
    
   
 {4c+2s−4s+2c​=r=0​

因为是旋转变换,所以向量的模值不会改变,

     r 
    
   
     = 
    
    
     
      
      
        4 
       
      
        2 
       
      
     
       + 
      
      
      
        2 
       
      
        2 
       
      
     
    
   
  
    r = \sqrt{4^2+2^2} 
   
  
r=42+22​就是这个模值

  
   
    
    
      { 
     
     
      
       
        
         
         
           4 
          
         
           c 
          
         
           + 
          
         
           2 
          
         
           s 
          
         
        
       
       
        
        
          = 
         
        
       
       
        
         
          
           
           
             4 
            
           
             2 
            
           
          
            + 
           
           
           
             2 
            
           
             2 
            
           
          
         
        
       
      
      
       
        
         
         
           − 
          
         
           4 
          
         
           s 
          
         
           + 
          
         
           2 
          
         
           c 
          
         
        
       
       
        
        
          = 
         
        
       
       
        
        
          0 
         
        
       
      
     
    
   
     \left \{ \begin{matrix} 4c+2s &=& \sqrt{4^2+2^2} \\ -4s+2c &=& 0 \end{matrix} \right. 
    
   
 {4c+2s−4s+2c​==​42+22​0​

可以解得

      { 
     
     
      
       
        
        
          c 
         
        
       
       
        
         
          
         
           = 
          
          
          
            2 
           
           
            
             
             
               4 
              
             
               2 
              
             
            
              + 
             
             
             
               2 
              
             
               2 
              
             
            
           
          
         
           = 
          
          
          
            2 
           
           
           
             20 
            
           
          
         
           = 
          
          
          
            2 
           
          
            4.4721 
           
          
         
           = 
          
         
           0.4472 
          
         
        
       
      
      
       
        
        
          s 
         
        
       
       
        
         
          
         
           = 
          
          
          
            4 
           
           
            
             
             
               4 
              
             
               2 
              
             
            
              + 
             
             
             
               2 
              
             
               2 
              
             
            
           
          
         
           = 
          
          
          
            4 
           
           
           
             20 
            
           
          
         
           = 
          
          
          
            4 
           
          
            4.4721 
           
          
         
           = 
          
         
           0.8944 
          
         
        
       
      
     
    
   
     \left \{ \begin{aligned}c&=\frac{2}{\sqrt{4^{2}+2^{2}}}=\frac{2}{\sqrt{20}}=\frac{2}{4.4721}=0.4472\\s&=\frac{4}{\sqrt{4^{2}+2^{2}}}=\frac{4}{\sqrt{20}}=\frac{4}{4.4721}=0.8944\end{aligned} \right. 
    
   
 ⎩⎨⎧​cs​=42+22​2​=20​2​=4.47212​=0.4472=42+22​4​=20​4​=4.47214​=0.8944​

因此可以得到旋转矩阵

      G 
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           c 
          
         
        
        
         
         
           s 
          
         
        
       
       
        
         
          
          
            − 
           
          
            s 
           
          
         
        
        
         
         
           c 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           0.4472 
          
         
        
        
         
         
           0.8944 
          
         
        
       
       
        
         
          
          
            − 
           
          
            0.8944 
           
          
         
        
        
         
         
           0.4472 
          
         
        
       
      
     
       ) 
      
     
    
   
     G=\begin{pmatrix}c&s\\-s&c\end{pmatrix}=\begin{pmatrix}0.4472&0.8944\\-0.8944&0.4472\end{pmatrix} 
    
   
 G=(c−s​sc​)=(0.4472−0.8944​0.89440.4472​)

现在我们终于得到了最终的运算,成功将向量旋转到了x轴上,将y坐标清零。

      G 
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
       
       
        
         
         
           2 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           0.4472 
          
         
        
        
         
         
           0.8944 
          
         
        
       
       
        
         
          
          
            − 
           
          
            0.8944 
           
          
         
        
        
         
         
           0.4472 
          
         
        
       
      
     
       ) 
      
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
       
       
        
         
         
           2 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           4.4721 
          
         
        
       
       
        
         
         
           0 
          
         
        
       
      
     
       ) 
      
     
    
   
     G\begin{pmatrix}4\\2\end{pmatrix}=\begin{pmatrix}0.4472&0.8944\\-0.8944&0.4472\end{pmatrix}\begin{pmatrix}4\\2\end{pmatrix}=\begin{pmatrix}4.4721\\0\end{pmatrix} 
    
   
 G(42​)=(0.4472−0.8944​0.89440.4472​)(42​)=(4.47210​)

作用于矩阵

理解了上述的过程后,现在我们可以看下旋转矩阵作用于矩阵的效果了。我们有如下矩阵,他左边的向量就是上一部分的

      A 
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
        
         
         
           1 
          
         
        
       
       
        
         
         
           2 
          
         
        
        
         
         
           1 
          
         
        
       
      
     
       ) 
      
     
    
   
     A=\begin{pmatrix}4&1\\2&1\end{pmatrix} 
    
   
 A=(42​11​)

直接将上一节计算的旋转矩阵作用于

     A 
    
   
  
    A 
   
  
A

  
   
    
    
      G 
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
        
         
         
           1 
          
         
        
       
       
        
         
         
           2 
          
         
        
        
         
         
           1 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           4.4721 
          
         
        
        
         
         
           1.3416 
          
         
        
       
       
        
         
         
           0 
          
         
        
        
         
          
          
            − 
           
          
            0.4472 
           
          
         
        
       
      
     
       ) 
      
     
    
   
     G\begin{pmatrix}4&1\\2&1\end{pmatrix}=\begin{pmatrix}4.4721&1.3416\\0&-0.4472\end{pmatrix} 
    
   
 G(42​11​)=(4.47210​1.3416−0.4472​)

确实将A矩阵变为了上三角矩阵,实现了QR分解。其中左边的向量,正是上一节计算出来的结果。相信大家看到这里就有所领悟了。

对于矩阵,我们可以把它理解为多个列向量拼接而成。

       a 
      
     
       1 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
       
       
        
         
         
           2 
          
         
        
       
      
     
       ) 
      
     
     
     
     
       a 
      
     
       2 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           1 
          
         
        
       
       
        
         
         
           1 
          
         
        
       
      
     
       ) 
      
     
    
   
     a_1 = \begin{pmatrix} 4\\2\end{pmatrix}\\ a_2 = \begin{pmatrix} 1\\1\end{pmatrix} 
    
   
 a1​=(42​)a2​=(11​)

那么A可以理解为他们水平拼接在一起

      A 
     
    
      = 
     
    
      [ 
     
     
     
       a 
      
     
       1 
      
     
    
      ∣ 
     
    
      ∣ 
     
     
     
       a 
      
     
       2 
      
     
    
      ] 
     
    
   
     A = [a_1||a_2] 
    
   
 A=[a1​∣∣a2​]

根据拼接的运算性质,旋转矩阵作用于A,相当于分别作用于

      a 
     
    
      1 
     
    
   
  
    a_1 
   
  
a1​和 
 
  
   
    
    
      a 
     
    
      2 
     
    
   
  
    a_2 
   
  
a2​,再将它们拼接在一起。

  
   
    
    
      G 
     
    
      ⋅ 
     
    
      [ 
     
     
     
       a 
      
     
       1 
      
     
    
      ∣ 
     
    
      ∣ 
     
     
     
       a 
      
     
       2 
      
     
    
      ] 
     
    
      = 
     
    
      [ 
     
    
      G 
     
    
      ⋅ 
     
     
     
       a 
      
     
       1 
      
     
    
      ∣ 
     
    
      ∣ 
     
    
      G 
     
    
      ⋅ 
     
     
     
       a 
      
     
       2 
      
     
    
      ] 
     
    
   
     G\cdot[a_1||a_2]=[G\cdot a_1||G\cdot a_2] 
    
   
 G⋅[a1​∣∣a2​]=[G⋅a1​∣∣G⋅a2​]

我们现在借助这个性质再来理解下givens作用于矩阵

      G 
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
       
       
        
         
         
           2 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           0.4472 
          
         
        
        
         
         
           0.8944 
          
         
        
       
       
        
         
          
          
            − 
           
          
            0.8944 
           
          
         
        
        
         
         
           0.4472 
          
         
        
       
      
     
       ) 
      
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
       
       
        
         
         
           2 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           4.4721 
          
         
        
       
       
        
         
         
           0 
          
         
        
       
      
     
       ) 
      
     
    
   
     G\begin{pmatrix}4\\2\end{pmatrix}=\begin{pmatrix}0.4472&0.8944\\-0.8944&0.4472\end{pmatrix}\begin{pmatrix}4\\2\end{pmatrix}=\begin{pmatrix}4.4721\\0\end{pmatrix} 
    
   
 G(42​)=(0.4472−0.8944​0.89440.4472​)(42​)=(4.47210​)


  
   
    
    
      G 
     
     
     
       ( 
      
      
       
        
         
         
           1 
          
         
        
       
       
        
         
         
           1 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           0.4472 
          
         
        
        
         
         
           0.8944 
          
         
        
       
       
        
         
          
          
            − 
           
          
            0.8944 
           
          
         
        
        
         
         
           0.4472 
          
         
        
       
      
     
       ) 
      
     
     
     
       ( 
      
      
       
        
         
         
           1 
          
         
        
       
       
        
         
         
           1 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           1.3416 
          
         
        
       
       
        
         
          
          
            − 
           
          
            0.4472 
           
          
         
        
       
      
     
       ) 
      
     
    
   
     G\begin{pmatrix}1\\1\end{pmatrix}=\begin{pmatrix}0.4472&0.8944\\-0.8944&0.4472\end{pmatrix}\begin{pmatrix}1\\1\end{pmatrix}=\begin{pmatrix}1.3416\\-0.4472\end{pmatrix} 
    
   
 G(11​)=(0.4472−0.8944​0.89440.4472​)(11​)=(1.3416−0.4472​)

对于

      a 
     
    
      1 
     
    
   
  
    a_1 
   
  
a1​向量,借助旋转矩阵成功清零y坐标;对于 
 
  
   
    
    
      a 
     
    
      2 
     
    
   
  
    a_2 
   
  
a2​矩阵,旋转矩阵作用后,得到新的向量

这里给大家留个思考,有没有可能,

       a 
      
     
       2 
      
     
    
   
     a_2 
    
   
 a2​矩阵,经过旋转矩阵后y轴也被清零?
      G 
     
    
      ⋅ 
     
    
      [ 
     
     
     
       a 
      
     
       1 
      
     
    
      ∣ 
     
    
      ∣ 
     
     
     
       a 
      
     
       2 
      
     
    
      ] 
     
    
      = 
     
    
      [ 
     
    
      G 
     
    
      ⋅ 
     
     
     
       a 
      
     
       1 
      
     
    
      ∣ 
     
    
      ∣ 
     
    
      G 
     
    
      ⋅ 
     
     
     
       a 
      
     
       2 
      
     
    
      ] 
     
    
      = 
     
    
      [ 
     
    
      G 
     
     
     
       ( 
      
      
       
        
         
         
           4 
          
         
        
       
       
        
         
         
           2 
          
         
        
       
      
     
       ) 
      
     
    
      ∣ 
     
    
      ∣ 
     
    
      G 
     
     
     
       ( 
      
      
       
        
         
         
           1 
          
         
        
       
       
        
         
         
           1 
          
         
        
       
      
     
       ) 
      
     
    
      ] 
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           4.4721 
          
         
        
        
         
         
           1.3416 
          
         
        
       
       
        
         
         
           0 
          
         
        
        
         
          
          
            − 
           
          
            0.4472 
           
          
         
        
       
      
     
       ) 
      
     
    
   
     G\cdot[a_1||a_2]=[G\cdot a_1||G\cdot a_2] =[G\begin{pmatrix}4\\2\end{pmatrix} ||G\begin{pmatrix}1\\1\end{pmatrix}] =\begin{pmatrix}4.4721&1.3416\\0&-0.4472\end{pmatrix} 
    
   
 G⋅[a1​∣∣a2​]=[G⋅a1​∣∣G⋅a2​]=[G(42​)∣∣G(11​)]=(4.47210​1.3416−0.4472​)

现在我们来总结下上面的清空过程,我们选择第一个列向量,通过构造givens矩阵,将其第二行清零,使得矩阵整体变为上三角形式。

到这里,相信大家能够理解最一开始的那句话,givens矩阵通过旋转作用,将矩阵变化为上三角形式。

更一般的情况

我们有如下矩阵,我们希望将c的位置,清零。

      A 
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           a 
          
         
        
        
         
         
           b 
          
         
        
       
       
        
         
         
           c 
          
         
        
        
         
         
           d 
          
         
        
       
      
     
       ) 
      
     
    
   
     A=\begin{pmatrix}a&b\\c&d\end{pmatrix} 
    
   
 A=(ac​bd​)

构造旋转矩阵

      G 
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           c 
          
         
        
        
         
         
           s 
          
         
        
       
       
        
         
          
          
            − 
           
          
            s 
           
          
         
        
        
         
         
           c 
          
         
        
       
      
     
       ) 
      
     
    
   
     G=\begin{pmatrix}c&s\\-s&c\end{pmatrix} 
    
   
 G=(c−s​sc​)

得到

       ( 
      
      
       
        
         
         
           c 
          
         
        
        
         
         
           s 
          
         
        
       
       
        
         
          
          
            − 
           
          
            s 
           
          
         
        
        
         
         
           c 
          
         
        
       
      
     
       ) 
      
     
     
     
       ( 
      
      
       
        
         
         
           a 
          
         
        
       
       
        
         
         
           c 
          
         
        
       
      
     
       ) 
      
     
    
      = 
     
     
     
       ( 
      
      
       
        
         
         
           r 
          
         
        
       
       
        
         
         
           0 
          
         
        
       
      
     
       ) 
      
     
    
   
     \begin{pmatrix}c&s\\-s&c\end{pmatrix}\begin{pmatrix}a\\c\end{pmatrix}=\begin{pmatrix}r\\0\end{pmatrix} 
    
   
 (c−s​sc​)(ac​)=(r0​)

解方程后,我们就可以得到最终的形式:

          s 
         
        
          = 
         
        
          sin 
         
        
          ⁡ 
         
        
          ( 
         
        
          θ 
         
        
          ) 
         
        
          = 
         
         
         
           a 
          
          
           
            
            
              a 
             
            
              2 
             
            
           
             + 
            
            
            
              c 
             
            
              2 
             
            
           
          
         
        
       
      
     
     
      
       
        
        
          c 
         
        
          = 
         
        
          cos 
         
        
          ⁡ 
         
        
          ( 
         
        
          θ 
         
        
          ) 
         
        
          = 
         
         
         
           c 
          
          
           
            
            
              a 
             
            
              2 
             
            
           
             + 
            
            
            
              c 
             
            
              2 
             
            
           
          
         
        
       
      
     
    
   
     \begin{aligned}s=\sin(\theta)=\frac a{\sqrt{a^2+c^2}}\\c=\cos(\theta)=\frac c{\sqrt{a^2+c^2}}\end{aligned} 
    
   
 s=sin(θ)=a2+c2​a​c=cos(θ)=a2+c2​c​​

这边读者可以带入前面的二阶例子中,熟悉计算过程,加深理解。


本文转载自: https://blog.csdn.net/qq_34022877/article/details/140409133
版权归原作者 四臂西瓜 所有, 如有侵权,请联系我们删除。

“易懂的吉文斯(Givens)变换(一)”的评论:

还没有评论