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