我正在构建一个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的最后一个值保存为数据帧,但我需要它在所有循环中的值。
我怎么能解决这个问题?我觉得它很简单,但我不习惯编程。谢谢!
答案 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))
,这通常很方便,但有时会令人惊讶。