2009-09-29 5 views
0

J'ai une série de nombres. J'ai calculé le "auto-régression" entre eux en utilisant Yule-Walker method.Comment utiliser aryule() dans Matlab pour étendre une série de nombres?

Mais maintenant comment étendre la série?

travail total est comme suit:

a) la série I utiliser:

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) Ces données sont chargées dans de données utilisant:

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

c) le calcul des coefficients:

ar_coeffs = aryule(data,9); 

cela donne:

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

d) Maintenant, en utilisant cela, comment puis-je calculer le numéro suivant dans la série?

[toute autre méthode de le faire (sauf en utilisant aryule()) est aussi très bien ... ce que je l'ai fait, si vous avez une meilleure idée, s'il vous plaît laissez-moi savoir!]

+0

donc des données est essentiellement le vecteur que vous avez publié dans (a)? – Jacob

+0

@Jacob oui c'est les données. – Lazer

Répondre

2

Pour une séquence à valeur réelle x de longueur N, et d'un ordre positif p:

coeff = aryule(x, p) 

renvoie les coefficients AR d'ordre p des données x (Notez que coeff (1) est un facteur de normalisation). En d'autres termes, il modélise les valeurs comme une combinaison linéaire des valeurs p passées.Donc, pour prédire la valeur suivante, nous utilisons les dernières valeurs de p comme:

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

ou dans le code Matlab réel:

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


EDIT: Si vous avez accès à System Identification Toolbox, alors vous pouvez utiliser l'une des nombreuses fonctions pour estimer les modèles AR/ARMAX (ar/arx/armax) (ou même trouver l'ordre du modèle AR en utilisant selstruc):

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)) 
1

Vos données a une moyenne non nulle. Le modèle de Yule-Walker ne suppose-t-il pas que les données sont la sortie d'un filtre linéaire excité par un processus de bruit blanc de moyenne nulle?

Si vous supprimez la moyenne, this example en utilisant ARYULE et LPC pourrait être ce que vous cherchez. La procédure se résume à:

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 
Questions connexes