Оценка нелинейных серо-прямоугольных моделей

Определение нелинейной структуры модели серого ящика

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

x(t)=F(t,x(t),u(t),par1,par2,...,parN)y(t)=H(t,x(t),u(t),par1,par2,...,parN)+e(t)x(0)=x0

где x(t)=dx(t)dt для представления в непрерывном времени и x(t)=x(t+Ts) для представления в дискретном времени с Ts в качестве шага расчета. F и H являются произвольными линейными или нелинейными функциями с Nx и Ny компонентами, соответственно. Nx - количество состояний, Ny - количество выходов.

После того, как вы установите уравнения для своей системы, создайте функцию или файл MEX. Файлы MEX, которые могут быть созданы на C или Фортран, являются динамически связанными стандартными подпрограммами, которые могут быть загружены и выполнены MATLAB®. Дополнительные сведения о MEX-файлах см. в разделе Приложения к файлам MEX на C. Этот файл называется файлом ODE или файлом модели.

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

[dx,y] = MODFILENAME(t,x,u,p1,p2, ...,pN,FileArgument)

Совет

Файл шаблона для записи файла MEX на C, IDNLGREY_MODEL_TEMPLATE.c, расположен в matlab/toolbox/ident/nlident.

Переменные выходы:

  • dx - Представляет правую сторону (и) уравнения (уравнения ) (и) пространства состояний. A вектора-столбца с записями Nx. Для статических моделей, dx=[].

    Для моделей в дискретном времени. dx значение состояний на следующем временном шаге x(t+Ts).

    Для моделей в непрерывном времени. dx является производными состояний в момент t, или dxdt.

  • y - Представляет правую сторону (стороны) уравнения (уравнений) выхода. A вектора-столбца с записями Ny.

Входные входы файла:

  • t - Текущее время.

  • x - Вектор состояния в момент t. Для статических моделей равны [].

  • u - Входной вектор в момент t. Для моделей timeseries равны [].

  • p1,p2, ...,pN - Параметры, которые могут быть вещественными скалярами, векторами-столбцами или двумерными матрицами. N - количество объектов параметров. Для скалярных параметров N - общее количество элементов параметра.

  • FileArgument - Содержит вспомогательные переменные, которые могут потребоваться для обновления констант в уравнениях состояния.

Совет

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

Для примера создания серого ящика файлов модели и idnlgrey объект модели, см. Создание файлов модели idnlgrey.

Для примеров файлов кода и файлов MEX, которые определяют структуру модели, смотрите toolbox/ident/iddemos/examples папка. Для примера модель двигателя постоянного тока описывается в файлах dcmotor_m и dcmotor_c.

Построение объекта idnlgrey

После того, как вы создаете функцию или файл MEX со структурой модели, задайте idnlgrey объект. Этот объект разделяет многие свойства линейного idgrey объект модели.

Используйте следующий общий синтаксис, чтобы определить idnlgrey объект модели:

m = idnlgrey('filename',Order,Parameters,InitialStates)

idnlgrey аргументы определяются следующим образом:

  • 'filename' - Имя функции или файла MEX, хранящих структуру модели. Этот файл должен быть в пути MATLAB, когда вы используете этот объект модели для оценки модели, предсказания или симуляции.

  • Order - Вектор с тремя значениями [Ny Nu Nx], задающее количество выходов модели Ny, количество входов Nu, и количество состояний Nx.

  • Parameters - Параметры, заданные как struct массивы, массивы ячеек или двойные массивы.

  • InitialStates - Задается так же, как и параметры. Должен быть четвертым входом в idnlgrey конструктор.

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

Использовать nlgreyest или pem чтобы оценить вашу модель серого ящика. Перед оценкой желательно моделировать модель, чтобы убедиться, что файл модели был правильно закодирован. Для примера вычислите ответ модели на входной сигнал данных оценки используя sim:

y = sim(model,data)
где, model является idnlgrey объект, и data - данные оценки (iddata объект).

Использование nlgreyest Для оценки нелинейных серых ящиков

Вы можете использовать nlgreyest команда для оценки неизвестного idnlgrey параметров модели и начальных состояний с использованием измеренных данных.

Входно-выходные размерности данных должны быть совместимы с входом и выходными порядками, заданными для idnlgrey модель.

Используйте следующий общий синтаксис оценки:

m2 = nlgreyest(data,m)

где data - данные оценки и m является idnlgrey объект модели, который вы создали. Область выхода m2 является idnlgrey модель такого же строения, как и m, с параметрами и начальными состояниями, обновленными, чтобы соответствовать данным. Больше информации об оценке можно получить из Report свойство. Для получения дополнительной информации о Report и как его использовать, см. Выходные аргументы в nlgreyest страница с описанием, или тип m2.Report в командной строке.

Можно задать дополнительные опции оценки, используя nlgreyestOptions набор опций, включая SearchMethod и SearchOption.

Для получения информации о проверке моделей смотрите Валидация модели.

Представление нелинейной динамики с использованием файла 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.

Нелинейные свойства модели Серый ящик и опции оценки

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

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

Метод симуляции

Симуляция задаётся с помощью SimulationOptions (struct) свойство idnlgrey.

Программное обеспечение System Identification Toolbox™ предоставляет несколько переменно-шаговых и фиксированно-шаговых решателей для симуляции idnlgrey модели.

Для систем в дискретном времени решатель по умолчанию 'FixedStepDiscrete'. Для систем непрерывного времени решатель по умолчанию 'ode45'. По умолчанию SimulationOptions.Solver установлено в 'Auto', который автоматически выбирает любой из 'ode45' или 'FixedStepDiscrete' во время оценки и симуляции - в зависимости от того, является ли система непрерывной или дискретной по времени.

Чтобы просмотреть список доступных решателей и их свойств, смотрите SimulationOptions свойство модели в idnlgrey страница с описанием.

Метод поиска

Вы задаете метод поиска для оценки параметров модели с помощью SearchMethod опция nlgreyestOptions набор опций. Для нелинейного серого моделирования доступны две категории методов.

Одна категория методов состоит из схем минимизации, которые основаны на методах линейного поиска, включая методы типа Гаусса-Ньютона, методы наискорейшего спуска и методы Левенберга-Марквардта.

Отражающий метод Ньютона доверительной области нелинейного метода наименьших квадратов (lsqnonlin), где стоимость является суммой квадратов ошибок между измеренным и моделируемым выходами, требует программного обеспечения Optimization Toolbox™. Когда границы параметров отличаются от Inf по умолчанию +/-, этот метод поиска обрабатывает границы лучше, чем схемы, основанные на поиске линии. Однако, в отличие от методов, основанных на поиске по строке, lsqnonlin не может обработать автоматическое взвешивание по обратному расчетному отклонению шума в множественных выходных случаях. Для получения дополнительной информации смотрите OutputWeight опция оценки в nlgreyestOptions страница с описанием.

По умолчанию SearchMethod установлено в Auto, который автоматически выбирает метод из доступных минимизаторов. Если установлен продукт Optimization Toolbox, SearchMethod установлено в 'lsqnonlin'. В противном случае SearchMethod является комбинацией схем на основе линейного поиска.

Для получения подробной информации об этом и других nlgreyest оценка опций, см. nlgreyestOptions.

Опции градиента

Вы задаете метод вычисления градиентов с помощью GradientOptions опция nlgreyestOptions набор опций. Градиенты являются производными ошибок относительно неизвестных параметров и начальных состояний.

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

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

Для получения подробной информации об этом и других nlgreyest оценка опций, см. nlgreyestOptions.

См. также

|

Похожие примеры

Подробнее о