Create one_example_of_orthogonalization.py
This commit is contained in:
parent
d2b76e2cd7
commit
047c2353b6
@ -0,0 +1,63 @@
|
||||
"""
|
||||
This code is supported by the website: https://www.guanjihuan.com
|
||||
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/10890
|
||||
"""
|
||||
|
||||
import numpy as np
|
||||
|
||||
a = [[ 0 , 0 , 1.5 , 0.32635182-0.98480775j],
|
||||
[0 , 0 , -0.32635182-0.98480775j, 1.5 ],
|
||||
[ 1.5 , -0.32635182+0.98480775j ,0, 0 ],
|
||||
[ 0.32635182+0.98480775j , 1.5 , 0, 0 ]]
|
||||
|
||||
def Schmidt_orthogonalization(eigenvector):
|
||||
num = eigenvector.shape[1]
|
||||
for i in range(num):
|
||||
for i0 in range(i):
|
||||
eigenvector[:, i] = eigenvector[:, i] - eigenvector[:, i0]*np.dot(eigenvector[:, i].transpose().conj(), eigenvector[:, i0])/(np.dot(eigenvector[:, i0].transpose().conj(),eigenvector[:, i0]))
|
||||
eigenvector[:, i] = eigenvector[:, i]/np.linalg.norm(eigenvector[:, i])
|
||||
return eigenvector
|
||||
|
||||
def verify_orthogonality(vectors):
|
||||
identity = np.eye(vectors.shape[1])
|
||||
product = np.dot(vectors.T.conj(), vectors)
|
||||
return np.allclose(abs(product), identity)
|
||||
|
||||
# 对 np.linalg.eigh() 的特征向量正交化
|
||||
|
||||
E, v = np.linalg.eigh(a)
|
||||
print(verify_orthogonality(v))
|
||||
|
||||
v1 = Schmidt_orthogonalization(v)
|
||||
print(verify_orthogonality(v1))
|
||||
|
||||
from scipy.linalg import orth
|
||||
v2 = orth(v)
|
||||
print(verify_orthogonality(v2))
|
||||
|
||||
v3, S, Vt = np.linalg.svd(v)
|
||||
print(verify_orthogonality(v3))
|
||||
|
||||
v4, R = np.linalg.qr(v)
|
||||
print(verify_orthogonality(v4))
|
||||
|
||||
print()
|
||||
|
||||
|
||||
# 对 np.linalg.eig() 的特征向量正交化
|
||||
|
||||
E, v = np.linalg.eig(a)
|
||||
print(verify_orthogonality(v))
|
||||
|
||||
v1 = Schmidt_orthogonalization(v)
|
||||
print(verify_orthogonality(v1))
|
||||
|
||||
from scipy.linalg import orth
|
||||
v2 = orth(v)
|
||||
print(verify_orthogonality(v2))
|
||||
|
||||
v3, S, Vt = np.linalg.svd(v)
|
||||
print(verify_orthogonality(v3))
|
||||
|
||||
v4, R = np.linalg.qr(v)
|
||||
print(verify_orthogonality(v4))
|
Loading…
x
Reference in New Issue
Block a user