Представляйте нелинейную динамику Используя файл MATLAB для оценки серого ящика

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

Нелинейный серый ящик (idnlgrey) модели подходят для оценки параметров систем, которые описаны нелинейными структурами пространства состояний в непрерывное или дискретное время. Можно использовать оба idgrey (линейная модель серого ящика) и idnlgrey объекты смоделировать линейные системы. Однако можно только использовать idnlgrey представлять нелинейную динамику. Узнать о линейном моделировании серого ящика с помощью idgrey, смотрите Создание Структурированные и Пользовательские Модели Используя System Identification Toolbox™.

О модели

В этом примере вы моделируете динамику линейного двигателя постоянного тока с помощью idnlgrey объект.

Рисунок 1: Принципиальная схема двигателя постоянного тока.

Если вы игнорируете воздействия и выбираете y(1) как угловое положение [рад] и y(2) как скорость вращения [rad/s] двигателя, можно настроить линейную структуру пространства состояний следующей формы (см. Ljung, L. System Identification: Теория для Пользователя, Верхнего Сэддл-Ривер, NJ, PTR Prentice Hall, 1999, 2-й редактор, p. 95-97 для деривации):

   d         | 0      1   |        |   0   |
   -- x(t) = |            | x(t) + |       | u(t)
   dt        | 0   -1/tau |        | k/tau |
             | 1   0 |
      y(t) = |       | x(t)
             | 0   1 |

tau постоянный во времени из двигателя в [s] и k статическое усиление от входа до скорости вращения в [рад / (V*s)]. См. Ljung (1999) для как tau и k относитесь к физическим параметрам двигателя.

О данных ввода - вывода

1. Загрузите данные о двигателе постоянного тока.

load(fullfile(matlabroot, 'toolbox', 'ident', 'iddemos', 'data', 'dcmotordata'));

2. Представляйте данные об оценке как iddata объект.

z = iddata(y, u, 0.1, 'Name', 'DC-motor');

3. Задайте имена сигнала ввода и вывода, время начала и единицы измерения времени.

z.InputName = 'Voltage';
z.InputUnit =  'V';
z.OutputName = {'Angular position', 'Angular velocity'};
z.OutputUnit = {'rad', 'rad/s'};
z.Tstart = 0;
z.TimeUnit = 's';

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

Данные показывают в двух окнах графика.

figure('Name', [z.Name ': Voltage input -> Angular position output']);
plot(z(:, 1, 1));   % Plot first input-output pair (Voltage -> Angular position).
figure('Name', [z.Name ': Voltage input -> Angular velocity output']);
plot(z(:, 2, 1));   % Plot second input-output pair (Voltage -> Angular velocity).

Рисунок 2: данные ввода - вывода из двигателя постоянного тока.

Линейное моделирование двигателя постоянного тока

1. Представляйте структуру двигателя постоянного тока в функции.

В этом примере вы используете файл MATLAB®, но можно также использовать файлы MEX на C (чтобы получить вычислительную скорость), P-файлы или указатели на функцию. Для получения дополнительной информации смотрите Создание Файлы Модели IDNLGREY.

Функция двигателя постоянного тока вызвана dcmotor_m.m и показан ниже.

  function [dx, y] = dcmotor_m(t, x, u, tau, k, varargin)
  % Output equations.
  y = [x(1);                         ... % Angular position.
       x(2)                          ... % Angular velocity.
      ];
  % State equations.
  dx = [x(2);                        ... % Angular velocity.
        -(1/tau)*x(2)+(k/tau)*u(1)   ... % Angular acceleration.
       ];

Файл должен всегда структурироваться, чтобы возвратить следующее:

Выходные аргументы:

  • dx вектор производных состояния в случае непрерывного времени и значений обновления состояния в случае дискретного времени.

  • y выходное уравнение

Входные параметры:

  • Первые три входных параметра должны быть: t (время), x (вектор состояния, [] для статических систем), u (входной вектор, [] для timeseries).

  • Упорядоченный список параметров следует. Параметры могут быть скалярами, вектор-столбцами или 2-мерными матрицами.

  • varargin для вспомогательных входных параметров

