带变量bound的Julia循环给出"无效索引"

Xen*_*tro 0 julia

在朱利亚,我这样做:

N=1000;
for i = 2:N,
    alpham[i] = 0.1 * (V[i-1]+40.) / (1. - exp(-(V[i-1]+40.)/10.));
end
Run Code Online (Sandbox Code Playgroud)

使用lenght 1000的alpham和V向量.我得到错误"ArgumentError:invalid index:1.0".但是,如果我这样做:

for i = 2:1000,
Run Code Online (Sandbox Code Playgroud)

它确实有效.是否有任何理由为什么前一个没有或有什么方法我仍然可以在我的for循环中使用N?难道我做错了什么?

在此先感谢Xentro

Mic*_*ard 8

ArgumentError告诉您正在使用a Float64进行索引,这样做不是在Julia中定义的.在您的最小工作示例(MWE)中,您初始化N为1000(an Int),因此MWE实际上不会重现错误,但在您的注释中,您注意到在原始代码中,您获得N as floor(x),这将返回一个浮点数.为了满足Int您的需求floor(Int, x).

还有一些语法问题:你不应该有一个,after for i = 2:1000,并且通常没有必要结束语句;.

请注意,您应该确保MWE可以纯粹通过复制粘贴REPL中的代码来运行(即需要初始化变量alpham, V = ones(1000), ones(1000)).在发布之前自己运行它以确保它重现您报告的错误,并捕获任何语法错误.

  • @Xentro使用`40等作为文字也不是好的风格.点`.`在很多Julia代码中起着重要作用,因此可能会造成混淆甚至导致错误.`3. + 4`与`3不同.+ 4`.使用"40.0"代替它,它更具可读性.事实上,在你的情况下,你可能更好地使用整数文字,`exp( - (V [i-1] +40)/ 10)`将类型提升为你想要的. (2认同)