目录

  • 1 Gram-Schmidt的计算公式推导
  • 2 Gram-Schmidt的意义
  • 3 Modified Gram-Schmidt (以算法模式计算正交向量)
    • 3.1 Modified G-S会出现的问题:当矩阵开始存在微小误差时,会在运算过程中不断累积误差,导致越算越不准确,以至于计算所得的基不正交
  • 4 Stable Gram-Schmidt
    • 4.1 G-S 的复杂度(计算量)
    • 4.2 使用SGS算法解决误差问题
    • 4.3 MGS和SGS运算的区别在哪里?
  • 5 GS和LS(最小二乘法)
  • 6 参考资料

注:本博文为本人阅读论文、文章后的原创笔记,未经授权不允许任何转载或商用行为,否则一经发现本人保留追责权利。有问题可留言联系,欢迎指摘批评,共同进步!!!

1 Gram-Schmidt的计算公式推导

问 :以三维情况为例,已知三个线性无关的向量a\mathbf{a}a、b\mathbf{b}b、c\mathbf{c}c,如何能找到三个正交向量α1\bm{\alpha_1}α1​、α2\bm{\alpha_2}α2​、α3\bm{\alpha_3}α3​,在归一化后能形成标准正交基:e1\mathbf{e_1}e1​、e2\mathbf{e_2}e2​、e3\mathbf{e_3}e3​ ?

公式:

  • 对三个线性无关的向量a\mathbf{a}a、b\mathbf{b}b、c\mathbf{c}c进行Gram-Schmidt正交化,所得的正交向量α1\bm{\alpha_1}α1​、α2\bm{\alpha_2}α2​、α3\bm{\alpha_3}α3​分别为:
    α1=aα2=b−bα1∣α1∣2α1α3=c−cα1∣α1∣2α1−cα2∣α2∣2α2\begin{aligned} \bm{\alpha_1} &= \mathbf{a} \\ \bm{\alpha_2} &= \mathbf{b}-\frac{\mathbf{b} \ \bm{\alpha_1}}{|\bm{\alpha_1}|^2} \ \bm{\alpha_1} \\ \bm{\alpha_3} &= \mathbf{c}-\frac{\mathbf{c} \ \bm{\alpha_1}}{|\bm{\alpha_1}|^2} \ \bm{\alpha_1}-\frac{\mathbf{c} \ \bm{\alpha_2}}{|\bm{\alpha_2}|^2} \ \bm{\alpha_2} \end{aligned} α1​α2​α3​​=a=b−∣α1​∣2b α1​​ α1​=c−∣α1​∣2c α1​​ α1​−∣α2​∣2c α2​​ α2​​
  • 对nnn个线性无关的向量a\mathbf{a}a、b\mathbf{b}b、⋯\cdots⋯、x\mathbf{x}x进行Gram-Schmidt正交化,所得的正交向量α1\bm{\alpha_1}α1​、α2\bm{\alpha_2}α2​、⋯\cdots⋯、αn\bm{\alpha_n}αn​分别为:
    α1=aα2=b−bα1∣α1∣2α1α3=c−cα1∣α1∣2α1−cα2∣α2∣2α2⋮αn=x−xα1∣α1∣2α1−xα2∣α2∣2α2−⋯−xαn−1∣αn−1∣2αn−1\begin{aligned} \bm{\alpha_1} &= \mathbf{a} \\ \bm{\alpha_2} &= \mathbf{b}-\frac{\mathbf{b} \ \bm{\alpha_1}}{|\bm{\alpha_1}|^2} \ \bm{\alpha_1} \\ \bm{\alpha_3} &= \mathbf{c}-\frac{\mathbf{c} \ \bm{\alpha_1}}{|\bm{\alpha_1}|^2} \ \bm{\alpha_1}-\frac{\mathbf{c} \ \bm{\alpha_2}}{|\bm{\alpha_2}|^2} \ \bm{\alpha_2} \\ \vdots \\ \bm{\alpha_n} &= \mathbf{x}-\frac{\mathbf{x} \ \bm{\alpha_1}}{|\bm{\alpha_1}|^2} \ \bm{\alpha_1}-\frac{\mathbf{x} \ \bm{\alpha_2}}{|\bm{\alpha_2}|^2} \ \bm{\alpha_2} \ - \ \cdots - \ \frac{\mathbf{x} \ \bm{\alpha_{n-1}}}{|\bm{\alpha_{n-1}}|^2} \ \bm{\alpha_{n-1}} \end{aligned} α1​α2​α3​⋮αn​​=a=b−∣α1​∣2b α1​​ α1​=c−∣α1​∣2c α1​​ α1​−∣α2​∣2c α2​​ α2​=x−∣α1​∣2x α1​​ α1​−∣α2​∣2x α2​​ α2​ − ⋯− ∣αn−1​∣2x αn−1​​ αn−1​​
    公式解读:在使用第n个向量计算第n个正交向量时,只要在第n个向量中排除掉前(n-1)个正交向量的组分,就能得到第n个正交向量。

