私はarmaモデルを凌駕するカルマンフィルタを構築しています。今はarma(1,1)のために作成しました。尤度関数を最適化するためには、イノベーションのすべての値とその共分散行列を保存する必要があります。 私はジュリアに新しいですし、私はほとんどrを使用しました。juliaのforループの結果をベクトルに入力するにはどうすればよいですか?
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を:できないconvert
タイプのInt64のオブジェクトへのArray型のオブジェクト{Float64,1}」 私はデータフレームなどを使用するのとは違ったやり方でしようとしましたが、コンバーチブルではないオブジェクトのタイプに関するエラーを受け取り続け、Vtの最後の値をデータフレームとして保存することしかできませんでした。すべてのループ中の値。 どうすればこの問題を解決できますか?私はそれが本当にシンプルだと思うが、私はプログラムに慣れていない。ありがとうございました!コメントから
問題は、Vtは単一の値ではなく値のベクトルなので、vの要素に入れることはできません.Vtが常に長さ1のベクトルであることがわかっている場合は、 v [i] = Vt'で 'v [i] = Vt [1]' –
ありがとう!私はそれを "手動で"行うとうまくいくように見えますが、ループを止めたときに "InexactError()"と表示されています。理由は分かりません。 –
'0(ゼロ)ゼロ(1000) '。後者は、1000の長いゼロFloat64ベクトルを作成します。前者はInt64ベクターを作成することが判明しました。 –