Предскажите многомерные временные ряды

В этом примере показано, как выполнить многомерное прогнозирование временных рядов данных, измеренных от хищника и популяций добычи в сценарии давки добычи. Движущие силы изменения населения добычи хищника моделируются с помощью линейных и нелинейных моделей временных рядов. Прогнозирование эффективности этих моделей сравнено.

Описание данных

Данные являются двумерными временными рядами, состоящими из популяций с 1 добычей с 1 хищником (в тысячах), собрался 10 раз в год в течение 20 лет. Для получения дополнительной информации о данных, см. Три Экологических Системы Населения: MATLAB и Моделирование Файла MEX на C Timeseries.

Загрузите данные временных рядов.

load PredPreyCrowdingData
z = iddata(y,[],0.1,'TimeUnit','years','Tstart',0);

z iddata объект, содержащий два выходных сигнала, y1 и y2, которые относятся к хищнику и популяциям добычи, соответственно. OutputData свойство z содержит данные о населении как 201 2 матрица, такая что z.OutputData(:,1) популяция хищников и z.OutputData(:,2) популяция жертв.

Отобразите данные на графике.

plot(z)
title('Predator-Prey Population Data')
ylabel('Population (thousands)')

Figure contains 2 axes objects. Axes object 1 with title y1 contains an object of type line. This object represents z. Axes object 2 with title y2 contains an object of type line. This object represents z.

Данные показывают снижение в популяции хищников из-за давки.

Используйте первую половину в качестве данных об оценке для идентификации моделей временных рядов.

ze = z(1:120);

Используйте остающиеся данные, чтобы искать порядки модели и подтвердить результаты прогнозирования.

zv = z(121:end);

Оцените линейную модель

Смоделируйте временные ряды как линейный, авторегрессивный процесс. Линейные модели могут быть созданы в полиномиальной форме или форме пространства состояний с помощью команд, таких как ar (только для скалярных временных рядов), arx, armax, n4sid и ssest. Поскольку линейные модели не получают смещения данных (ненулевое условное среднее значение), сначала детрендируют данные.

[zed, Tze] = detrend(ze, 0);
[zvd, Tzv] = detrend(zv, 0);

Идентификация требует спецификации порядков модели. Для полиномиальных моделей можно найти подходящие порядки с помощью arxstruc команда. Начиная с arxstruc работает только над моделями одно выхода, выполните поиск порядка модели отдельно каждого выхода.

na_list = (1:10)';
V1 = arxstruc(zed(:,1,:),zvd(:,1,:),na_list);
na1 = selstruc(V1,0);
V2 = arxstruc(zed(:,2,:),zvd(:,2,:),na_list);
na2 = selstruc(V2,0);

arxstruc команда предлагает авторегрессивные модели порядков 7 и 8, соответственно.

Используйте эти порядки модели оценить модель ARMA мультиотклонения, где перекрестные термины были выбраны произвольно.

na = [na1 na1-1; na2-1 na2];
nc = [na1; na2];
sysARMA = armax(zed,[na nc])
sysARMA =
Discrete-time ARMA model:                                                 
  Model for output "y1": A(z)y_1(t) = - A_i(z)y_i(t) + C(z)e_1(t)         
                                                                          
    A(z) = 1 - 0.885 z^-1 - 0.1493 z^-2 + 0.8089 z^-3 - 0.2661 z^-4       
                                 - 0.9487 z^-5 + 0.8719 z^-6 - 0.2896 z^-7
                                                                          
                                                                          
    A_2(z) = 0.3433 z^-1 - 0.2802 z^-2 - 0.04949 z^-3 + 0.1018 z^-4       
                                              - 0.02683 z^-5 - 0.2416 z^-6
                                                                          
                                                                          
    C(z) = 1 - 0.4534 z^-1 - 0.4127 z^-2 + 0.7874 z^-3 + 0.298 z^-4       
                                 - 0.8684 z^-5 + 0.6106 z^-6 + 0.3616 z^-7
                                                                          
  Model for output "y2": A(z)y_2(t) = - A_i(z)y_i(t) + C(z)e_2(t)                
                                                                                 
    A(z) = 1 - 0.5826 z^-1 - 0.4688 z^-2 - 0.5949 z^-3 - 0.0547 z^-4             
                  + 0.5062 z^-5 + 0.4024 z^-6 - 0.01544 z^-7 - 0.1766 z^-8       
                                                                                 
                                                                                 
    A_1(z) = 0.2386 z^-1 + 0.1564 z^-2 - 0.2249 z^-3 - 0.2638 z^-4 - 0.1019 z^-5 
                                              - 0.07821 z^-6 + 0.2982 z^-7       
                                                                                 
                                                                                 
    C(z) = 1 - 0.1717 z^-1 - 0.09877 z^-2 - 0.5289 z^-3 - 0.24 z^-4              
                 + 0.06555 z^-5 + 0.2217 z^-6 - 0.05765 z^-7 - 0.1824 z^-8       
                                                                                 
