我有一个随机矩阵Htest
,它有复数元素,我用scipy.linalg.eig
对角化了它。有了分解的矩阵,我试图重建原始矩阵。这是我的剧本
import numpy as np
import scipy as sp
import random
L0=4
Htest= np.array([[random.random()+1j*random.random() for e in range(L0)] for e in range(L0)])
# calculate spin energy levels
E, Vl, Vr=sp.linalg.eig(Htest,left=True)#
E=np.array(E)
Vl=np.array(Vl)
Vr=np.array(Vr)
idx = E.argsort()[::1]#sort with smallest eigenvalues
Es = E[idx]
Vrs = Vr[:,idx]
Vls = Vl[:,idx]
# This should be a null matrix, but it is not!
print(np.round( (Htest)- Vls.T.conj() @ np.diag(Es) @Vrs ,3))
#This works
for i in range(L0):
print(np.round( np.dot(Htest , Vrs[:,i] )- Es[i] * Vrs[:,i] ,3))
print(np.round( np.dot(Htest.conj().T, Vls[:,i] )- Es[i].conj() * Vls[:,i],3))
字符串
你有什么建议可以解决这个问题吗?
1条答案
按热度按时间tcbh2hod1#
使用
np.random.rand
制作(4,4)复杂数组。字符串
分解:
型
输出已经是数组。测试不分类。
型
使用`svd:
型
我不记得足够的linalg来纠正这一点(尚未)
型
使用
diag
的替代方法:型
我不知道这是否有用。
关于从特征值和特征向量重新创建矩阵的一般网络搜索会出现一些StackExchange问题,一些SO,一些数学。这似乎是有限制的(对称?)。您可能需要提供数学参考。
编辑
型
从早期的测试:
型
对于
Vl
,也是同样的逻辑:型