0

一連の数字があります。ユール・ウォーカー法を使用して、それらの間 の「自己回帰」を計算しました。

しかし、どうすればシリーズを拡張できますか?

全体の作業は次のとおりです。

a)私が使用するシリーズ:

143.85 141.95 141.45 142.30 140.60 140.00 138.40 137.10 138.90 139.85 138.75 139.85 141.30 139.45 140.15 140.80 142.50 143.00 142.35 143.00 142.55 140.50 141.25 140.55 141.45 142.05

b) このデータは、次を使用してdataにロードされます。

data = load('c:\\input.txt', '-ascii');

c) 係数の計算:

ar_coeffs = aryule(data,9);

これは与える:

ar_coeffs =
 1.0000 -0.9687 -0.0033 -0.0103 0.0137 -0.0129 0.0086 0.0029 -0.0149 0.0310

d)これを使用して、シリーズの次の数を計算するにはどうすればよいですか?

[これを行う他の方法 (aryule() を使用する場合を除く) も問題ありません...これは私がやったことです。より良いアイデアがあれば、私に知らせてください!]

4

2 に答える 2

2

長さNの実数値シーケンスx、および正の次数pの場合:

coeff = aryule(x, p)

データxの次数pのAR係数を返します(coeff(1)は正規化係数であることに注意してください)。言い換えると、過去のp値の線形結合として値をモデル化します。したがって、次の値を予測するために、最後のp値を次のように使用します。

x(N+1) = sum_[k=0:p] ( coeff(k)*x(N-k) )

または実際のMATLABコード:

p = 9;
data = [...];      % the seq you gave
coeffs = aryule(data, p);
nextValue = -coeffs(2:end) * data(end:-1:end-p+1)';


編集:システム同定ツールボックスにアクセスできる場合は、いくつかの関数のいずれかを使用してAR / ARMAXモデル(ar / arx / armax )を推定できます(またはselstrucを使用してARモデルの順序を見つけることもできます):

m = ar(data, p, 'yw');    % yw for Yule-Walker method
pred = predict(m, data, 1);

coeffs = m.a;
nextValue = pred(end);

subplot(121), plot(data)
subplot(122), plot( cell2mat(pred) )
于 2009-09-30T02:03:40.753 に答える
1

データの平均はゼロではありません。Yule-Walker モデルは、データがゼロ平均ホワイト ノイズ プロセスによって励起された線形フィルターの出力であると仮定していませんか?

平均を削除すると、 ARYULE と LPC を使用したこの例が探しているものになる可能性があります。手順は次のとおりです。

a = lpc(data,9); % uses Yule-Walker modeling
pred = filter(-a(2:end),1,data);
disp(pred(end)); % the predicted value at time N+1
于 2009-09-30T01:20:56.097 に答える