Как использовать aryule() в Matlab для расширения числового ряда?

У меня есть ряд чисел. Я рассчитал "авторегрессию" между ними, используя метод Юла-Уокера.

Но как теперь расширить серию?

Вся работа выглядит следующим образом:

а) серия, которую я использую:

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

б) эти данные загружаются в данные с помощью:

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

в) расчет коэффициентов:

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

г) Теперь, используя это, как мне рассчитать следующее число в ряду?

[любой другой способ сделать это (кроме использования aryule()) также подходит... это то, что я сделал, если у вас есть идея получше, дайте мне знать!]


person Lazer    schedule 29.09.2009    source источник
comment
Таким образом, данные, по сути, являются вектором, который вы разместили в (а)?   -  person Jacob    schedule 29.09.2009


Ответы (2)


Для действительнозначной последовательности x длины N и положительного порядка p:

coeff = aryule(x, p)

возвращает коэффициенты AR порядка p данных x (обратите внимание, что 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)';


EDIT: Если у вас есть доступ к System Identification Toolbox, вы можете использовать любую из нескольких функций для оценки моделей AR/ARMAX (ar< /strong>/arx/armax) (или даже найти порядок модели AR с помощью 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) )
person Amro    schedule 30.09.2009

Ваши данные имеют ненулевое среднее значение. Разве модель Юла-Уокера не предполагает, что данные являются выходными данными линейного фильтра, возбуждаемого процессом белого шума с нулевым средним?

Если вы удалите среднее значение, этот пример с использованием 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
person mtrw    schedule 30.09.2009