带变量界的Julia循环给出;无效索引“;

带变量界的Julia循环给出;无效索引“;,julia,Julia,在朱莉娅,当我这样做时: N=1000; for i = 2:N, alpham[i] = 0.1 * (V[i-1]+40.) / (1. - exp(-(V[i-1]+40.)/10.)); end 长度为1000的字母和V矢量。我得到错误“ArgumentError:无效索引:1.0”。但是,如果我这样做: for i = 2:1000, 它确实有效。是否有任何原因导致前一个没有,或者是否有任何方式我仍然可以在for循环中使用N?我做错什么了吗 提前感谢,, XentroArg

在朱莉娅,当我这样做时:

N=1000;
for i = 2:N,
    alpham[i] = 0.1 * (V[i-1]+40.) / (1. - exp(-(V[i-1]+40.)/10.));
end
长度为1000的字母和V矢量。我得到错误“ArgumentError:无效索引:1.0”。但是,如果我这样做:

for i = 2:1000,
它确实有效。是否有任何原因导致前一个没有,或者是否有任何方式我仍然可以在for循环中使用N?我做错什么了吗

提前感谢,,
Xentro

ArgumentError告诉您正在使用一个
Float64
进行索引,但这在Julia中没有定义。在最小工作示例(MWE)中,您将
N
初始化为1000(一个
Int
),这样MWE实际上不会再现错误,但在您的注释中,您注意到,在原始代码中,您得到的N是
floor(x)
,它返回一个浮点。要获得
Int
,您需要
floor(Int,x)

还有一些语法问题:对于i=2:1000,在
之后不应该有
,并且通常不需要以
结束语句


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

您确定它不是
N=1000?否-您需要
N=floor(Int,…)
才能获得Int。您不能使用Float进行索引。顺便说一句,您应该发布MWE(最简单的工作示例)(包括
alpham,V=one(1000),one(1000)
以便人们可以复制粘贴代码,您应该在发布之前运行MWE,以确保它复制错误。在这种情况下,您的MWE实际上运行没有问题。2个小注释:1)您不需要使用
结束语句它只是把代码弄乱了。2) 对于i=2:1000,请不要在
之后放置
。删除逗号可修复此问题,非常感谢。我以为你需要;抑制输出。我习惯于用C++编码。PS:很抱歉没有包含MWE,但我有一个很大的代码体,很难找到所有相关的行,我只知道N是1k,但它是在top@Xentro使用
40.
等作为文字也是不好的风格。点
在许多代码中起着重要作用,因此可能会造成混淆,甚至导致错误<代码>3。+4与
3不同+4
。改用
40.0
,它更具可读性。事实上,在您的情况下,只使用整型文字可能更好,
exp(-V[i-1]+40)/10)
会将类型提升为您想要的类型。谢谢您的提示。我从我的教授那里复制粘贴的那部分。