np.dot(psi_tag, psi_tag.conj().T), H_tot)和np.dot(psi_tag, H_tot), psi_tag.conj().T)的区别
时间: 2023-04-05 15:01:48 浏览: 197
这两个式子的区别在于矩阵乘法的顺序不同。第一个式子是先将 psi_tag 和其共轭转置矩阵相乘,再与 H_tot 矩阵相乘;而第二个式子是先将 psi_tag 和 H_tot 矩阵相乘,再与其共轭转置矩阵相乘。因为矩阵乘法不满足交换律,所以这两个式子的结果可能不同。
相关问题
详解 psis_all_orth=psis_all_origin[:] for loop_psi in range(len(psis_all_origin)): psi_temp=psis_all_origin[loop_psi] for loop_n in range(loop_psi): psi_temp=psi_temp- np.dot(psis_all_orth[loop_n].conj().T, psis_all_orth[loop_psi])[0][0] * psis_all_orth[loop_n] if np.sqrt(np.dot(psi_temp.conj().T, psi_temp))[0][0] > 0.01: # print('len of psi',loop_psi,np.sqrt(np.dot(psi_temp.conj().T, psi_temp))[0][0]) psi_temp = psi_temp * 1.0 / np.sqrt(np.dot(psi_temp.conj().T, psi_temp)[0][0]) psis_all_orth[loop_psi] = psi_temp
这段代码的作用是对一个包含多个向量的列表进行正交化处理,生成一个新的正交向量列表psis_all_orth。
具体实现方式是:先将原始向量列表psis_all_origin复制一份,赋值给psis_all_orth。然后对于psis_all_origin中的每一个向量,都进行以下操作:
1. 将该向量赋值给临时变量psi_temp。
2. 对于已经处理过的向量列表中的每一个向量,都进行以下操作:
a. 计算该向量与当前处理的向量的内积,将其乘以已处理向量的单位向量。
b. 将该向量减去上述结果,得到一个新的向量。
3. 判断新的向量的模长是否大于0.01,如果是,则将其添加到正交向量列表psis_all_orth中。
最终,psis_all_orth中的向量两两正交,且模长均大于0.01。
逐句解释error_factor=np.random.rand(2**cluster_num, 1) * 2*error + 1-error psi_temp=psig_HA_gBg*error_factor psig_HA_gBg=psi_temp*1.0 / np.sqrt(np.dot(psi_temp.conj().T, psi_temp)[0][0])
这是一段 Python 代码,其中使用了 numpy 库中的随机数生成函数 np.random.rand(),生成了一个大小为 2 的 cluster_num 次方乘以 1 的矩阵 error_factor,并将其乘以 2*error-1,得到一个大小相同的矩阵。接着,使用 psig_HA_gBg 与 error_factor 相乘,得到一个新的矩阵 psi_temp。最后,将 psi_temp 除以其本身的模长,得到一个单位向量 psig_HA_gBg。
阅读全文
相关推荐

















