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

时间:2017-11-13 21:49:21

标签: julia

我正在构建一个kalman过滤器以扩展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

我收到一条错误消息:" MethodError:不能convert类型为Array {Float64,1}的对象到Int64类型的对象" 我试图以不同的方式做到这一点,比如使用dataframs等,但我不断发现有关不可转换的对象类型的错误,我只是设法将Vt的最后一个值保存为数据帧,但我需要它在所有循环中的值。 我怎么能解决这个问题?我觉得它很简单,但我不习惯编程。谢谢!

1 个答案:

答案 0 :(得分:2)

重申评论的答案:

zeros(1:1000)更改为zeros(1000)。通过替换为v[i]=Vt或确保v[i]=Vt[1]是标量,确保作业Vt的RHS和LHS具有相同的形状/类型。

AbstractVector a(此时为a 1:1000}传递给zeros来电zeros(typeof(a), length(a)),这通常很方便,但有时会令人惊讶。