Вы должны представить свою систему как набор нелинейных разностей первого порядка или дифференциальных уравнений:
par2,..., parN) + e (t) x (0) = x0
где (t) dt для непрерывного времени
После создания уравнений для системы создайте функцию или MEX-файл. MEX-файлы, которые могут быть созданы в C или Fortran, представляют собой динамически связанные подпрограммы, которые могут быть загружены и выполнены MATLAB ®. Дополнительные сведения о файлах MEX см. в разделе Приложения файлов C MEX. Этот файл называется файлом ODE или файлом модели.
Целью файла модели является возврат производных состояний и выходных данных модели как функции времени, состояний, входных данных и параметров модели следующим образом:
[dx,y] = MODFILENAME(t,x,u,p1,p2, ...,pN,FileArgument)
Совет
Файл шаблона для записи файла C MEX, IDNLGREY_MODEL_TEMPLATE.c, находится в matlab/toolbox/ident/nlident.
Выходные переменные:
dx - представляет правую сторону (стороны) уравнения (уравнений) состояния-пространства. Вектор столбца с записями Nx. Для статических моделейdx=[].
Для дискретно-временных моделей.
dx - значение состояний на следующем шаге времени x(t+Ts).
Для моделей непрерывного времени.
dx - производные состояния в момент времени t или .
y - Представляет правую сторону (стороны) выходного уравнения (уравнений). Вектор столбца с элементами Ny.
Входные данные файла:
t - Текущее время.
x - Вектор состояния в момент времени t. Для статических моделей - равно [].
u - Входной вектор в момент времени t. Для моделей временных рядов - равно [].
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см. раздел Построение структурированных и пользовательских моделей с использованием Toolbox™ идентификации системы.
Сведения о модели
В этом примере моделируется динамика линейного двигателя постоянного тока с помощью idnlgrey объект.

Рис. 1. Принципиальная схема двигателя постоянного тока.
Если вы игнорируете нарушения и выбираете y(1) в качестве углового положения [рад] и y(2) в качестве угловой скорости [рад/с] двигателя можно настроить линейную структуру состояния-пространства следующей формы (см. Ljung, L. System Identification: Theory for the User, Upper Saddle River, NJ, Prentice-Hall PTR, 1999, 2-е изд., стр. 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 - статический коэффициент усиления от входного до угловой скорости в [рад/( В * с)]. См. 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 ®, но можно также использовать C MEX-файлы (для увеличения вычислительной скорости), 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 (входной вектор, [] для временных рядов).
Ниже приведен упорядоченный список параметров. Параметрами могут быть скаляры, векторы столбцов или двумерные матрицы.
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. Просмотр исходной модели.
а. Получить основную информацию о модели.
Двигатель постоянного тока имеет 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]
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 с адаптивной регулировкой длины шага). Параметры моделирования задаются с помощью свойства модели «Параметры моделирования».
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 для просмотра корреляций между остатками. В первом столбце графиков показаны автокорреляции остатков для двух выходов. Во втором столбце показана взаимная корреляция этих остатков с входным значением «Напряжение». Корреляции находятся в пределах допустимых границ (синяя область).
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.
Заключения
Этот пример иллюстрирует основные инструменты для выполнения нелинейного моделирования «серого ящика». См. другие нелинейные серые примеры, чтобы узнать о:
Использование нелинейных серых моделей в более сложных ситуациях моделирования, таких как построение нелинейных непрерывных и дискретно-временных, временных и статических моделей.
Запись и использование файлов моделей C MEX.
Обработка нескалярных параметров.
Влияние определенных вариантов алгоритма.
Дополнительные сведения об идентификации динамических систем с помощью инструментария идентификации систем см. на информационной странице инструментария идентификации систем.
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.