自己動手寫施密特正交化

2021-07-28 04:06:14 字數 697 閱讀 7164

import numpy as np

a = np.array([[1,1,0],[0,1,1],[1,0,1]],dtype=float)

q = np.zeros_like(a)

m = shape(q)[0]

n = shape(q)[1]

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] = e

cnt += 1

print q

以上是自己寫的,也可以呼叫scipy
from scipy import linalg

a = np.array([[1,1,0],[0,1,1],[1,0,1]])

a = linalg.orth(a)

print array(linalg.orth(a),dtype=float)

print dot(a,a.t)-1

施密特正交化的原理就不在此贅述了,可以自己從網上找一些線性代數的教材看一看,並且自己動手做一下,就可以理解了

施密特正交化

對於一組向量,有時候我們需要對其進行正交化處理,也就是說,該組向量中任意兩個向量都是互相垂直的。那麼,要怎麼做呢?假設只有兩個向量,vec v 0 和 vec v 1 正交化的幾何示意圖如下所示。假設正交化之後的向量為 vec w 0 和 vec w 1 那麼由圖可知,可得 vec w 0 vec ...

列正交化 施密特正交化方法

a1 1 1 0 0 a2 1 0 1 0 a3 1 0 0 1 a a1 a2 a3 u a m,n size u y u y 1 y 1 norm y 1 for k 2 n y k u k endfor k 2 n for j k n y j y j y k 1 y j y k 1 endp1...

向量的施密特正交化

先看乙個例子 設三個向量分別為 1 2 3 1,1,0 t 1,0,1 t 1,1,1 t 那麼對 1 2 正交化 1 2 1 1 1,0 t 2 2,1 1,1 1 1,0 1 t 1 1 0 1 1 01 1 1 1 0 0 1,1,0 t 1 0,1 t 12 1 1,0 t 12 1 1,2...