具体推导的图解请参看知乎回答。

2 Gram-Schmidt的意义

非正交基转为正交基,便于表示。
通俗来说,就是将一对歪歪斜斜的基向量掰成标准正交基。(强迫症)

3 Modified Gram-Schmidt (以算法模式计算正交向量)

Gram-Schmidt公式推到中的方法是纯数的方法,但是在数值运算方法中(计算机操作)不会严格按照数学方法来。具体如下所述。

  • 从Gram-Schmidt分解结果可以看出:
    若对线性无关向量组{wk\mathbf{w_k}wk​}进行Schmidt正交化得到标准正交基{uk\mathbf{u_k}uk​},经过移项可得到原向量组 可以表示为标准正交基的线性组合:
    w1=r11u1w2=r21u1+r22u2⋮wL=rL1u1+rL2u2+⋯+rLLuL\begin{aligned} \mathbf{w_1} &= r_{11} \ \mathbf{u_1} \\ \mathbf{w_2} &= r_{21} \ \mathbf{u_1} + r_{22} \ \mathbf{u_2} \\ &\vdots \\ \mathbf{w_L} &= r_{L1} \ \mathbf{u_1} + r_{L2} \ \mathbf{u_2} + \cdots + r_{LL}\mathbf{u_L} \\ \end{aligned} w1​w2​wL​​=r11​ u1​=r21​ u1​+r22​ u2​⋮=rL1​ u1​+rL2​ u2​+⋯+rLL​uL​​
    因此,要完成正交化分解,我们需要找系数组{rkr_krk​}和标准正交基{uk\mathbf{u_k}uk​}:

由此,我们看拿出Modified G-S的思想是:
使用第k个线性无关向量组的向量wk\mathbf{w_k}wk​计算第k个正交基uk\mathbf{u_k}uk​时,就是在wk\mathbf{w_k}wk​中排除掉前k−1k-1k−1个正交基的组分,剩余的就是uk\mathbf{u_k}uk​的组分,再除以系数即可。

3.1 Modified G-S会出现的问题:当矩阵开始存在微小误差时,会在运算过程中不断累积误差,导致越算越不准确,以至于计算所得的基不正交

  • 情景:假设eee是一个接近与0的正数(作为一个微小的初始误差),那么请对矩阵W=(111e000e000e)\mathbf{W}\ = \begin{pmatrix} 1 & 1 & 1\\ e & 0 & 0\\ 0 & e & 0\\ 0 & 0 & e \end{pmatrix} W =⎝⎛​1e00​10e0​100e​⎠⎞​ 进行Gram-Schmidt正交化:

    此时问题就很明显地体现出来了,向量u2\mathbf{u_2}u2​和u3\mathbf{u_3}u3​明显不正交,没法作为正交基使用。
    问题的原因:误差“e”作为一个很小的误差,在每一次派出组分操作的过程中都被积累起来了(误差积累),导致越往后算越不准确,Gram-Schmidt就失效了。

为了解决这一问题,就有了Stable Gram-Schmidt算法(SGS)。

4 Stable Gram-Schmidt

不同于Modified Gram-Schmidt,SGS算法的核心思想是:
每使用一个线性无关组向量wk\mathbf{w_k}wk​求出一个单位正交基向量uk\mathbf{u_k}uk​,那么剩余的wk+1\mathbf{w_{k+1}}wk+1​到wL\mathbf{w_L}wL​这些向量都要立即原地减去其中所含的uk\mathbf{u_k}uk​组分,进行更新。

