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