2. Представляйте динамику двигателя постоянного тока с помощью idnlgrey объект.

Модель описывает, как входные параметры генерируют выходные параметры с помощью уравнения (уравнений) состояния.

FileName      = 'dcmotor_m';       % File describing the model structure.
Order         = [2 1 2];           % Model orders [ny nu nx].
Parameters    = [1; 0.28];         % Initial parameters. Np = 2.
InitialStates = [0; 0];            % Initial initial states.
Ts            = 0;                 % Time-continuous system.
nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, ...
                'Name', 'DC-motor');

На практике существуют воздействия, которые влияют на выходные параметры. idnlgrey модель явным образом не моделирует воздействия, но принимает, что они только добавляются к выходу (выходам). Таким образом, idnlgrey модели эквивалентны моделям Output-Error (OE). Без шумовой модели, мимо выходных параметров не влияют на прогноз будущих выходных параметров, что означает, что предсказанный выход для любого горизонта прогноза k совпадает с симулированными выходными параметрами.

3. Задайте имена ввода и вывода и модули.

set(nlgr, 'InputName', 'Voltage', 'InputUnit', 'V',               ...
          'OutputName', {'Angular position', 'Angular velocity'}, ...
          'OutputUnit', {'rad', 'rad/s'},                         ...
          'TimeUnit', 's');

4. Задайте имена и модули начальных состояний и параметров.

nlgr = setinit(nlgr, 'Name', {'Angular position' 'Angular velocity'});
nlgr = setinit(nlgr, 'Unit', {'rad' 'rad/s'});
nlgr = setpar(nlgr, 'Name', {'Time-constant' 'Static gain'});
nlgr = setpar(nlgr, 'Unit', {'s' 'rad/(V*s)'});

Можно также использовать setinit и setpar присваивать значения, минимумы, максимумы и состояние оценки для всех начальных состояний или параметров одновременно.

5. Просмотрите первоначальную модель.

a. Получите основную информацию о модели.

Двигатель постоянного тока имеет 2 (начальных) состояния и 2 параметра модели.

size(nlgr)
Nonlinear grey-box model with 2 outputs, 1 inputs, 2 states and 2 parameters (2 free).

b. Просмотрите начальные состояния и параметры.

И начальные состояния и параметры являются массивами структур. Поля задают свойства отдельного начального состояния или параметра. Введите help idnlgrey.InitialStates и help idnlgrey.Parameters для получения дополнительной информации.

nlgr.InitialStates(1)
nlgr.Parameters(2)
ans = 

  struct with fields:

       Name: 'Angular position'
       Unit: 'rad'
      Value: 0
    Minimum: -Inf
    Maximum: Inf
      Fixed: 1


ans = 

  struct with fields:

       Name: 'Static gain'
       Unit: 'rad/(V*s)'
      Value: 0.2800
    Minimum: -Inf
    Maximum: Inf
      Fixed: 0

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

Например, получите информацию о начальных состояниях, которые фиксируются (не оцененный) и минимумы всех параметров модели.

getinit(nlgr, 'Fixed')
getpar(nlgr, 'Min')
ans =

  2x1 cell array

    {[1]}
    {[1]}


ans =

  2x1 cell array

    {[-Inf]}
    {[-Inf]}

d. Получите основную информацию об объекте:

nlgr
nlgr =
Continuous-time nonlinear grey-box model defined by 'dcmotor_m' (MATLAB file):

   dx/dt = F(t, u(t), x(t), p1, p2)
    y(t) = H(t, u(t), x(t), p1, p2) + e(t)

 with 1 input(s), 2 state(s), 2 output(s), and 2 free parameter(s) (out of 2).

Name: DC-motor

Status:                                                         
Created by direct construction or transformation. Not estimated.

Используйте get получить больше информации о свойствах модели. idnlgrey возразите совместно использует много свойств параметрических линейных объектов модели.

