Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用julia中for循环的结果填充向量?_Julia - Fatal编程技术网

如何用julia中for循环的结果填充向量?

如何用julia中for循环的结果填充向量?,julia,Julia,我正在构建一个卡尔曼滤波器来提取arma模型,现在我已经为arma(1,1)制作了它。为了优化似然函数,我需要存储所有创新值和它们的协方差矩阵。 我是茱莉亚的新手,我用的大多是r。 这是我的密码: for i=1:length(y) x=A*x Vt=y[i]-Z'x Ft=Z'*P*Z Kt=(A*P*Z)/Ft x=A*x+Kt*Vt P=A*(P-(P*Z*Z'*P)/Ft)*A'+R*R'*sigma^2 end 它正在工作。如果我尝试以这种方式存储Vt值: v= zeros(

我正在构建一个卡尔曼滤波器来提取arma模型,现在我已经为arma(1,1)制作了它。为了优化似然函数,我需要存储所有创新值和它们的协方差矩阵。 我是茱莉亚的新手,我用的大多是r。 这是我的密码:

    for i=1:length(y)
x=A*x
Vt=y[i]-Z'x
Ft=Z'*P*Z
Kt=(A*P*Z)/Ft
x=A*x+Kt*Vt
P=A*(P-(P*Z*Z'*P)/Ft)*A'+R*R'*sigma^2
end
它正在工作。如果我尝试以这种方式存储Vt值:

v= zeros(1:1000)
for i=1:length(y)
x=A*x
Vt=y[i]-Z'x
v[i]=Vt
Ft=Z'*P*Z
Kt=(A*P*Z)/Ft
x=A*x+Kt*Vt
P=A*(P-(P*Z*Z'*P)/Ft)*A'+R*R'*sigma^2
end
我收到一条错误消息thta说:“MethodError:Cannot
convert
Array{Float64,1}类型的对象为Int64类型的对象” 我尝试了不同的方法,比如使用dataframs等,但我不断收到关于对象类型不可转换的错误,我只设法将Vt的最后一个值保存为dataframe,但在整个循环过程中我需要它的值。
我怎样才能解决这个问题?我认为这很简单,但我不习惯编程。谢谢大家!

重申评论中的答案:

零(1:1000)
更改为
零(1000)
。并通过替换为
v[i]=Vt[1]
或确保
Vt
为标量,确保赋值
v[i]=Vt
的右侧和左侧具有相同的形状/类型


抽象向量a
(这次
a
1:1000
)传递给
zero
调用
zero(typeof(a),length(a))
,这通常很方便,但有时会让人惊讶。

问题是Vt是一个值的向量,而不是一个值,因此不能将它放入v的元素中。如果您知道Vt始终是长度为1的向量,您可以将
v[i]=Vt
替换为
v[i]=Vt[1]
谢谢!如果我“手动”执行,它似乎工作正常,但当我打开循环时,它会显示“不精确错误()”,我不知道原因…将
零(1:1000)
更改为
零(1000)
。后者创建一个1000长的零浮点64向量。前者创建了一个Int64向量。谢谢,现在它工作正常了!这是非常有益的!好的捕获-将
AbstractVector
a
传递给
zero
调用
zero(typeof(a),length(a))
,通常很方便,但有时会令人惊讶。