如何解决python中复数矩阵向量乘法的分歧
我有一个 20x20 的矩阵 C0 和一个长度为 20 的一维数组 v0。矩阵和向量中的元素都是复数。我想将 v0 中的每个第 i 个元素与矩阵 C0 第 j 行中的第 i 个元素相乘,并在 python 中对它们求和。
我尝试使用两种方法来做到这一点,一种是使用 numpy 中的 matmul 函数,另一种是通过显式编写 for 循环。代码如下:
方法一
L2 = L//2 # L=20
ks = np.arange(0,L2)
g1 = np.zeros((len(ts),L2),dtype=complex) # len(ts)=20
for ik in range(L2):
kx = -np.pi+2*ik*np.pi/L2
v0 = np.array([-1*np.exp(-1j*kx*(r/2)) for r in range(L)])
g1[:,ik] = np.matmul(C0,np.transpose(v0))
方法二
L2=L//2 # L=20
g2 = np.zeros((len(ts),dtype=complex)
for it in range(len(ts)): # len(ts)=20
for ik in range(L2):
kx = -np.pi+2.0*np.pi*ik/L2
for r in range(L):
g2[it,ik] = g2[it,ik]-np.exp(-1j*kx*(r/2.0))*C0[it,jp]
我认为这两个代码基本上计算的是同一个东西。但是,如果我使用以下代码将它们绘制出来:
plt.figure()
plt.plot(np.real(g1[:,7]),'x')
plt.plot(np.real(g2[:,'d')
plt.title('real part of g[:,7]')
plt.figure()
plt.plot(np.imag(g1[:,'x')
plt.plot(np.imag(g2[:,'d')
plt.title('imag part of g[:,7]')
情节看起来像
g 的实部大致一致,我可以理解轻微的偏差可能是由于 for 循环中的一些错误积累。然而,对于虚部,从方法 1 获得的 g1 与从方法 2 获得的 g2 非常不同。关于为什么会这样或者我是否在代码中做错了什么的任何想法?
任何帮助将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。