0


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

文章目录

二阶Givens旋转矩阵

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

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

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

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

作用于向量

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

  1. a
  2. 1
  3. =
  4. (
  5. 4
  6. 2
  7. )
  8. a_1 = \begin{pmatrix} 4\\2\end{pmatrix}
  9. a1​=(42​)

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

  1. a
  2. 1
  3. =
  4. (
  5. r
  6. 0
  7. )
  8. a_1^{'} = \begin{pmatrix} r\\0\end{pmatrix}
  9. a1′​=(r0​)

image-20240714002128670

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

  1. (
  2. c
  3. s
  4. s
  5. c
  6. )
  7. (
  8. 4
  9. 2
  10. )
  11. =
  12. (
  13. 4
  14. c
  15. +
  16. 2
  17. s
  18. 4
  19. s
  20. +
  21. 2
  22. c
  23. )
  24. =
  25. (
  26. r
  27. 0
  28. )
  29. =
  30. a
  31. 1
  32. \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^{'}
  33. (c−s​sc​)(42​)=(4c+2s−4s+2c​)=(r0​)=a1′​

此处的

  1. (
  2. c
  3. s
  4. s
  5. c
  6. )
  7. =
  8. (
  9. cos
  10. (
  11. θ
  12. )
  13. sin
  14. (
  15. θ
  16. )
  17. sin
  18. (
  19. θ
  20. )
  21. cos
  22. (
  23. θ
  24. )
  25. )
  26. \begin{pmatrix}c&s\\-s&c\end{pmatrix} = \begin{pmatrix}\cos(\theta)&\sin(\theta)\\-\sin(\theta)&\cos(\theta)\end{pmatrix}
  27. (cssc​)=(cos(θ)−sin(θ)​sin(θ)cos(θ)​)

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

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

  1. {
  2. 4
  3. c
  4. +
  5. 2
  6. s
  7. =
  8. r
  9. 4
  10. s
  11. +
  12. 2
  13. c
  14. =
  15. 0
  16. \left \{ \begin{matrix} 4c+2s &= r \\ -4s+2c &= 0 \end{matrix} \right.
  17. {4c+2s4s+2c​=r=0

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

  1. r
  2. =
  3. 4
  4. 2
  5. +
  6. 2
  7. 2
  8. r = \sqrt{4^2+2^2}
  9. r=42+22​就是这个模值
  10. {
  11. 4
  12. c
  13. +
  14. 2
  15. s
  16. =
  17. 4
  18. 2
  19. +
  20. 2
  21. 2
  22. 4
  23. s
  24. +
  25. 2
  26. c
  27. =
  28. 0
  29. \left \{ \begin{matrix} 4c+2s &=& \sqrt{4^2+2^2} \\ -4s+2c &=& 0 \end{matrix} \right.
  30. {4c+2s4s+2c​==​42+220

可以解得

  1. {
  2. c
  3. =
  4. 2
  5. 4
  6. 2
  7. +
  8. 2
  9. 2
  10. =
  11. 2
  12. 20
  13. =
  14. 2
  15. 4.4721
  16. =
  17. 0.4472
  18. s
  19. =
  20. 4
  21. 4
  22. 2
  23. +
  24. 2
  25. 2
  26. =
  27. 4
  28. 20
  29. =
  30. 4
  31. 4.4721
  32. =
  33. 0.8944
  34. \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.
  35. ⎩⎨⎧​cs​=42+222​=202​=4.47212​=0.4472=42+224​=204​=4.47214​=0.8944

因此可以得到旋转矩阵

  1. G
  2. =
  3. (
  4. c
  5. s
  6. s
  7. c
  8. )
  9. =
  10. (
  11. 0.4472
  12. 0.8944
  13. 0.8944
  14. 0.4472
  15. )
  16. G=\begin{pmatrix}c&s\\-s&c\end{pmatrix}=\begin{pmatrix}0.4472&0.8944\\-0.8944&0.4472\end{pmatrix}
  17. G=(cssc​)=(0.44720.89440.89440.4472​)

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

  1. G
  2. (
  3. 4
  4. 2
  5. )
  6. =
  7. (
  8. 0.4472
  9. 0.8944
  10. 0.8944
  11. 0.4472
  12. )
  13. (
  14. 4
  15. 2
  16. )
  17. =
  18. (
  19. 4.4721
  20. 0
  21. )
  22. 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}
  23. G(42​)=(0.44720.89440.89440.4472​)(42​)=(4.47210​)

作用于矩阵

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

  1. A
  2. =
  3. (
  4. 4
  5. 1
  6. 2
  7. 1
  8. )
  9. A=\begin{pmatrix}4&1\\2&1\end{pmatrix}
  10. A=(4211​)

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

  1. A
  2. A
  3. A
  4. G
  5. (
  6. 4
  7. 1
  8. 2
  9. 1
  10. )
  11. =
  12. (
  13. 4.4721
  14. 1.3416
  15. 0
  16. 0.4472
  17. )
  18. G\begin{pmatrix}4&1\\2&1\end{pmatrix}=\begin{pmatrix}4.4721&1.3416\\0&-0.4472\end{pmatrix}
  19. G(4211​)=(4.472101.34160.4472​)

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

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

  1. a
  2. 1
  3. =
  4. (
  5. 4
  6. 2
  7. )
  8. a
  9. 2
  10. =
  11. (
  12. 1
  13. 1
  14. )
  15. a_1 = \begin{pmatrix} 4\\2\end{pmatrix}\\ a_2 = \begin{pmatrix} 1\\1\end{pmatrix}
  16. a1​=(42​)a2​=(11​)

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

  1. A
  2. =
  3. [
  4. a
  5. 1
  6. a
  7. 2
  8. ]
  9. A = [a_1||a_2]
  10. A=[a1​∣∣a2​]

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

  1. a
  2. 1
  3. a_1
  4. a1​和
  5. a
  6. 2
  7. a_2
  8. a2​,再将它们拼接在一起。
  9. G
  10. [
  11. a
  12. 1
  13. a
  14. 2
  15. ]
  16. =
  17. [
  18. G
  19. a
  20. 1
  21. G
  22. a
  23. 2
  24. ]
  25. G\cdot[a_1||a_2]=[G\cdot a_1||G\cdot a_2]
  26. G⋅[a1​∣∣a2​]=[Ga1​∣∣Ga2​]

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

  1. G
  2. (
  3. 4
  4. 2
  5. )
  6. =
  7. (
  8. 0.4472
  9. 0.8944
  10. 0.8944
  11. 0.4472
  12. )
  13. (
  14. 4
  15. 2
  16. )
  17. =
  18. (
  19. 4.4721
  20. 0
  21. )
  22. 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}
  23. G(42​)=(0.44720.89440.89440.4472​)(42​)=(4.47210​)
  24. G
  25. (
  26. 1
  27. 1
  28. )
  29. =
  30. (
  31. 0.4472
  32. 0.8944
  33. 0.8944
  34. 0.4472
  35. )
  36. (
  37. 1
  38. 1
  39. )
  40. =
  41. (
  42. 1.3416
  43. 0.4472
  44. )
  45. 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}
  46. G(11​)=(0.44720.89440.89440.4472​)(11​)=(1.34160.4472​)

对于

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

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

  1. a
  2. 2
  3. a_2
  4. a2​矩阵,经过旋转矩阵后y轴也被清零?
  1. G
  2. [
  3. a
  4. 1
  5. a
  6. 2
  7. ]
  8. =
  9. [
  10. G
  11. a
  12. 1
  13. G
  14. a
  15. 2
  16. ]
  17. =
  18. [
  19. G
  20. (
  21. 4
  22. 2
  23. )
  24. G
  25. (
  26. 1
  27. 1
  28. )
  29. ]
  30. =
  31. (
  32. 4.4721
  33. 1.3416
  34. 0
  35. 0.4472
  36. )
  37. 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}
  38. G⋅[a1​∣∣a2​]=[Ga1​∣∣Ga2​]=[G(42​)∣∣G(11​)]=(4.472101.34160.4472​)

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

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

更一般的情况

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

  1. A
  2. =
  3. (
  4. a
  5. b
  6. c
  7. d
  8. )
  9. A=\begin{pmatrix}a&b\\c&d\end{pmatrix}
  10. A=(acbd​)

构造旋转矩阵

  1. G
  2. =
  3. (
  4. c
  5. s
  6. s
  7. c
  8. )
  9. G=\begin{pmatrix}c&s\\-s&c\end{pmatrix}
  10. G=(cssc​)

得到

  1. (
  2. c
  3. s
  4. s
  5. c
  6. )
  7. (
  8. a
  9. c
  10. )
  11. =
  12. (
  13. r
  14. 0
  15. )
  16. \begin{pmatrix}c&s\\-s&c\end{pmatrix}\begin{pmatrix}a\\c\end{pmatrix}=\begin{pmatrix}r\\0\end{pmatrix}
  17. (cssc​)(ac​)=(r0​)

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

  1. s
  2. =
  3. sin
  4. (
  5. θ
  6. )
  7. =
  8. a
  9. a
  10. 2
  11. +
  12. c
  13. 2
  14. c
  15. =
  16. cos
  17. (
  18. θ
  19. )
  20. =
  21. c
  22. a
  23. 2
  24. +
  25. c
  26. 2
  27. \begin{aligned}s=\sin(\theta)=\frac a{\sqrt{a^2+c^2}}\\c=\cos(\theta)=\frac c{\sqrt{a^2+c^2}}\end{aligned}
  28. s=sin(θ)=a2+c2ac=cos(θ)=a2+c2c​​

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


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

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

还没有评论