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