每计算出一个新的单位正交基向量,就当场把剩余线性无关组向量中的此组分排除掉

4.1 G-S 的复杂度(计算量)

4.2 使用SGS算法解决误差问题

与3.1中的问题一致,使用SGS可以抵消微小误差的影响,算法更具有鲁棒性

4.3 MGS和SGS运算的区别在哪里?

我们注意到,使用两种算法计算所得的u3\mathbf{u_3}u3​向量时不同的,因此着重比较一下两算法计算u3\mathbf{u_3}u3​时的差别:(u3=v3∣∣v3∣∣2\mathbf{u_3} = \frac{\mathbf{v_3}}{||\mathbf{v_3}||_2}u3​=∣∣v3​∣∣2​v3​​)

  1. MGS:(当使用到w3\mathbf{w_3}w3​计算u3\mathbf{u_3}u3​时,从w3\mathbf{w_3}w3​中一次性减去u1\mathbf{u_1}u1​和u2\mathbf{u_2}u2​的组分)
    v3=w3−(u1Tw3)u1−(u2Tw3)u2\mathbf{v_3}=\mathbf{w_3}-(\mathbf{u_1^Tw_3})\mathbf{u_1}-(\mathbf{u_2^Tw_3})\mathbf{u_2} v3​=w3​−(u1T​w3​)u1​−(u2T​w3​)u2​
  2. SGS:(当利用w1\mathbf{w_1}w1​求出u1\mathbf{u_1}u1​时,w2\mathbf{w_2}w2​和w3\mathbf{w_3}w3​都立即减去其中所含的u1\mathbf{u_1}u1​组分进行更新;当利用w2new\mathbf{w_2^{new}}w2new​求出u2\mathbf{u_2}u2​时,w3new\mathbf{w_3^{new}}w3new​立即减去其中所含的u2\mathbf{u_2}u2​组分进行更新,然后再求出u3\mathbf{u_3}u3​)
    w3new=w3−(u1Tw3)u1v3=w3new−(u2Tw3new)u2=(w3−(u1Tw3)u1)−(u2T(w3−(u1Tw3)u1))u2=w3−(u1Tw3)u1−(u2Tw3)u2+(u1Tw3)(u2Tu1)u2\begin{aligned} \mathbf{w_3^{new}} &= \mathbf{w_3}-(\mathbf{u_1^Tw_3})\mathbf{u_1} \\ \mathbf{v_3} &= \mathbf{w_3^{new}}-(\mathbf{u_2^Tw_3^{new}})\mathbf{u_2} \\ &= (\mathbf{w_3}-(\mathbf{u_1^Tw_3})\mathbf{u_1})-(\mathbf{u_2^T(\mathbf{w_3}-(\mathbf{u_1^Tw_3})\mathbf{u_1})})\mathbf{u_2} \\ &= \mathbf{w_3}-(\mathbf{u_1^Tw_3})\mathbf{u_1}-(\mathbf{u_2^Tw_3})\mathbf{u_2} + (\mathbf{u_1^T}\mathbf{w_3})(\mathbf{u_2^T}\mathbf{u_1})\mathbf{u_2} \end{aligned} w3new​v3​​=w3​−(u1T​w3​)u1​=w3new​−(u2T​w3new​)u2​=(w3​−(u1T​w3​)u1​)−(u2T​(w3​−(u1T​w3​)u1​))u2​=w3​−(u1T​w3​)u1​−(u2T​w3​)u2​+(u1T​w3​)(u2T​u1​)u2​​
    由此可见,SGS相较于MGS只是多了最后一项(u1Tw3)(u2Tu1)u2(\mathbf{u_1^Tw_3})(\mathbf{u_2^Tu_1})\mathbf{u_2}(u1T​w3​)(u2T​u1​)u2​.

从理论上讲,u1\mathbf{u_1}u1​与u2\mathbf{u_2}u2​是要正交的,因此u2Tu1=0\mathbf{u_2^Tu_1}=0u2T​u1​=0,最后多出的这一项在理论上就是不存在了。
但是在数值计算(计算机运算)时候存在一定的误差,此时最后这一项不再为0,它的存在也有助于保证在误差存在情况下的稳定性
这一项在理论上不存在,但实际上有利于保持stability.