get(nlgr)
             FileName: 'dcmotor_m'
                Order: [1x1 struct]
           Parameters: [2x1 struct]
        InitialStates: [2x1 struct]
         FileArgument: {}
    SimulationOptions: [1x1 struct]
               Report: [1x1 idresults.nlgreyest]
         TimeVariable: 't'
        NoiseVariance: [2x2 double]
                   Ts: 0
             TimeUnit: 'seconds'
            InputName: {'Voltage'}
            InputUnit: {'V'}
           InputGroup: [1x1 struct]
           OutputName: {2x1 cell}
           OutputUnit: {2x1 cell}
          OutputGroup: [1x1 struct]
                Notes: [0x1 string]
             UserData: []
                 Name: 'DC-motor'

Оценка результатов деятельности первоначальной модели двигателя постоянного тока

Прежде, чем оценить параметры tau и k, симулируйте выход системы с предположениями параметра с помощью решателя для дифференциальных уравнений по умолчанию (45 решателей Рунге-Кутта с адаптивной корректировкой длины шага). Опции симуляции заданы с помощью свойства модели "SimulationOptions".

1. Установите допуски абсолютной и относительной погрешности на маленькие значения (1e-6 и 1e-5, соответственно).

nlgr.SimulationOptions.AbsTol = 1e-6;
nlgr.SimulationOptions.RelTol = 1e-5;

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

compare отображает и измеренные и симулированные выводы одной или нескольких моделей, тогда как predict, вызванный теми же входными параметрами, отображает симулированные выводы.

Симулированные и измеренные выходные параметры показывают в окне графика.

compare(z, nlgr);

Рисунок 3: Сравнение между измеренными выходными параметрами и симулированными выходными параметрами первоначальной модели двигателя постоянного тока.

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

Оцените параметры и начальные состояния с помощью nlgreyest, который является ошибочным методом минимизации прогноза для нелинейных серых моделей поля. Опции оценки, такие как выбор отображения прогресса оценки, заданы с помощью "nlgreyestOptions" набора опции.

nlgr = setinit(nlgr, 'Fixed', {false false}); % Estimate the initial states.
opt = nlgreyestOptions('Display', 'on');
nlgr = nlgreyest(z, nlgr, opt);

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

1. Рассмотрите информацию о процессе оценки.

Эта информация хранится в Report свойство idnlgrey объект. Свойство также содержит информацию о том, как модель была оценена, такие как решатель и метод поиска, набор данных, и почему оценка была отключена.

nlgr.Report
fprintf('\n\nThe search termination condition:\n')
nlgr.Report.Termination
ans = 

         Status: 'Estimated using NLGREYEST'
         Method: 'Solver: ode45; Search: lsqnonlin'
            Fit: [1x1 struct]
     Parameters: [1x1 struct]
    OptionsUsed: [1x1 idoptions.nlgreyest]
      RandState: []
       DataUsed: [1x1 struct]
    Termination: [1x1 struct]



The search termination condition:

ans = 

  struct with fields:

                 WhyStop: 'Change in cost was less than the specified tolerance.'
              Iterations: 5
    FirstOrderOptimality: 1.4013e-04
                FcnCount: 6
               Algorithm: 'trust-region-reflective'

2. Оцените качество модели путем сравнения симулированных и измеренных выходных параметров.

Подгонки составляют 98% и 84%, которые указывают, что предполагаемая модель получает динамику двигателя постоянного тока хорошо.

compare(z, nlgr);

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

3. Сравните производительность idnlgrey модель с моделью ARX второго порядка.

na = [2 2; 2 2];
nb = [2; 2];
nk = [1; 1];
dcarx = arx(z, [na nb nk]);
compare(z, nlgr, dcarx);

Рисунок 5: Сравнение между измеренными выходными параметрами и симулированными выходными параметрами предполагаемого IDNLGREY и моделей двигателя постоянного тока ARX.

4. Проверяйте ошибки прогноза.

Полученные ошибки прогноза малы и сосредоточены вокруг (несмещенного) нуля.

pe(z, nlgr);

Рисунок 6: ошибки Прогноза получены с предполагаемой моделью двигателя постоянного тока IDNLGREY.

