正交化,简单地说,就是指把若干向量转化成互相之间夹角为90度的状态,这样互相之间没有影响。否则,不满足正交性的因子,相互会影响各自的回归系数,从而可能导致回归系数过大等估计误差,从而影响该因子的评价。
这里讨论最常见的施密特正交化。

1、施密特正交化的几何解释

给定一组基α1,α2,…,αn,将其变换成另外一组正交基β1,β2,…,βn,使这两组基等价
施密特正交化方法:

1)在二维的情况下

此时有两个向量α、β,其中 α 在 β 上的投影向量为

如图红色部分即为投影部分

则蓝色部分向量为

对应两个向量的施密特法则

可见蓝色向量 β2 与β1是垂直的。
以上公式也可以推算得到。
先令向量 β1 = α1,只要找到另外一个新的向量 β2,使得 β2 与 β1 内积为0,这两个向量就是正交的了。如何寻找?

根据向量之间的运算关系,因为 β2 由 β1、α2 得到,则我们可以设
β2=k1β1+k2β2\beta_2=k_1\beta_1+k_2\beta_2β2​=k1​β1​+k2​β2​
因为 β2 与 β1 内积为0,因此
(β1,β2)=(β1,k1β1+k2β2)=0(\beta_1,\beta_2)=(\beta_1,k_1\beta_1+k_2\beta_2)=0(β1​,β2​)=(β1​,k1​β1​+k2​β2​)=0
则有
⇒k1(β1,β1)+k2(β2,α1)=0\Rightarrow k_1(\beta_1,\beta_1)+k_2(\beta_2,\alpha_1)=0⇒k1​(β1​,β1​)+k2​(β2​,α1​)=0
⇒k1=−k2(α2,β1)(β1,β1)\Rightarrow k_1=-\frac{k_2(\alpha_2,\beta_1)}{(\beta_1,\beta_1)}⇒k1​=−(β1​,β1​)k2​(α2​,β1​)​
因此
β2=k2α2−k2(α2,β1)(β1,β1)α1\beta_2=k_2\alpha_2-\frac{k_2(\alpha_2,\beta_1)}{(\beta_1,\beta_1)}\alpha_1β2​=k2​α2​−(β1​,β1​)k2​(α2​,β1​)​α1​
令 k = 1,就得到了新的正交向量 β1\beta_1β1​与β2\beta_2β2​。

举个栗子(没看错,是举着栗子。。。),现有矩阵 [a, b]
a=[111]a=\left[ \begin{matrix} 1\\ 1 \\ 1\\ \end{matrix} \right]a=⎣⎡​111​⎦⎤​,b=[102]b=\left[\begin{matrix} 1\\0\\2\\ \end{matrix} \right]b=⎣⎡​102​⎦⎤​

根据以上公式有:
A = a
B=b−ATbATAAB=b-\frac{A^Tb}{A^TA}AB=b−ATAATb​A
代入具体数值,有
A=[111]A=\left[ \begin{matrix} 1\\ 1 \\ 1\\ \end{matrix} \right]A=⎣⎡​111​⎦⎤​
B=[102]−[111][102][111][111][111]=[0−11]B=\left[\begin{matrix} 1\\0\\2\\ \end{matrix} \right]-\frac{[1 1 1]\left[\begin{matrix} 1\\0\\2\\ \end{matrix} \right]}{[1 1 1]\left[ \begin{matrix} 1\\ 1 \\ 1\\ \end{matrix} \right]}\left[ \begin{matrix} 1\\ 1 \\ 1\\ \end{matrix} \right]=\left[ \begin{matrix} 0\\ -1 \\ 1\\ \end{matrix} \right]B=⎣⎡​102​⎦⎤​−[111][111​][111][102​]​⎣⎡​111​⎦⎤​=⎣⎡​0−11​⎦⎤​

2)在三维的情况下

即向量个数为3时,对应三维空间的几何解释如图 。

其中绿色的为需要正交的原始基αi(α1是红色的因为α1同时也是β1)
将二维得到的β2平移到坐标原点出后则α3在xoy平面的投影即是

即α3在β1和β2上的投影组成的平行四边形的斜边,则得到的β3就是α3与该投影的向量差,即红色部分的β3,显然可以看出来β1,β2,β3是正交的。

从推算的角度,我们可以令
β3=k1β1+k2β2+k3α3\beta_3=k_1\beta_1+k_2\beta_2+k_3\alpha_3β3​=k1​β1​+k2​β2​+k3​α3​
要让(β1,β3)=0(\beta_1,\beta_3)=0(β1​,β3​)=0,需要
(β1,β3)=k1(β1,β1)+k2(β1,β2)+k3(β1,α3)=0(\beta_1,\beta_3)=k_1(\beta_1,\beta_1)+k_2(\beta_1,\beta_2)+k_3(\beta_1,\alpha_3)=0(β1​,β3​)=k1​(β1​,β1​)+k2​(β1​,β2​)+k3​(β1​,α3​)=0

⇒k1=−k3(α3,β1)(β1,β1)\Rightarrow k_1=-\frac{k_3(\alpha_3,\beta_1)}{(\beta_1,\beta_1)}⇒k1​=−(β1​,β1​)k3​(α3​,β1​)​

要让(β2,β3)=0(\beta_2,\beta_3)=0(β2​,β3​)=0,需要
(β2,β3)=k1(β1,β2)+k2(β2,β2)+k3(β2,α3)=0(\beta_2,\beta_3)=k_1(\beta_1,\beta_2)+k_2(\beta_2,\beta_2)+k_3(\beta_2,\alpha_3)=0(β2​,β3​)=k1​(β1​,β2​)+k2​(β2​,β2​)+k3​(β2​,α3​)=0