5 GS和LS(最小二乘法)

在一个kkk维空间中,我们已知了k−1k-1k−1个单位正交基向量u1\mathbf{u_1}u1​、u2\mathbf{u_2}u2​、⋯\cdots⋯、uk−1\mathbf{u_{k-1}}uk−1​,这些正交基列向量组成一个矩阵A\mathbf{A}A={u1u2⋯uk−1\mathbf{u_1} \ \mathbf{u_2} \ \cdots \ \mathbf{u_{k-1}}u1​ u2​ ⋯ uk−1​}。此外,还已知一个在kkk维上都有分量的向量w\mathbf{w}w。问:如何找到第kkk个单位正交基向量uk\mathbf{u_k}uk​呢?

实际上,要找到这最后一个正交向量,我们只需要排除掉向量w\mathbf{w}w中所含有的前(k−1k-1k−1)个单位正交向量组分即可。因此,我们可以找一个系数向量x\mathbf{x}x,其中包含了前(k−1k-1k−1)个单位正交向量组分的系数,在所有可能的向量x\mathbf{x}x中,我们希望Ax\mathbf{Ax}Ax就是向量w\mathbf{w}w中前(k−1k-1k−1)个单位正交向量组分,因此可以使用LS算法来进行优化:
x∗=argmin⁡x∣∣w−Ax∣∣22vk=w−Ax∗uk=vk∣∣vk∣∣2\mathbf{x^*} = arg\min_{x}||\mathbf{w}-\mathbf{Ax}||_2^2 \\ \mathbf{v_k} = \mathbf{w}-\mathbf{Ax^*} \\ \mathbf{u_k} = \frac{\mathbf{v_k}}{||\mathbf{v_k}||_2} x∗=argxmin​∣∣w−Ax∣∣22​vk​=w−Ax∗uk​=∣∣vk​∣∣2​vk​​
我们来看看这个最优的x∗\mathbf{x^*}x∗究竟是什么呢?
x∗=argmin⁡x∣∣w−Ax∣∣22=(ATA)ATwk=ATwk=(u1Twk⋮uk−1Twk)\begin{aligned} \mathbf{x^*} &= arg\min_{x}||\mathbf{w}-\mathbf{Ax}||_2^2 \\ &=(\mathbf{A^TA})\mathbf{A^Tw_k} \\ &=\mathbf{A^Tw_k} \\ &= \begin{pmatrix} \mathbf{u_1^Tw_k} \\ \vdots \\ \mathbf{u_{k-1}^Tw_k} \end{pmatrix} \end{aligned} x∗​=argxmin​∣∣w−Ax∣∣22​=(ATA)ATwk​=ATwk​=⎝⎛​u1T​wk​⋮uk−1T​wk​​⎠⎞​​
果然,最优的x∗\mathbf{x^*}x∗就是由向量w\mathbf{w}w中前k−1k-1k−1个单位正交基的组分的系数组成的。这样才能实现∣∣w−Ax∣∣22||\mathbf{w}-\mathbf{Ax}||_2^2∣∣w−Ax∣∣22​的最小化,即当向量w\mathbf{w}w排除到其他组分后,剩下的uk\mathbf{u_k}uk​组分才能恰好与矩阵A\mathbf{A}A所确定的超平面正交
所以,回到问题,最后一个正交向量是:
vk=w−Ax∗(把组分全部排除掉)\mathbf{v_k} = \mathbf{w}-\mathbf{Ax^*}(把组分全部排除掉) vk​=w−Ax∗(把组分全部排除掉)

6 参考资料

  • 讲解视频:数值线性代数之QR分解 (P3~P5)
  • 知乎回答