5. Проверяйте остаточные значения ("остатки").

Остаточные значения указывают на то, что оставляет необъясненным модель и мало по хорошему качеству модели. Используйте resid команда, чтобы просмотреть корреляции среди остаточных значений. Первый столбец графиков показывает автокорреляции остаточных значений для этих двух выходных параметров. Второй столбец показывает взаимную корреляцию этих остаточных значений с входом "Voltage". Корреляции в приемлемых границах (синяя область).

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

Рисунок 7: Остаточные значения получены с предполагаемой моделью двигателя постоянного тока IDNLGREY.

6. Постройте переходной процесс.

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

figure('Name', [nlgr.Name ': step response of estimated model']);
step(nlgr);

Рисунок 8: Переходной процесс с предполагаемой моделью двигателя постоянного тока IDNLGREY.

7. Исследуйте ковариацию модели.

Можно оценить качество предполагаемой модели в некоторой степени путем рассмотрения предполагаемой ковариационной матрицы и предполагаемого шумового отклонения. "Маленькое" значение (i, i) диагональный элемент ковариационной матрицы указывает что iПараметр модели:th важен для объяснения системной динамики при использовании выбранной структуры модели. Небольшое шумовое отклонение (ковариация для мультивыходных систем) элементы являются также хорошей индикацией, что модель собирает данные об оценке хорошим способом.

getcov(nlgr)
nlgr.NoiseVariance
ans =

   1.0e-04 *

    0.1573    0.0021
    0.0021    0.0008


ans =

    0.0010   -0.0000
   -0.0000    0.0110

Для получения дополнительной информации о предполагаемой модели, используйте present отобразить начальные состояния и оцененные значения параметров и оцененную неопределенность (стандартное отклонение) для параметров.

present(nlgr);
                                                                                           
nlgr =                                                                                     
Continuous-time nonlinear grey-box model defined by 'dcmotor_m' (MATLAB file):             
                                                                                           
   dx/dt = F(t, u(t), x(t), p1, p2)                                                        
    y(t) = H(t, u(t), x(t), p1, p2) + e(t)                                                 
                                                                                           
 with 1 input(s), 2 state(s), 2 output(s), and 2 free parameter(s) (out of 2).             
                                                                                           
 Inputs:                                                                                   
    u(1)  Voltage(t) [V]                                                                   
 States:                              Initial value                                        
    x(1)  Angular position(t) [rad]     xinit@exp1   0.0302675   (estimated) in [-Inf, Inf]
    x(2)  Angular velocity(t) [rad/s]   xinit@exp1   -0.133777   (estimated) in [-Inf, Inf]
 Outputs:                                                                                  
    y(1)  Angular position(t) [rad]                                                        
    y(2)  Angular velocity(t) [rad/s]                                                      
 Parameters:                        Value Standard Deviation                               
    p1   Time-constant [s]           0.243649       0.00396671   (estimated) in [-Inf, Inf]
    p2   Static gain [rad/(V*s)]     0.249644      0.000284486   (estimated) in [-Inf, Inf]
                                                                                           
Name: DC-motor                                                                             
                                                                                           
Status:                                                                                    
Termination condition: Change in cost was less than the specified tolerance..              
Number of iterations: 5, Number of function evaluations: 6                                 
                                                                                           
Estimated using Solver: ode45; Search: lsqnonlin on time domain data "DC-motor".           
Fit to estimation data: [98.34;84.47]%                                                     
FPE: 0.001096, MSE: 0.1187                                                                 
More information in model's "Report" property.                                             

Заключения

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

  • Используя нелинейные модели серого ящика в более усовершенствованных ситуациях с моделированием, таких как создание нелинейного непрерывный - и дискретное время, timeseries и статические модели.

  • Запись и использование C файлы модели MEX.

  • Обработка нескалярных параметров.

  • Удар определенного выбора алгоритма.

Для получения дополнительной информации об идентификации динамических систем с System Identification Toolbox посетите страницу информации о продукте System Identification Toolbox.