⇒k2=−k3(α3,β2)(β2,β2)\Rightarrow k_2=-\frac{k_3(\alpha_3,\beta_2)}{(\beta_2,\beta_2)}⇒k2​=−(β2​,β2​)k3​(α3​,β2​)​
因此
β3=k3α3−k3(α3,β1)(β1,β1)β1−k3(α3,β2)(β2,β2)β2\beta_3=k_3\alpha_3-\frac{k_3(\alpha_3,\beta_1)}{(\beta_1,\beta_1)}\beta_1-\frac{k_3(\alpha_3,\beta_2)}{(\beta_2,\beta_2)}\beta_2β3​=k3​α3​−(β1​,β1​)k3​(α3​,β1​)​β1​−(β2​,β2​)k3​(α3​,β2​)​β2​

三维以上空间里的公式以此类推。

2、代码实现

import numpy as np
A = np.array([[1,1,0],[0,1,1],[1,0,1]],dtype=float)
Q = np.zeros_like(A)
m, n = Q.shape
cnt = 0
for a in A.T:u = np.copy(a)for i in range(0, cnt):u -= np.dot(np.dot(Q[:, i].T, a), Q[:, i]) # 减去待求向量在以求向量上的投影e = u / np.linalg.norm(u)  # 归一化Q[:, cnt] = ecnt += 1
print(Q)

或者

from scipy import linalg
A = np.array([[1,1,0],[0,1,1],[1,0,1]])
a = linalg.orth(A)
print(np.array(linalg.orth(A),dtype=float))
print(np.dot(A,A.T)-1)

参考:
1、施密特正交化的几何解释
2、自己动手写施密特正交化
3、揭秘施密特正交化

施密特正交化的几何解释与代码实现相关推荐

  1. 施密特正交化的几何解释

    向量投影公式推导:https://blog.csdn.net/weixin_33991418/article/details/85459591 施密特正交化的几何解释 :https://blog.cs ...

  2. 矩阵论 施密特正交化的几何解释_最直观图解法

    线性代数中最头疼的公式恐怕就是施密特正交化了.但其实搞清楚它的几何原理之后公式的记忆就简单多了,数学重在理解! 给定一组基α1,α2,...,αnα1,α2,...,αn 首先清除一个公式,两个向量α ...

  3. 数值计算——施密特正交化

    施密特正交化单位正交基C++代码 使用施密特正交化得出单位正交基的完整代码 #include <time.h> #include <iostream> #include < ...

  4. 施密特正交化及QR分解(附实现代码)

    施密特正交化 施密特正交化(Gram-Schmidt Orthogonality)是常用的求欧式空间正交基的方法.给定一个线性无关向量组a1,a2,...,ama_1,a_2,...,a_ma1​,a ...

  5. matlab格拉姆施密特,改进的格拉姆-施密特正交化(modified Gram-Schmidt Process)

    最近在重新学习线性代数,学习的教材是MIT Gilbert Strang 教授的<INTRODUCTION TO LINEAR ALGEBRA>,在第4.4章节格拉姆-施密特正交化时,书中 ...

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

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

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

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

  8. java实现施密特正交化

    今天线代课刚学了这个 施密特正交化 然后今天老师布置的作业就是这个 我这一看,这计算量,就我这计算水平,难免会有算错的 所以就自己写了个程序帮我计算,啊不对,是帮我验证我算的对不对 程序是用java写 ...

  9. c语言实现向量组的标准/规范正交基(施密特正交化)

    问题:任意一个向量组求标准正交基,尽量用C/C++. 思路:下面是我找的课本上面的算向量组标准正交基的方法.第一步,用施密特正交化方法,使向量组正交:第二步,将向量组各向量单位化. 代码实现: #in ...

最新文章

  1. 在OpenCV环境下写的两个图像平移C和C++源代码
  2. Asp.NET获取文件及其路径
  3. 本地连接虚拟机的redis
  4. 如何成为python 数据分析师_如何七周成为数据分析师20:了解和掌握Python的函数...
  5. 腾讯AI Lab副主任俞栋:语音识别领域的现状与进展
  6. [C++STL]string容器用法介绍
  7. java websocket client,java基础面试笔试题
  8. Kotlin — 适用于数据科学
  9. 闪字在线制作php源码,闪光字图片制作 在线制作图片加闪光字
  10. VMware虚拟机安装与使用
  11. 设置google浏览器为黑色底色
  12. 卷积神经网络之 - 残差⽹络(RESNET)
  13. 计算机组成与系统结构(课程设计)
  14. Delphi中的线程类--之(1)
  15. 西电、成电的风雨往事
  16. Yahoo Programming Contest 2019 D - Ears
  17. EMI+ EMC基础知识
  18. 黑马培训的点滴(前端)
  19. 题解 - CF662C Binary Table
  20. ai智能外呼系统营销服务一体化中的必备工具

热门文章

  1. Unity 关卡数据的实现
  2. ATM交换机技术专项
  3. 如何去掉ul和li前面的小黑点
  4. CSS的动画效果-旋转
  5. Ubuntu 打开mysql 操作日志
  6. 会计对象 会计科目 会计账户之间的关系
  7. PLC模拟量输出 模拟量转换 S_RTI(CODESYS平台 ST代码)
  8. 第七周 牛刀小试
  9. r语言remarkdown展示图_R语言学习笔记--R bookdown图表设置中英文双标题
  10. 更省更快更安全的云服务器,一站式集中管理,随时随地远程——站斧云桌面