【问题标题】:How come julia won't run this code?为什么 Julia 不会运行这段代码?
【发布时间】:2014-01-31 16:33:11
【问题描述】:

我正在尝试通过翻译一个解决时间相关薛定谔方程的旧示例代码来学习一些关于使用 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(),然后执行 plot(ProbDen),则会出现正确的图表。

感谢您的帮助。

更新:

我现在已经重启了 julia,已经用完 Winston,然后又做了 doit() 才知道:

julia> 使用温斯顿

julia> 要求(“driveSch.jl”)

朱莉娅> doit() 错误:dx 未定义 在 /Users/comerduncan/juliaexamples/TDSch/InitialRIM.jl:8 的初始RIm 在 /Users/comerduncan/juliaexamples/TDSch/driveSch.jl:11

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

【问题讨论】:

  • 您可能应该在输入任何调用plot 的代码之前执行using Winston
  • 实际上,我刚刚从 Mike Nolta 那里听说,使用 display(plot(ProbDens)) 是一个更好的尝试。事实上,它确实有效,而仅仅使用 plot 却没有。

标签: julia


【解决方案1】:

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

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

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

【讨论】:

  • 感谢 cmets。我现在已经解决了所有问题,代码运行良好……而且我学到了一些有用的东西。
猜你喜欢
  • 2023-03-18
  • 2014-08-31
  • 2018-01-24
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
相关资源
最近更新 更多