Этот пример показывает, как создать, оценить и анализировать нелинейные модели серого поля.
Нелинейные модели (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.