Система бенчмарка Нарендра-Ли: нелинейное моделирование серого ящика системы дискретного времени

Этот пример показывает, как идентифицировать параметры сложной, но искусственной нелинейной системы дискретного времени с одним входом и одним выходом. Первоначально система была предложена и обсуждена Нарендрой и Ли в статье

  K. S. Narendra and S.-M. Li. "Neural networks in control systems". In
  Mathematical Perspectives on Neural Networks (P. Smolensky,
  M. C. Mozer, and D. E. Rumelhard, eds.), Chapter 11, pages 347-394,
  Lawrence Erlbaum Associates, Hillsdale, NJ, USA, 1996.

и рассматривалась в многочисленных примерах идентификации в дискретном времени.

Система бенчмарка Нарендра-Ли в дискретном времени

Уравнения в дискретном времени системы Нарендра-Ли:

  x1(t+Ts) = (x1(t)/(1+x1(t)^2)+p(1))*sin(x2(t))
  x2(t+Ts) = x2(t)*cos(x2(t)) + x1(t)*exp(-(x1(t)^2+x2(t)^2)/p(2))
             + u(t)^3/(1+u(t)^2+p(3)*cos(x1(t)+x2(t))
      y(t) = x1(t)/(1+p(4)*sin(x2(t))+p(5)*sin(x1(t)))

где x1 (t) и x2 (t) являются состояниями, u (t) входным сигналом, y (t) выхода сигналом и p вектором параметра с 5 элементами.

Модель IDNLGREY Narendra-Li в дискретном времени

С точки зрения файла модели IDNLGREY нет различий между системой непрерывного и дискретного времени. Поэтому файл модели Narendra-Li должен вернуть вектор обновления состояния dx и выход y, и должен взять t (время), x (вектор состояния), u (вход), p (параметр (ы)) и varargin в качестве входных параметров:

  function [dx, y] = narendrali_m(t, x, u, p, varargin)
  %NARENDRALI_M  A discrete-time Narendra-Li benchmark system.
  % Output equation.
  y = x(1)/(1+p(4)*sin(x(2)))+x(2)/(1+p(5)*sin(x(1)));
  % State equations.
  dx = [(x(1)/(1+x(1)^2)+p(1))*sin(x(2));              ... % State 1.
        x(2)*cos(x(2))+x(1)*exp(-(x(1)^2+x(2)^2)/p(2)) ... % State 2.
           + u(1)^3/(1+u(1)^2+p(3)*cos(x(1)+x(2)))     ...
       ];

Заметьте, что мы выбрали здесь, чтобы конденсировать все 5 параметров в один вектор параметра, где элемент i: th ссылается обычным способом MATLAB, т.е. через p (i).

С этим файлом модели в качестве базиса мы далее создадим объект IDNLGREY, отражающий ситуацию моделирования. Здесь стоит подчеркнуть, что дискретность модели задается через положительное значение Ts (= 1 секунду). Заметьте также, что параметры содержит только один элемент, вектор параметра 5 на 1, и что SETPAR используются, чтобы указать, что все компоненты этого вектора строго положительны.

FileName      = 'narendrali_m';                    % File describing the model structure.
Order         = [1 1 2];                           % Model orders [ny nu nx].
Parameters    = {[1.05; 7.00; 0.52; 0.52; 0.48]};  % True initial parameters (a vector).
InitialStates = zeros(2, 1);                       % Initial value of initial states.
Ts            = 1;                                 % Time-discrete system with Ts = 1s.
nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, 'Name', ...
                'Discrete-time Narendra-Li benchmark system',  ...
                'TimeUnit', 's');
nlgr = setpar(nlgr, 'Minimum', {eps(0)*ones(5, 1)});

Сводные данные введенной структуры модели Нарендра-Ли получены с помощью команды PRESENT:

present(nlgr);
                                                                               
nlgr =                                                                         
Discrete-time nonlinear grey-box model defined by 'narendrali_m' (MATLAB file):
                                                                               
   x(t+Ts) = F(t, u(t), x(t), p1)                                              
      y(t) = H(t, u(t), x(t), p1) + e(t)                                       
                                                                               
 with 1 input(s), 2 state(s), 1 output(s), and 5 free parameter(s) (out of 5). 
                                                                               
 Inputs:                                                                       
    u(1)  (t)                                                                  
 States:        Initial value                                                  
    x(1)  x1(t)   xinit@exp1   0   (fixed) in [-Inf, Inf]                      
    x(2)  x2(t)   xinit@exp1   0   (fixed) in [-Inf, Inf]                      
 Outputs:                                                                      
    y(1)  (t)                                                                  
 Parameters:    Value                                                          
   p1(1)   p1     1.05      (estimated) in ]0, Inf]                            
   p1(2)             7      (estimated) in ]0, Inf]                            
   p1(3)          0.52      (estimated) in ]0, Inf]                            
   p1(4)          0.52      (estimated) in ]0, Inf]                            
   p1(5)          0.48      (estimated) in ]0, Inf]                            
                                                                               
