函数返回时更改变量

时间:2017-07-26 07:59:59

标签: python function

我通过复制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

0 个答案:

没有答案