我通过复制Psi的值来声明向量Psi_init。然后,我不再触摸变量Psi_init了。但是当我在代码末尾打印Psi_init的值时,Psi_init的值在for循环后更改为Psi的值。该值实际上是在功能Runge-Kutta的功能返回上更改的。我不明白为什么会发生这种情况。
import numpy as np
from matplotlib import pyplot as plt
from scipy import linalg
#----------------------------------------------------------------
#Function definitions
def f(t,Ham,Psi):
return (-1j*Ham*Psi)
def RungeKutta(t,Ham,Psi,DeltaT):
k1=f(t,Ham,Psi)
k2=f(t+DeltaT/2,Ham,Psi+k1*DeltaT/2)
k3=f(t+DeltaT/2,Ham,Psi+k2*DeltaT/2)
k4=f(t+DeltaT,Ham,Psi+k3*DeltaT)
return Psi+DeltaT/6*(k1+2*k2+2*k3+k4)
#-------------------------------------------------------------------
#Anfangsbedingungen
DeltaT=0.01
finalT=1.0
NumOfIt=int(finalT/DeltaT)+1
omega1=5.0
omega2=3.0
Psi=np.matrix([[1],[0]],dtype=np.complex)
Psi_init=Psi
Ham=np.matrix([[omega1,0],[0,omega2]])
Zustand=np.zeros((2,NumOfIt),dtype=np.complex)
time=np.linspace(0,finalT,NumOfIt,endpoint='true')
#---------------------------------------------------------------------
#Zeitentwicklung
for t in time:
ii=int(t/DeltaT)
Psi[0:2] =RungeKutta(t,Ham,Psi,DeltaT)[0:2]
Zustand[0:2,ii:ii+1]=Psi[0:2]
print Psi_init