为什么朱莉娅不会运行此代码?

时间:2014-01-31 16:33:12

标签: julia

我正在尝试通过翻译一个解决时间依赖的薛定谔方程的旧示例代码来学习使用Julia。以下是我到目前为止的情况:

require("setparams.jl")
require("V.jl")
require("InitialRIM.jl")
#require("expevolve.jl")


function doit()

    Nspace, R, Im, x0, width, k0, xmax, xmin, V0, a, dx, dx2, n, dt = setparams()   
R, Im = initialRIm(width,n,k0,dt,xmin)
ProbDen = zeros(Nspace)
ProbDen = R.*R + Im.*Im
plot(ProbDen)
#Imold = Im;
t=0.0
#t, R =evolve!(R,Im,t,V0,width,a,dx,dx2,dt,xmin,n)

println("Done")

end

在需要上面的代码之后,我会使用Winston。然后我尝试通过输入doit()来运行代码。什么也没出现。

有人可以让我知道我做错了什么吗?如果需要的话,我可以提供setuparame()的内部,以及initialRIm()但是我首先想到我会问我对应该发生什么的期望是错误的。请注意,如果我在终端会话中运行setuparams()和initialRIm(),然后执行绘图(ProbDen),则会显示正确的图形。

感谢您的帮助。

更新

我现在已经重新启动了julia,已经完成了使用Winston,然后完成了doit():

朱莉娅>使用温斯顿

朱莉娅>要求( “driveSch.jl”)

朱莉娅> DOIT() 错误:dx未定义  在initialRIm at /Users/comerduncan/juliaexamples/TDSch/InitialRIM.jl:8  在doit at /Users/comerduncan/juliaexamples/TDSch/driveSch.jl:11

但是,调用setparams()会将dx与所有其他内容一起设置。这是我在交互式运行setparams()时看到的。所以我不明白这是什么问题...

1 个答案:

答案 0 :(得分:1)

您似乎在dx中使用initialRIm,但dx不是您传递给它的参数之一。如果您访问的变量不是参数,也不是在Julia函数中指定的,那么Julia将在周围的范围中查找具有相同名称的变量。当你运行

Nspace, R, Im, x0, width, k0, xmax, xmin, V0, a, dx, dx2, n, dt = setparams()

在全局范围内,您创建dx可以访问的全局变量initialRIm。将调用包装到函数中时,会创建无法从dx访问的局部变量initialRIm