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

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

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

О модели

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

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

Если вы игнорируете нарушения порядка и выбираете y(1) как угловое положение [рад] и y(2) в качестве скорости вращения [рад/с] двигателя можно задать линейную структуру пространства состояний следующей формы (см. Ljung, L. System Identification: Theory for the User, Upper Saddle River, NJ, Prentice-Hall PTR, 1999, 2nd ed., 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 является временной константой двигателя в [с] и 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).

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

И начальные состояния, и параметры являются массивами структур. Поля задают свойства отдельного начального состояния или параметра. Тип 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 для получения дополнительной информации о свойствах модели. The idnlgrey объект имеет много свойств параметрических объектов линейной модели.

get(nlgr)
             FileName: 'dcmotor_m'
                Order: [1x1 struct]
           Parameters: [2x1 struct]
        InitialStates: [2x1 struct]
         FileArgument: {}
    SimulationOptions: [1x1 struct]
         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'
               Report: [1x1 idresults.nlgreyest]

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

Перед оценкой параметров tau и k, симулируйте выход системы с предположениями параметра с помощью решателя для дифференциальных уравнений по умолчанию (решатель Runge-Kutta 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 DC-двигателя.

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 model-файлов.

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

  • Влияние определенных вариантов алгоритма.

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