施密特正交化(Gram-Schmidt Orthogonalization)相关推荐

  1. 施密特正交化(Schmidt)

    n维向量空间 R n R^n Rn中得出的一组线性无关的向量 a 1 , a 2 , . . . . . a n a_1,a_2,.....a_n a1​,a2​,.....an​ 怎么确定一组两两正 ...

  2. 彻底理解施密特正交化

    在游戏编程中我们经常会用到施密特正交化,比如求解法线的切空间,我们需要把一组非正交的坐标系(NBT),转换为正交的坐标系(N B' T'). 施密特正交化如何理解呢?我们先来看看官方给出的解释. 施密 ...

  3. python/sympy计算施密特正交化向量

    sympy的符号计算功能很强大,学习矩阵分析,重温了线性代数中施密特正交化的方法,正好可以用sympy解决一些计算问题.施密特正交化,也称 Gram-Schmidt 正交化过程 (Gram–Schmi ...

  4. 矩阵论——施密特正交化求行列式QR分解

    矩阵论--施密特正交化&求行列式&QR分解 前言 施密特正交化(Schimidt Orthogonalization ) 代码实现 example 求行列式det 代码实现 examp ...

  5. C++实现Schmidt施密特正交化算法(附完整源码)

    C++实现Schmidt施密特正交化算法 C++实现Schmidt施密特正交化算法完整源码(定义,实现,main函数测试) C++实现Schmidt施密特正交化算法完整源码(定义,实现,main函数测 ...

  6. 通俗理解“Schmidt正交化”和“正交矩阵” 此博文包含图片 (2015-05-19 09:50:47) 施密特正交化在空间上是不断建立垂直于原次维空间的新向量的过程。 如图β2垂直于β1(1维)

    通俗理解"Schmidt正交化"和"正交矩阵" 施密特正交化在空间上是不断建立垂直于原次维空间的新向量的过程. 如图β2垂直于β1(1维)构建新2维,β3垂直于 ...

  7. MIT线性代数笔记十七讲 正交矩阵和施密特正交化

      本节是"正交"部分的最后内容.Gram-Schmidt 过程可以将原空间的一组基转变为标准正交基. 文章目录 1. 标准正交向量 Orthonormal vectors 2. ...

  8. 如何通俗地理解施密特正交化

    如何通俗地理解施密特正交化 如果 是某向量空间的基,那么可通过下列做法找到该向量空间中的 个两两正交的向量 : 方法称为施密特正交化(Gram–Schmidt process). 施密特正交化的几何意 ...

  9. 5.5 QR分解一:施密特正交化

    文章目录 计算方法 python实现 数据测试 计算方法   矩阵的正交三角分解QR decomposition,简称QR分解,是找到两个矩阵Q和R使得 A = Q R A=QR A=QR,Q是正交矩 ...

  10. 施密特正交化c语言,C语言实现矩阵的LU分解、施密特正交化、Givens分解、Householder分解...

    <C语言实现矩阵的LU分解.施密特正交化.Givens分解.Householder分解>由会员分享,可在线阅读,更多相关<C语言实现矩阵的LU分解.施密特正交化.Givens分解.H ...

最新文章

  1. 根据excel中的容填写信息
  2. wordpress ajax 调用wpdb_莫名其妙的调用Roboto字体又莫名其妙的恢复的过程
  3. MFC的进程和线程,非正常终止
  4. c++顺序容器vector用法
  5. U盘打不开的解决方法
  6. plc模拟器软件_关于PLC虚拟化的思考当下及未来
  7. C言语实现midpoint euler中点欧拉法解常微分方程(附完整源码)
  8. 这才是真正的Git——Git内部原理揭秘!
  9. python 两阶段聚类_挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法...
  10. 对java支持并发的理解_Java并发知识(1)
  11. 51ak带你看MYSQL5.7源码2:编译现有的代码
  12. 修改 JSON 对象的值
  13. TED如何和压力做朋友(第四天完)
  14. 医院药品管理系统源码 HIS系统源码
  15. Linux面试题总结(2022最新版)
  16. AMS1117和LM2596S芯片的问题总结
  17. 数据库中modify和change的区别
  18. Shiro在线刷新权限
  19. Python查询快递订单信息
  20. C#中的转义字符和Verbatim字符串

热门文章

  1. 软考-已得出栈序列,求栈的最小容量。
  2. pytorch autograd 自动微分与梯度更新
  3. C语言switch选择结构
  4. 冲量在线通过信通院联邦学习信创环境基础能力专项评测
  5. 学习笔记:GAN和DCGAN入门
  6. c语言数组中define,c语言中#define的用法
  7. 拼多多Temu下载量突破5000万次!但这其实没有意义?
  8. 肾结石的诱因有哪些?
  9. A2Billing源码分析笔记(一)
  10. 学习使用js的 random() 方法生成随机数