Name: Discrete-time Narendra-Li benchmark system                               
Sample time: 1 seconds                                                         
                                                                               
Status:                                                                        
Created by direct construction or transformation. Not estimated.               
More information in model's "Report" property.                                 

Входные-выходные данные

Доступны две записи данных ввода-вывода с 300 выборки каждый, одна для оценки и одна для целей валидации. Входной вектор, используемый для обеих этих записей, одинаковый и был выбран как сумма двух синусоидов:

u(t) = sin(2*pi*t/10) + sin(2*pi*t/25)

для t = 0, 1,..., 299 секунд. Мы создаем два различных объекта IDDATA для хранения двух записей данных, ze для оценки и zv для целей валидации.

load(fullfile(matlabroot, 'toolbox', 'ident', 'iddemos', 'data', 'narendralidata'));
ze = iddata(y1, u, Ts, 'Tstart', 0, 'Name', 'Narendra-Li estimation data', ...
            'ExperimentName', 'ze');
zv = iddata(y2, u, Ts, 'Tstart', 0, 'Name', 'Narendra-Li validation data', ...
            'ExperimentName', 'zv');

Входно-выходные данные, которые будут использоваться для оценки, показаны в окне графика.

figure('Name', ze.Name);
plot(ze);

Фигура 1: Входные-выходные данные от системы бенчмарка Нарендра-Ли.

Эффективность начальной модели Нарендра-Ли

Давайте теперь использовать COMPARE, чтобы исследовать эффективность исходной модели Нарендра-Ли. Моделируемые и измеренные выходы для ze и zv сгенерированы и соответствуют ze показан по умолчанию. Используйте контекстное меню plot, чтобы переключить эксперимент с данными на zv. Подгонка не так уж и плоха для любого набора данных (около 74%). Здесь мы должны отметить, что COMPARE по умолчанию оценивает вектор начального состояния, в этом случае один вектор начального состояния для ze и еще один для zv.

compare(merge(ze, zv), nlgr);

Фигура 2: Сравнение истинных выходов и моделируемых выходов исходной модели Нарендра-Ли.

%%4
% By looking at the prediction errors obtained via PE, we realize that the
% initial Narendra-Li model shows some systematic and periodic differences
% as compared to the true outputs.
pe(merge(ze, zv), nlgr);

Фигура 3: Ошибки предсказания, полученные с помощью исходной модели Нарендра-Ли. Используйте контекстное меню, чтобы переключиться между экспериментами.

Оценка параметра

В порядок уменьшения систематических расхождений мы оцениваем все 5 параметров структуры модели Нарендра-Ли с помощью NLGREYEST. Оценка выполняется только на основе набора ze данных оценки.

opt = nlgreyestOptions('Display', 'on');
nlgr = nlgreyest(ze, nlgr, opt);

Эффективность предполагаемой модели Нарендра-Ли

COMPARE снова используется, чтобы исследовать эффективность предполагаемой модели, но на этот раз мы используем внутренне сохраненный вектор начального состояния модели ([0; 0] для обоих экспериментов) без какой-либо начальной оценки вектора состояния.

clf
opt = compareOptions('InitialCondition','m');
compare(merge(ze, zv), nlgr, opt);

Фигура 4: Сравнение истинных выходов и моделируемых выходов предполагаемой модели Нарендра-Ли.

Улучшение после оценки является значительным, что, возможно, лучше всего проиллюстрировано через график ошибок предсказания:

figure;
pe(merge(ze, zv), nlgr);

Фигура 5: Ошибки предсказания, полученные с помощью оценочной модели Нарендра-Ли.

Степень моделирования предполагаемой модели Нарендра-Ли также подтверждается корреляционным анализом, предоставленным через RESID:

figure('Name', [nlgr.Name ': residuals of estimated model']);
resid(zv, nlgr);

Фигура 6: Невязки, полученные с помощью оценочной модели Нарендра-Ли.

На самом деле полученные параметры модели также довольно близки к таковым, которые использовались для генерации истинных выходов модели:

disp('   True      Estimated parameter vector');
ptrue = [1; 8; 0.5; 0.5; 0.5];
fprintf('   %1.4f    %1.4f\n', [ptrue'; getpvec(nlgr)']);
   True      Estimated parameter vector
   1.0000    1.0000
   8.0000    8.0082
   0.5000    0.5003
   0.5000    0.4988
   0.5000    0.5018

Некоторые дополнительные результаты качества модели (функция потерь, FPE Акайке и предполагаемые стандартные отклонения параметров модели) далее предоставляются через команду PRESENT:

present(nlgr);
                                                                                                               
nlgr =                                                                                                         
Discrete-time nonlinear grey-box model defined by 'narendrali_m' (MATLAB file):                                
                                                                                                               
   x(t+Ts) = F(t, u(t), x(t), p1)                                                                              
      y(t) = H(t, u(t), x(t), p1) + e(t)                                                                       
                                                                                                               
 with 1 input(s), 2 state(s), 1 output(s), and 5 free parameter(s) (out of 5).                                 
                                                                                                               
 Inputs:                                                                                                       
    u(1)  u1(t)                                                                                                
 States:        Initial value                                                                                  
    x(1)  x1(t)   xinit@exp1   0   (fixed) in [-Inf, Inf]                                                      
    x(2)  x2(t)   xinit@exp1   0   (fixed) in [-Inf, Inf]                                                      
 Outputs:                                                                                                      
    y(1)  y1(t)                                                                                                
 Parameters:       Value Standard Deviation                                                                    
   p1(1)   p1     0.999993      0.0117615   (estimated) in ]0, Inf]                                            
   p1(2)           8.00821       0.885988   (estimated) in ]0, Inf]                                            
   p1(3)          0.500319      0.0313092   (estimated) in ]0, Inf]                                            
   p1(4)          0.498842       0.264806   (estimated) in ]0, Inf]                                            
   p1(5)          0.501761        0.30998   (estimated) in ]0, Inf]                                            
                                                                                                               
Name: Discrete-time Narendra-Li benchmark system                                                               
Sample time: 1 seconds                                                                                         
                                                                                                               
Status:                                                                                                        
Termination condition: Change in parameters was less than the specified tolerance..                            
Number of iterations: 16, Number of function evaluations: 17                                                   
                                                                                                               
Estimated using Solver: FixedStepDiscrete; Search: lsqnonlin on time domain data "Narendra-Li estimation data".
Fit to estimation data: 99.44%                                                                                 
FPE: 9.23e-05, MSE: 8.927e-05                                                                                  
More information in model's "Report" property.                                                                 

Что касается систем ввода-вывода в непрерывном времени, то также возможно использовать STEP для систем ввода-вывода в дискретном времени. Давайте сделаем это для двух различных уровней шага, 1 и 2:

figure('Name', [nlgr.Name ': step responses of estimated model']);
t = (-5:50)';
step(nlgr, 'b', t, stepDataOptions('StepAmplitude',1));
line(t, step(nlgr, t, stepDataOptions('StepAmplitude',2)), 'color', 'g');
grid on;
legend('0 -> 1', '0 -> 2', 'Location', 'NorthWest');

Фигура 7: Переходные характеристики, полученные с помощью оценочной модели Нарендра-Ли.

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

nk = delayest(ze);
arx22 = arx(ze, [2 2 nk]);   % Second order linear ARX model.
arx33 = arx(ze, [3 3 nk]);   % Third order linear ARX model.
arx44 = arx(ze, [4 4 nk]);   % Fourth order linear ARX model.
oe22  = oe(ze, [2 2 nk]);    % Second order linear OE model.
oe33  = oe(ze, [3 3 nk]);    % Third order linear OE model.
oe44  = oe(ze, [4 4 nk]);    % Fourth order linear OE model.
clf
fig = gcf;
Pos = fig.Position; fig.Position = [Pos(1:2)*0.7, Pos(3)*1.3, Pos(4)*1.3];
compare(zv, nlgr, 'b', arx22, 'm-', arx33, 'm:', arx44, 'm--', ...
        oe22, 'g-', oe33, 'g:', oe44, 'g--');

Фигура 8: Сравнение истинного результата и моделируемых выходов ряда оцененных моделей Нарендра-Ли.

Заключения

В этом примере мы использовали фиктивную систему бенчмарка Нарендра-Ли в дискретном времени, чтобы проиллюстрировать основы для выполнения моделирования IDNLGREY в дискретном времени.