Sample time: 0.1 years
  
Parameterization:
   Polynomial orders:   na=[7 6;7 8]   nc=[7;8]
   Number of free coefficients: 43
   Use "polydata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                                  
Estimated using ARMAX on time domain data "zed".         
Fit to estimation data: [89.85;90.97]% (prediction focus)
FPE: 3.814e-05, MSE: 0.007533                            

Вычислите 10 шагов вперед (1 год) предсказанный выход, чтобы подтвердить модель по отрезку времени данных об оценке. Поскольку данные были детрендированы для оценки, необходимо задать те смещения для значимых предсказаний.

predOpt = predictOptions('OutputOffset',Tze.OutputOffset');
yhat1 = predict(sysARMA,ze,10, predOpt);

predict команда предсказывает ответ по отрезку времени результатов измерений и является инструментом для проверки качества предполагаемой модели. Ответ во время t вычисляется с помощью измеренных значений время от времени t = 0..., t-10.

Постройте предсказанный ответ и результаты измерений.

plot(ze,yhat1)
title('10-step predicted response compared to measured data')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent ze, ze\_Predicted. Axes object 2 with title y2 contains 2 objects of type line. These objects represent ze, ze\_Predicted.

Отметьте, генерация предсказанного ответа и графического вывода его с результатами измерений, может быть автоматизирован с помощью compare команда.

compareOpt = compareOptions('OutputOffset',Tze.OutputOffset');
compare(ze,sysARMA,10,compareOpt)

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. These objects represent ze (y1), sysARMA: 75.49%. Axes object 2 contains 2 objects of type line. These objects represent ze (y2), sysARMA: 76.21%.

График, сгенерированный с помощью compare также показывает нормированное среднеквадратичное значение (NRMSE) мера качества подгонки в форме процента.

После проверки данных, прогноз выход модели sysARMA 100 шагов (10 лет) вне данных об оценке, и вычисляют выходные стандартные отклонения.

forecastOpt = forecastOptions('OutputOffset',Tze.OutputOffset');
[yf1,x01,sysf1,ysd1] = forecast(sysARMA, ze, 100, forecastOpt);

yf1 предсказанный ответ, возвращенный как iddata объект. yf1.OutputData содержит предсказанные значения.

sysf1 система, похожая на sysARMA но находится в форме пространства состояний. Симуляция sysf1 использование sim команда, с начальными условиями, x01, воспроизводит предсказанный ответ, yf1.

ysd1 матрица стандартных отклонений. Это измеряется, неопределенность предсказывает вследствие эффекта аддитивных воздействий в данных (как измерено sysARMA.NoiseVariance), неопределенность параметра (как сообщается getcov(sysARMA)) и неопределенность сопоставила с процессом отображения прошлых данных к начальным условиям, требуемым для прогнозирования (см. data2state).

Постройте измеренный, предсказанный, и предсказанный выход для модели sysARMA.

t = yf1.SamplingInstants;
te = ze.SamplingInstants;
t0 = z.SamplingInstants;
subplot(1,2,1);
plot(t0,z.y(:,1),...
   te,yhat1.y(:,1),...
   t,yf1.y(:,1),'m',...
   t,yf1.y(:,1)+ysd1(:,1),'k--', ...
   t,yf1.y(:,1)-ysd1(:,1), 'k--')
xlabel('Time (year)');
ylabel('Predator population, in thousands');
subplot(1,2,2);
plot(t0,z.y(:,2),...
   te,yhat1.y(:,2),...
   t,yf1.y(:,2),'m',...
   t,yf1.y(:,2)+ysd1(:,2),'k--', ...
   t,yf1.y(:,2)-ysd1(:,2),'k--')
% Make the figure larger.
fig = gcf;
p = fig.Position;
fig.Position = [p(1),p(2)-p(4)*0.2,p(3)*1.4,p(4)*1.2];
xlabel('Time (year)');
ylabel('Prey population, in thousands');
legend({'Measured','Predicted','Forecasted','Forecast Uncertainty (1 sd)'},...
   'Location','best')

Figure contains 2 axes objects. Axes object 1 contains 5 objects of type line. Axes object 2 contains 5 objects of type line. These objects represent Measured, Predicted, Forecasted, Forecast Uncertainty (1 sd).

Графики показывают, что прогнозирование использования линейной модели ARMA (с добавленной обработкой смещений) работало несколько, и результаты показали высокую неопределенность по сравнению с фактическими популяциями по отрезку времени этих 12-20 лет. Это указывает, что динамика изменения населения может быть нелинейной.

Оцените нелинейные модели черного ящика

В этом разделе мы расширяем идентификационный подход черного ящика предыдущего раздела путем добавления нелинейных элементов в модель. Это выполняется с помощью Нелинейной среды моделирования ARX. Нелинейные модели ARX концептуально похожи на линейные единицы (такие как sysARMA выше) в этом они вычисляют предсказанный выход с помощью двухступенчатого процесса:

  1. Сопоставьте измеренные сигналы с конечномерным пробелом регрессора.

  2. Сопоставьте регрессоры с предсказанным выходом с помощью статической функции, которая может быть линейной или нелинейной.

Нелинейность может быть добавлена в двух местах - любой в наборе регрессора (шаг 1), и/или в статической функции отображения (шаг 2). В этом разделе мы исследуем обе из этих опций. Во-первых, мы создаем линейную в регрессоре форму модели Nonlinear ARX, где во всей нелинейности ограничиваются определением регрессора только; статическая функция отображения, которая преобразовывает регрессоры в предсказанный выход, линейна (аффинно, чтобы быть точной). Затем мы создаем модель, которая использует Гауссову функцию Процесса в качестве ее статической функции отображения, но сохраняет ее регрессоры линейными.

Полиномиальная модель AR

Создайте нелинейную модель ARX с 2 выходными параметрами и никакими входными параметрами.

L = linearRegressor(ze.OutputName,{1,1});
sysNLARX = idnlarx(ze.OutputName, ze.InputName, L, []);
sysNLARX.Ts = 0.1;
sysNLARX.TimeUnit = 'years';

sysNLARX первый порядок нелинейная модель ARX, которая не использует нелинейной функции; это предсказывает ответ модели с помощью взвешенной суммы его регрессоров первого порядка.

getreg(sysNLARX)
ans = 2x1 cell
    {'y1(t-1)'}
    {'y2(t-1)'}

Чтобы ввести функцию нелинейности, добавьте полиномиальные регрессоры в модель.

Создайте регрессоры порядка 2 и включайте перекрестные термины (продукты стандартных упомянутых выше регрессоров). Добавьте те регрессоры в модель.

P = polynomialRegressor(ze.OutputName,{1,1},2,false,true);
sysNLARX.Regressors(end+1) = P;
getreg(sysNLARX)
ans = 5x1 cell
    {'y1(t-1)'        }
    {'y2(t-1)'        }
    {'y1(t-1)^2'      }
    {'y2(t-1)^2'      }
    {'y1(t-1)*y2(t-1)'}

Оцените коэффициенты (коэффициенты регрессора и смещение) модели с помощью данных об оценке, ze.

sysNLARX = nlarx(ze,sysNLARX)
sysNLARX = 
Nonlinear multivariate time series model with 2 outputs
  Outputs: y1, y2

Regressors:
  1. Linear regressors in variables y1, y2
  2. Order 2 regressors in variables y1, y2
  List of all regressors

Output functions:
  Output 1:  None
  Output 2:  None

Sample time: 0.1 years

Status:                                                  
Estimated using NLARX on time domain data "ze".          
Fit to estimation data: [88.34;88.91]% (prediction focus)
FPE: 3.265e-05, MSE: 0.01048

Вычислите 10 шагов, вперед предсказал выход, чтобы подтвердить модель.

yhat2 = predict(sysNLARX,ze,10);

Предскажите выход шагов модели 100 вне данных об оценке.

yf2 = forecast(sysNLARX,ze,100);

Стандартные отклонения предсказанного ответа не вычисляются для нелинейных моделей ARX. Эти данные недоступны, потому что информация о ковариации параметра не вычисляется во время оценки этих моделей.

Постройте измеренное, предсказанный, и предсказал выходные параметры.

t = yf2.SamplingInstants;
subplot(1,2,1);
plot(t0,z.y(:,1),...
   te,yhat2.y(:,1),...
   t,yf2.y(:,1),'m')
xlabel('Time (year)');
ylabel('Predator population (thousands)');
title('Prediction Results for ARX Model with Polynomial Regressors')
subplot(1,2,2);
plot(t0,z.y(:,2),...
   te,yhat2.y(:,2),...
   t,yf2.y(:,2),'m')
legend('Measured','Predicted','Forecasted')
xlabel('Time (year)');
ylabel('Prey population (thousands)');

Figure contains 2 axes objects. Axes object 1 with title Prediction Results for ARX Model with Polynomial Regressors contains 3 objects of type line. Axes object 2 contains 3 objects of type line. These objects represent Measured, Predicted, Forecasted.

Графики показывают, что прогнозирование использования нелинейной модели ARX дало лучшие результаты прогнозирования, чем использование линейной модели. Нелинейное моделирование черного ящика не потребовало предварительных знаний об уравнениях, управляющих данными.

Обратите внимание на то, что, чтобы сократить количество регрессоров, можно выбрать оптимальное подмножество (преобразованных) переменных с помощью анализа главных компонентов (см. pca) или выбор признаков (см. sequentialfs) в Statistics and Machine Learning Toolbox™.

Оцените гауссову модель процесса

Модель модель sysNLARX использует линейную функцию отображения; нелинейность содержится в регрессорах только. Более гибкий подход включает выбор нетривиальной функции отображения, такой как Гауссова функция Процесса (GP). Создайте нелинейную модель ARX, которая использует только линейные регрессоры, но добавляет Гауссову функцию процесса для отображения регрессоров к выходу.

% Copy sysNLARX so we don't have to create the model structure again
sysGP = sysNLARX;
% Remove polynomial regressor set
sysGP.Regressors(2) = [];
% Replace the linear mapping function by a Gaussian Process (GP) function.
% The GP uses a squared exponential kernel by default.
GP = idGaussianProcess;
sysGP.OutputFcn = GP;
disp(sysGP)
Nonlinear multivariate time series model with 2 outputs
  Outputs: y1, y2

Regressors:
  Linear regressors in variables y1, y2

Output functions:
  Output 1:  Gaussian process function using a SquaredExponential kernel.
  Output 2:  Gaussian process function using a SquaredExponential kernel.

Sample time: 0.1 years

Status:                                    
Estimated using NLARX with prediction focus

У вас теперь есть модель шаблона sysGP, который основан на линейных регрессорах и функции отображения GP. Его параметры являются двумя коэффициентами его экспоненциального ядра в квадрате. Используйте nlarx оценить эти параметры.

sysGP = nlarx(ze, sysGP)
sysGP = 
Nonlinear multivariate time series model with 2 outputs
  Outputs: y1, y2

Regressors:
  Linear regressors in variables y1, y2
  List of all regressors

Output functions:
  Output 1:  Gaussian process function using a SquaredExponential kernel.
  Output 2:  Gaussian process function using a SquaredExponential kernel.

Sample time: 0.1 years

Status:                                                  
Estimated using NLARX on time domain data "ze".          
Fit to estimation data: [88.07;88.84]% (prediction focus)
FPE: 3.369e-05, MSE: 0.01083
getpvec(sysGP)
ans = 10×1

   -0.6671
    0.0196
    0.9558
    0.9445
    0.0261
   -0.0221
   -0.5752
    0.8479
    1.1883
    0.0447

Как прежде, вычислите предсказанные и предсказанные ответы и постройте результаты.

Вычислите 10 шагов, вперед предсказал выход, чтобы подтвердить модель.

yhat3 = predict(sysGP,ze,10);

Предскажите выход шагов модели 100 вне данных об оценке.

yf3 = forecast(sysGP,ze,100);

Постройте измеренное, предсказанный, и предсказал выходные параметры.

t = yf3.SamplingInstants;
subplot(1,2,1);
plot(t0,z.y(:,1),...
   te,yhat3.y(:,1),...
   t,yf3.y(:,1),'m')
xlabel('Time (year)');
ylabel('Predator population (thousands)');
title('Prediction Results for Gaussian Process Model')
subplot(1,2,2);
plot(t0,z.y(:,2),...
   te,yhat3.y(:,2),...
   t,yf3.y(:,2),'m')
legend('Measured','Predicted','Forecasted')
xlabel('Time (year)');
ylabel('Prey population (thousands)');

Figure contains 2 axes objects. Axes object 1 with title Prediction Results for Gaussian Process Model contains 3 objects of type line. Axes object 2 contains 3 objects of type line. These objects represent Measured, Predicted, Forecasted.

Результаты показывают улучшенную точность по линейной модели. Преимущество использования основанных на GP моделей состоит в том, что они используют очень немного параметров, в противоположность другим формам, таким как Сети Вейвлета (idWaveletNetwork) или сигмоидальные сети (idSigmoidNetwork). Это делает их легкими обучаться с низкой неопределенностью в их оценках параметра.

Оцените нелинейную модель серого ящика

Если у вас есть предварительные знания системной динамики, можно соответствовать данным об оценке с помощью нелинейной модели серого ящика. Знание о природе динамики может, в целом, помочь улучшить качество модели и таким образом точность прогнозирования. Для динамики добычи хищника, изменений у хищника (y1) и добыча (y2) население может быть представлено как:

y˙1(t)=p1*y1(t)+p2*y2(t)*y1(t)

y˙2(t)=p3*y2(t)-p4*y1(t)*y2(t)-p5*y2(t)2

Для получения дополнительной информации об уравнениях, см. Три Экологических Системы Населения: MATLAB и Моделирование Файла MEX на C Timeseries.

Создайте нелинейный серый ящик, основанный на модели на этих уравнениях.

Задайте файл, описывающий структуру модели для системы добычи хищника. Файл задает производные состояния и выходные параметры модели в зависимости от времени, состояний, входных параметров и параметров модели. Эти два выходных параметров (хищник и популяции добычи) выбраны в качестве состояний, чтобы вывести нелинейное описание пространства состояний динамики.

FileName = 'predprey2_m';

Задайте порядки модели (количество выходных параметров, входных параметров и состояний)

Order = [2 0 2];

Задайте начальные значения для параметров p1, p2, p3, p4, и p5, и укажите, что все параметры должны быть оценены. Обратите внимание на то, что требование, чтобы задать исходные предположения для параметров не существовало при оценке моделей sysARMA черного квадрата и sysNLARX.

Parameters = struct('Name',{'Survival factor, predators' 'Death factor, predators' ...
   'Survival factor, preys' 'Death factor, preys' ...
   'Crowding factor, preys'}, ...
   'Unit',{'1/year' '1/year' '1/year' '1/year' '1/year'}, ...
   'Value',{-1.1 0.9 1.1 0.9 0.2}, ...
   'Minimum',{-Inf -Inf -Inf -Inf -Inf}, ...
   'Maximum',{Inf Inf Inf Inf Inf}, ...
   'Fixed',{false false false false false});

Точно так же задайте начальные состояния модели и укажите, что должны быть оценены оба начальных состояния.

InitialStates = struct('Name',{'Predator population' 'Prey population'}, ...
   'Unit',{'Size (thousands)' 'Size (thousands)'}, ...
   'Value',{1.8 1.8}, ...
   'Minimum', {0 0}, ...
   'Maximum',{Inf Inf}, ...
   'Fixed',{false false});

Задайте модель как систему непрерывного времени.

Ts = 0;

Создайте нелинейную модель серого ящика с заданной структурой, параметрами и состояниями.

sysGrey = idnlgrey(FileName,Order,Parameters,InitialStates,Ts,'TimeUnit','years');

Оцените параметры модели.

sysGrey = nlgreyest(ze,sysGrey);
present(sysGrey)
                                                                                                      
sysGrey =                                                                                             
Continuous-time nonlinear grey-box model defined by 'predprey2_m' (MATLAB file):                      
                                                                                                      
   dx/dt = F(t, x(t), p1, ..., p5)                                                                    
    y(t) = H(t, x(t), p1, ..., p5) + e(t)                                                             
                                                                                                      
 with 0 input(s), 2 state(s), 2 output(s), and 5 free parameter(s) (out of 5).                        
                                                                                                      
 States:                                        Initial value                                         
    x(1)  Predator population(t) [Size (thou..]   xinit@exp1   2.01325   (estimated) in [0, Inf]      
    x(2)  Prey population(t) [Size (thou..]       xinit@exp1   1.99687   (estimated) in [0, Inf]      
 Outputs:                                                                                             
    y(1)  y1(t)                                                                                       
    y(2)  y2(t)                                                                                       
 Parameters:                                    Value  Standard Deviation                             
    p1   Survival factor, predators [1/year]     -0.995895      0.0125269   (estimated) in [-Inf, Inf]
    p2   Death factor, predators [1/year]          1.00441      0.0129368   (estimated) in [-Inf, Inf]
    p3   Survival factor, preys [1/year]           1.01234      0.0135413   (estimated) in [-Inf, Inf]
    p4   Death factor, preys [1/year]              1.01909      0.0121026   (estimated) in [-Inf, Inf]
    p5   Crowding factor, preys [1/year]          0.103244      0.0039285   (estimated) in [-Inf, Inf]
                                                                                                      
Status:                                                                                               
Termination condition: Change in cost was less than the specified tolerance..                         
Number of iterations: 6, Number of function evaluations: 7                                            
                                                                                                      
Estimated using Solver: ode45; Search: lsqnonlin on time domain data "ze".                            
Fit to estimation data: [91.21;92.07]%                                                                
FPE: 8.613e-06, MSE: 0.005713                                                                         
More information in model's "Report" property.                                                        

Вычислите 10 шагов, вперед предсказал выход, чтобы подтвердить модель.

yhat4 = predict(sysGrey,ze,10);

Предскажите выход шагов модели 100 вне данных об оценке и вычислите выходные стандартные отклонения.

[yf4,x04,sysf4,ysd4] = forecast(sysGrey,ze,100);

Постройте измеренное, предсказанный, и предсказал выходные параметры.

t = yf4.SamplingInstants;
subplot(1,2,1);
plot(t0,z.y(:,1),...
   te,yhat4.y(:,1),...
   t,yf4.y(:,1),'m',...
   t,yf4.y(:,1)+ysd4(:,1),'k--', ...
   t,yf4.y(:,1)-ysd4(:,1),'k--')
xlabel('Time (year)');
ylabel('Predator population (thousands)');
title('Prediction Results for Grey-Box Model')
subplot(1,2,2);
plot(t0,z.y(:,2),...
   te,yhat4.y(:,2),...
   t,yf4.y(:,2),'m',...
   t,yf4.y(:,2)+ysd4(:,2),'k--', ...
   t,yf4.y(:,2)-ysd4(:,2),'k--')

legend('Measured','Predicted','Forecasted','Forecast uncertainty (1 sd)')
xlabel('Time (years)');
ylabel('Prey population (thousands)');

Figure contains 2 axes objects. Axes object 1 with title Prediction Results for Grey-Box Model contains 5 objects of type line. Axes object 2 contains 5 objects of type line. These objects represent Measured, Predicted, Forecasted, Forecast uncertainty (1 sd).

Графики показывают, что прогнозирование использования нелинейной модели серого ящика дало хорошие результаты прогнозирования и низко прогнозирование выходной неопределенности.

Сравните эффективность прогнозирования

Сравните предсказанный ответ, полученный из идентифицированных моделей, sysARMA, sysNLARX, и sysGrey. Первые два являются моделями дискретного времени и sysGrey модель непрерывного времени.

clf
plot(z,yf1,yf2,yf3,yf4)
legend({'Measured','ARMA','Polynomial AR','GP','Grey-Box'})
title('Forecasted Responses')
xlim([7 23])

Figure contains 2 axes objects. Axes object 1 with title y1 contains 5 objects of type line. These objects represent Measured, ARMA, Polynomial AR, GP, Grey-Box. Axes object 2 with title y2 contains 5 objects of type line. These objects represent Measured, ARMA, Polynomial AR, GP, Grey-Box.

Прогнозирование с нелинейной моделью ARX дало лучшие результаты, чем прогнозирование с линейной моделью. Включение знания динамики в нелинейной модели серого ящика далее улучшило надежность модели и поэтому точности прогнозирования.

Обратите внимание на то, что уравнения, используемые в моделировании серого ящика, тесно связаны с полиномиальными регрессорами, используемыми моделью Nonlinear ARX. Если вы аппроксимируете производные в управляющих уравнениях различиями первого порядка, вы получите уравнения, похожие на:

y1(t)=s1*y1(t-1)+s2*y1(t-1)*y2(t-1)

y2(t)=s3*y2(t-1)-s4*y1(t-1)*y2(t-1)-s5*y2(t-1)2

Где, s1,...,s5 некоторые параметры, связанные с исходными параметрами p1,...,p5 и к шагу расчета используется для дифференцирования. Эти уравнения предполагают, что только 2 регрессора необходимы для первого выхода (y1 (t-1) и *y1 (t-1) *y2 (t-1)) и 3 для второго выхода при построении модели Nonlinear ARX. Даже в отсутствие таких предварительных знаний, линейные в регрессоре структуры модели, использующие полиномиальные регрессоры, остаются популярный выбор на практике.

Предскажите значения с помощью нелинейной модели серого ящика более чем 200 лет.

[yf5,~,~,ysd5] = forecast(sysGrey, ze, 2000);

Постройте последнюю часть данных (показав 1 sd неопределенность)

t = yf5.SamplingInstants;
N = 700:2000;
subplot(1,2,1);
plot(t(N), yf5.y(N,1), 'm',...
   t(N), yf5.y(N,1)+ysd5(N,1), 'k--', ...
   t(N), yf5.y(N,1)-ysd5(N,1), 'k--')
xlabel('Time (year)');
ylabel('Predator population (thousands)');
title('Forecasted Population after 200 Years')
ax = gca;
ax.YLim = [0.8 1];
ax.XLim = [82 212];
subplot(1,2,2);
plot(t(N),yf5.y(N,2),'m',...
   t(N),yf5.y(N,2)+ysd5(N,2),'k--', ...
   t(N),yf5.y(N,2)-ysd5(N,2),'k--')
legend('Forecasted population','Forecast uncertainty (1 sd)')
xlabel('Time (years)');
ylabel('Prey population (thousands)');
ax = gca;
ax.YLim = [0.9 1.1];
ax.XLim = [82 212];

Figure contains 2 axes objects. Axes object 1 with title Forecasted Population after 200 Years contains 3 objects of type line. Axes object 2 contains 3 objects of type line. These objects represent Forecasted population, Forecast uncertainty (1 sd).

График показывает, что завышенное население, как предсказывают, достигает установившегося из приблизительно 890, и популяция жертв, как предсказывают, достигает 990.

Похожие темы