Необходимо представлять систему как набор нелинейного различия первого порядка или дифференциальных уравнений:
где для представления непрерывного времени и для представления дискретного времени с Ts как шаг расчета. F и H являются произвольными линейными или нелинейными функциями с Nx и нью-йоркскими компонентами, соответственно. Nx является количеством состояний, и Ny является количеством выходных параметров.
После того, как вы устанавливаете уравнения для своей системы, создаете функцию или файл MEX. Файлы MEX, которые могут быть созданы в C или Фортране, являются динамически соединенными стандартными подпрограммами, которые могут загрузиться и выполнены MATLAB®. Для получения дополнительной информации о файлах MEX, см. Приложения Файла MEX на C (MATLAB). Этот файл называется файлом ОДУ или файлом модели.
Цель файла модели состоит в том, чтобы возвратить производные состояния и выходные параметры модели как функция времени, состояний, входных параметров и параметров модели, можно следующим образом:
[dx,y] = MODFILENAME(t,x,u,p1,p2, ...,pN,FileArgument)
Файл шаблона для записи файла MEX на C, IDNLGREY_MODEL_TEMPLATE.c
, расположен в matlab/toolbox/ident/nlident
.
Выходные переменные:
dx
— Представляет правую сторону (стороны) уравнения (уравнений) пространства состояний. Вектор-столбец с записями Nx. Для статических моделей, dx=[]
.
Для моделей дискретного времени.
dx
значение состояний на следующем временном шаге x(t+Ts)
.
Для моделей непрерывного времени.
dx
производные состояния во время t, или .
y
— Представляет правую сторону (стороны) выходного уравнения (уравнений). Вектор-столбец с нью-йоркскими записями.
Входные параметры файла:
t
'CurrentTime' .
x
— Вектор состояния во время t
. Для статических моделей, равняется []
.
u
— Входной вектор во время t
. Для моделей timeseries, равняется []
.
p1,p2, ...,pN
— Параметры, которые могут быть действительными скалярами, вектор-столбцами или двумерными матрицами. N
количество объектов параметра. Для скалярных параметров, N
общее количество элементов параметра.
FileArgument
— Содержит вспомогательные переменные, которые могут требоваться для обновления констант в уравнениях состояния.
После создания файла модели вызовите его непосредственно из программного обеспечения MATLAB с разумными входными параметрами и проверьте выходные значения. Также проверяйте, что для ожидаемого входного значения и областей значений значения параметров, выход модели и производные остаются конечными.
Для примера создания файлов модели серого ящика и idnlgrey
объект модели, смотрите Создание idnlgrey Файлы Модели.
Для примеров файлов кода и файлов MEX, которые задают структуру модели, смотрите toolbox/ident/iddemos/examples
папка. Например, модель двигателя постоянного тока описана в файлах dcmotor_m
и dcmotor_c
.
После того, как вы создаете функцию или файл MEX с вашей структурой модели, задаете idnlgrey
объект. Этот объект совместно использует многие свойства линейного idgrey
объект модели.
Используйте следующий общий синтаксис, чтобы задать idnlgrey
объект модели:
m = idnlgrey('filename',Order,Parameters,InitialStates)
idnlgrey
аргументы определяются следующим образом:
— Имя функции или файл MEX, хранящий структуру модели. Этот файл должен быть на пути MATLAB, когда вы используете этот объект модели в оценке модели, прогнозе или симуляции.FileName
'
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
.
Для получения информации о проверке ваших моделей смотрите Проверку допустимости модели.
В этом примере показано, как создать, оцените и анализируйте нелинейные модели серого ящика.
Нелинейный серый ящик (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.
idnlgrey
создает нелинейный серый ящик, основанный на модели на структуре модели и свойствах. Параметры и начальные состояния созданного idnlgrey
объект оценивается с помощью nlgreyest
.
Следующие свойства модели и опции оценки влияют на результаты создания и оценки модели.
Вы задаете метод симуляции с помощью SimulationOptions
Struct ()
) свойство idnlgrey
.
Программное обеспечение System Identification Toolbox™ обеспечивает несколько переменных шагов и решателей фиксированного шага для симуляции idnlgrey
модели.
Для систем дискретного времени решателем по умолчанию является 'FixedStepDiscrete'
. Для систем непрерывного времени решателем по умолчанию является 'ode45'
. По умолчанию, SimulationOptions.Solver
установлен в 'Auto'
, который автоматически выбирает 'ode45'
или 'FixedStepDiscrete'
во время оценки и симуляции — в зависимости от того, непрерывна ли система или дискретна вовремя.
Чтобы просмотреть список доступных решателей и их свойств, смотрите SimulationOptions
свойство модели в idnlgrey
страница с описанием.
Вы задаете метод поиска для оценки параметров модели с помощью SearchMethod
опция nlgreyestOptions
опция установлена. Две категории методов доступны для нелинейного моделирования серого ящика.
Одна категория методов состоит из схем минимизации, которые основаны на методах поиска линии, включая методы типа Ньютона Гаусса, методы быстрейшего спуска и методы Levenberg-Marquardt.
Доверительная область Отражающий метод Ньютона нелинейного метода наименьших квадратов (lsqnonlin
), где стоимость является суммой квадратов ошибок между измеренными и симулированными выходными параметрами, требует программного обеспечения Optimization Toolbox™. Когда границы параметра отличаются от значения по умолчанию +/-Inf, этот метод поиска обрабатывает границы лучше, чем схемы на основе поиска линии. Однако различающийся основанные на линии-поиском методы, lsqnonlin
не может обработать автоматическое взвешивание инверсией предполагаемого шумового отклонения в мультивыходных случаях. Для получения дополнительной информации смотрите OutputWeight
опция оценки в nlgreyestOptions
страница с описанием.
По умолчанию, SearchMethod
установлен в Auto
, который автоматически выбирает метод из доступных минимизаторов. Если продукт Optimization Toolbox установлен, SearchMethod
установлен в 'lsqnonlin'
. В противном случае, SearchMethod
комбинация основанных на поиске линии схем.
Для получения дальнейшей информации об этом и другом nlgreyest
опции оценки, смотрите nlgreyestOptions
.
Вы задаете метод для вычисления градиентов с помощью GradientOptions
опция nlgreyestOptions
опция установлена. Градиенты являются производными ошибок относительно неизвестных параметров и начальных состояний.
Градиенты вычисляются путем числового беспокойства неизвестных количеств и измерения их эффектов на ошибке симуляции.
Опция для расчета градиента включает выбор схемы дифференцирования (вперед, обратный или центральный), размер минимального возмущения неизвестных количеств, и вычисляются ли градиенты одновременно или индивидуально.
Для получения дальнейшей информации об этом и другом nlgreyest
опции оценки, смотрите nlgreyestOptions
.