Julia 为什么朱莉娅赢了';你不能运行这个代码吗?

Julia 为什么朱莉娅赢了';你不能运行这个代码吗?,julia,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()

我正在尝试通过翻译一个解决依赖时间的薛定谔方程的旧示例代码来学习如何使用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()来:

朱莉娅>使用温斯顿

julia>require(“driveSch.jl”)

朱莉娅>多伊特() 错误:未定义dx 在initialRIm中/Users/comerduncan/juliaexamples/TDSch/initialRIm.jl:8 在doit的/Users/comerduncan/juliaexamples/TDSch/driveSch.jl:11中


但是,对setparams()的调用会设置dx以及所有其他内容。当我以交互方式运行setparams()时,我看到了这一点。所以我不明白问题出在哪里…

似乎您在
initialRIm
中使用了
dx
,但
dx
不是您传递给它的参数之一。如果访问的变量不是参数,也不是在Julia函数中赋值的,Julia将在周围的作用域中查找同名变量。当你跑的时候

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

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

访问该变量。在输入任何代码调用
plot
之前,您可能应该使用Winston执行
操作。实际上,我刚从Mike Nolta那里听说使用display(plot(ProbDens))是一个更好的尝试。事实上,它确实有效,而仅仅使用plot却没有。谢谢你的评论。我现在已经解决了所有问题,代码运行得很好……另外,我还学到了一些有用的东西。