Система сравнительного теста Narendra-лития: нелинейное серое моделирование поля системы дискретного времени

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

  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.

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

Система сравнительного теста Narendra-лития дискретного времени

Уравнения дискретного времени системы Narendra-лития:

  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 элементами.

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

С точки зрения файла модели IDNLGREY нет никакого различия между непрерывным - и системой дискретного времени. Файл модели Narendra-Li должен поэтому возвратить дуплекс вектора обновления состояния и выход 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 путь, i.e., через 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)});

Сводные данные вводимой структуры модели Narendra-лития получены посредством команды 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: данные ввода - вывода из Narendra-лития тестируют системы в сравнении с эталоном.

Эффективность первоначальной модели Narendra-лития

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

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

Рисунок 2: Сравнение между истинными выходными параметрами и симулированными выходными параметрами первоначальной модели Narendra-Li.

%%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: ошибки Предсказания получены с первоначальной моделью Narendra-Li. Используйте контекстное меню, чтобы переключиться между экспериментами.

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

Для того, чтобы уменьшать систематические несоответствия, мы оцениваем все 5 параметров структуры модели Narendra-лития с помощью NLGREYEST. Оценка выполняется на основе набора данных оценки ze только.

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

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

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

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

Рисунок 4: Сравнение между истинными выходными параметрами и симулированными выходными параметрами предполагаемой модели Narendra-Li.

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

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

Рисунок 5: ошибки Предсказания получены с предполагаемой моделью Narendra-Li.

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

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

Рисунок 6: Остаточные значения получены с предполагаемой моделью Narendra-Li.

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

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.                                                                 

Что касается систем ввода-вывода непрерывного времени, также возможно использовать ШАГ для систем ввода-вывода дискретного времени. Давайте сделаем это для двух различных уровней шага, 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: Переходные процессы получены с предполагаемой моделью Narendra-Li.

Мы завершаем этот пример путем сравнения эффективности предполагаемой модели 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: Сравнение между истинным выходом и симулированными выходными параметрами многих предполагаемых моделей Narendra-Li.

Заключения

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

Для просмотра документации необходимо авторизоваться на сайте