Можно оценить нелинейные модели ARX после того, как вы выполните следующие задачи:
Подготовьте свои данные, как описано в Подготовка данных для Нелинейной Идентификации.
(Необязательно) модель Estimate заказывает и задерживает тот же способ, которым вы были бы для линейных моделей ARX. Смотрите Предварительный Шаг – Оценка Порядков Модели и Входных Задержек.
(Необязательно) Выберите функцию отображения для выходной функции в Доступных Функциях Отображения для Нелинейных Моделей ARX.
(Необязательно) Оценка или построение линейная модель ARX для инициализации нелинейной модели ARX. Смотрите Инициализируют Нелинейную Оценку ARX Используя Линейную Модель.
nlarxИспользование nlarx и создать и оценить нелинейную модель ARX. После каждой оценки подтвердите модель путем сравнения его с другими моделями и симуляции или предсказания ответа модели.
Основная оценка
Начните с самой простой оценки с помощью m = nlarx(data,[na nb nk]). Например:
load iddata1; % na = nb = 2 and nk = 1 m = nlarx(z1,[2 2 1])
m = Nonlinear ARX model with 1 output and 1 input Inputs: u1 Outputs: y1 Regressors: Linear regressors in variables y1, u1 List of all regressors Output function: Wavelet network with 1 units Sample time: 0.1 seconds Status: Estimated using NLARX on time domain data "z1". Fit to estimation data: 68.83% (prediction focus) FPE: 1.975, MSE: 1.885
Просмотрите регрессоры.
getreg(m)
ans = 4x1 cell
{'y1(t-1)'}
{'y1(t-2)'}
{'u1(t-1)'}
{'u1(t-2)'}
Второй входной параметр [na nb nk] задает порядки модели и задержки. По умолчанию выходная функция является сетью idWaveletNetwork вейвлета, который принимает регрессоры как входные параметры к его линейным и нелинейным функциям. m idnlarx объект.
Для систем MIMO, nb, nf, и nk ny-by-nu матрицы. Смотрите nlarx страница с описанием для получения дополнительной информации об оценке MIMO.
Создайте nlarxOptions набор опции и конфигурирует Focus свойство минимизировать ошибку симуляции.
opt = nlarxOptions('Focus','simulation'); M = nlarx(z1,[2 2 1],'idSigmoidNetwork',opt);
Линейные регрессоры
Линейные регрессоры представляют линейные функции, которые основаны на задержанных переменных ввода и вывода и которые обеспечивают входные параметры в выходную функцию модели. Когда вы используете порядки задать модель, количество входных регрессоров равно na и количество выходных регрессоров равно nb. Синтаксис порядков ограничивает вас последовательными задержками. Можно также создать линейные регрессоры с помощью linearRegressor. Когда вы используете linearRegressor, можно задать произвольные задержки.
Полиномиальные регрессоры
Исследуйте включая полиномиальные регрессоры с помощью polynomialRegressor в дополнение к линейным регрессорам в нелинейной структуре модели ARX. Полиномиальные регрессоры являются полиномиальными функциями задержанных вводов и выводов. (см. Нелинейные Порядки Модели ARX и Задержку).
Например, сгенерируйте полиномиальные регрессоры к порядку 2.
P = polynomialRegressor({'y1','u1'},{[1],[2]},2);Добавьте полиномиальные регрессоры к линейным регрессорам в m.Regressors.
m.Regressors = [m.Regressors;P]; getreg(m)
ans = 8x1 cell
{'y1(t-1)' }
{'y1(t-2)' }
{'u1(t-1)' }
{'u1(t-2)' }
{'y1(t-3)' }
{'y1(t-5)' }
{'y1(t-1)^2'}
{'u1(t-2)^2'}
m теперь включает полиномиальные регрессоры.
Просмотрите размер m.Regressors массив.
size(m.Regressors)
ans = 1×2
3 1
Массив теперь содержит три объекта регрессора.
Пользовательские регрессоры
Используйте customRegressor создать регрессоры как произвольные функции переменных входа и выхода модели.
Пример.For, создайте два пользовательских регрессора та реализация 'sin(y1(t-1)' и 'y1(t-2).*u1(t-3)'.
C1 = customRegressor({'y1'},{1},@(x)sin(x));
C2 = customRegressor({'y1','u1'},{2,3},@(x,y)x.*y);
m.Regressors = [m.Regressors;C1;C2];
getreg(m) % displays all regressorsans = 10x1 cell
{'y1(t-1)' }
{'y1(t-2)' }
{'u1(t-1)' }
{'u1(t-2)' }
{'y1(t-3)' }
{'y1(t-5)' }
{'y1(t-1)^2' }
{'u1(t-2)^2' }
{'sin(y1(t-1))' }
{'y1(t-2).*u1(t-3)'}
Просмотрите свойства пользовательских регрессоров. Например, получите указатель на функцию первого пользовательского регрессора в массиве. Этот регрессор является четвертым набором регрессора в Regressors массив.
C1_fcn = m.Regressors(4).VariablesToRegressorFcn
C1_fcn = function_handle with value:
@(x)sin(x)
Просмотрите описание регрессора.
display(m.Regressors(4))
Custom regressor: sin(y1(t-1))
VariablesToRegressorFcn: @(x)sin(x)
Variables: {'y1'}
Lags: {[1]}
Vectorized: 1
TimeVariable: 't'
Regressors described by this set
Объедините регрессоры
Если вы создали линейные, полиномиальные, и пользовательские объекты регрессора, можно объединить их в любом случае, вы хотите удовлетворить своим потребностям оценки.
Регрессоры модели могут войти как входные параметры или в или в и линейные и нелинейные функциональные компоненты функций отображения, составляющих выходную функцию. Чтобы уменьшать сложность модели и сохранить оценку хорошо подготовленной, рассмотрите присвоение уменьшаемого набора регрессоров к нелинейному компоненту. Можно также присвоить подмножество регрессоров к линейному компоненту. Таблица использования регрессора, которая управляет присвоениями, обеспечивает полную гибкость. Можно присвоить любую комбинацию регрессоров к каждому компоненту. Например, задайте нелинейную модель ARX, чтобы быть линейными в мимо выходных параметров и нелинейными в прошлых входных параметрах.
m = nlarx(z1,[2 2 1]); disp(m.RegressorUsage)
y1:LinearFcn y1:NonlinearFcn
____________ _______________
y1(t-1) true true
y1(t-2) true true
u1(t-1) true true
u1(t-2) true true
m.RegressorUsage{3:4,1} = false;
m.RegressorUsage{1:2,2} = false;
disp(m.RegressorUsage) y1:LinearFcn y1:NonlinearFcn
____________ _______________
y1(t-1) true false
y1(t-2) true false
u1(t-1) false true
u1(t-2) false true
Следующая таблица обобщает доступные объекты отображения для выходной функции модели.
| Отображение описания | Значение (значение по умолчанию, сопоставляющее конфигурацию объекта) | Отображение объекта |
|---|---|---|
| Сеть Wavelet (значение по умолчанию) | 'idWaveletNetwork' или 'wave' | idWaveletNetwork |
| Один слой сигмоидальная сеть | 'idSigmoidNetwork' или 'sigm' | idSigmoidNetwork |
| Древовидный раздел | 'idTreePartition' или 'tree' | idTreePartition |
| F линеен в x | 'idLinear' или [ ] или '' | idLinear |
Дополнительные доступные объекты отображения включают многослойные нейронные сети и пользовательские сети, которые вы создаете.
Задайте многослойное использование нейронной сети:
m = nlarx(data,[na nb nk],NNet)
где NNet объект нейронной сети, что вы создаете использование программного обеспечения Deep Learning Toolbox™. Смотрите idFeedforwardNetwork страница с описанием.
Задайте пользовательскую сеть путем определения функции под названием gaussunit.m, как описано в idCustomNetwork страница с описанием. Задайте пользовательский сетевой объект CNetw и оценка модель:
CNetw = idCustomNetwork(@gaussunit); m = nlarx(data,[na nb nk],CNetw)
Если ваша выходная функция модели включает idWaveletNetwork, idSigmoidNetwork, или idCustomNetwork сопоставляя объекты, можно исключить линейную функцию с помощью LinearFcn.Use свойство объекта отображения. Объект отображения становится F (x) =, где g(.) является нелинейной функцией, и y 0 является смещением.

Примечание
Вы не можете исключить линейную функцию от древовидного раздела и объектов отображения нейронной сети.
Сконфигурируйте нелинейную структуру ARX, чтобы включать только линейную функцию в объект отображения путем установки объекта отображения на linear. В этом случае, взвешенная сумма регрессоров модели плюс смещение. Такие модели обеспечивают мост между чисто линейными моделями ARX и полностью гибкими нелинейными моделями.

Популярная нелинейная настройка ARX во многих приложениях использует полиномиальные регрессоры для системной нелинейности модели. В таких случаях система считается линейной комбинацией продуктов (задержанных) переменных ввода и вывода. Используйте polynomialRegressor команда, чтобы легко сгенерировать комбинации продуктов регрессора и степеней.
Например, предположите, что вы знаете, что выход y (t) системы линейная комбинация (y (t − 1))2, (u (t − 1))2 и y (t − 1) u (t − 1)). Чтобы смоделировать такую систему, используйте:
P = polynomialRegressor({'y1','u1'},{1,1},2)P =
Order 2 regressors in variables y1, u1
Order: 2
Variables: {'y1' 'u1'}
Lags: {[1] [1]}
UseAbsolute: [0 0]
AllowVariableMix: 0
AllowLagMix: 0
TimeVariable: 't'
Regressors described by this set
P.AllowVariableMix = true; M = nlarx(z1,P,idLinear); getreg(M)
ans = 3x1 cell
{'y1(t-1)^2' }
{'u1(t-1)^2' }
{'y1(t-1)*u1(t-1)'}
Для более комплексных комбинаций полиномиальных задержек и смешано-переменных регрессоров, можно также использовать customRegressor.
Если ваша структура модели включает объекты отображения, которые поддерживают итеративный поиск (см., Задают Опции Оценки для Нелинейных Моделей ARX), можно использовать nlarx совершенствовать параметры модели:
m1 = nlarx(z1,[2 2 1],idSigmoidNetwork);
m2 = nlarx(z1,m1); % can repeatedly run this commandМожно также использовать pem совершенствовать исходную модель:
m2 = pem(z1,m1);
Проверяйте поисковый критерий завершения m.Report.Termination.WhyStop . Если WhyStop указывает, что оценка достигла максимального количества итераций, попытайтесь повторить оценку и возможно задать большее значение для nlarxOptions.SearchOptions.MaxIterations опция оценки:
opt = nlarxOptions; opt.SearchOptions.MaxIterations = 30; m2 = nlarx(z1,m1,opt); % runs 30 more iterations % starting from m1
Когда m.Report.Termination.WhyStop значением является Near (local) minimum, (norm( g) < tol или No improvement along the search direction with line search , подтвердите свою модель, чтобы видеть, соответствует ли эта модель соответственно данным. В противном случае решение может застрять в локальном минимуме поверхности функции стоимости. Попытайтесь настроить SearchOptions.Tolerance значение или SearchMethod опция в nlarxOptions наборе опции и повторение оценка.
Можно также попытаться тревожить параметры последнего использования модели init (названная рандомизация) и совершенствование использования модели nlarx:
M1 = nlarx(z1, [2 2 1], idSigmoidNetwork); % original model M1p = init(M1); % randomly perturbs parameters about nominal values M2 = nlarx(z1, M1p); % estimates parameters of perturbed model
Можно отобразить прогресс итеративного поиска в командном окне MATLAB с помощью nlarxOptions.Display опция оценки:
opt = nlarxOptions('Display','on'); M2= nlarx(z1,M1p,opt);
Если вы не получаете удовлетворительную модель после многих испытаний с различными структурами модели и настроек алгоритма, возможно, что данные плохи. Например, ваши данные могут пропускать важные переменные ввода или вывода и не достаточно отвечают на все рабочие вопросы системы.
Нелинейная система идентификации черного ящика обычно требует, чтобы больше данных, чем линейная идентификация модели получило достаточно информации о системе.
В этом примере показано, как использовать nlarx оценить нелинейную модель ARX для измеренных данных о вводе/выводе.
Подготовьте данные к оценке.
load twotankdata
z = iddata(y, u, 0.2);
ze = z(1:1000); zv = z(1001:3000);Оцените несколько моделей с помощью различных порядков модели, задержек и настроек нелинейности.
m1 = nlarx(ze,[2 2 1]); m2 = nlarx(ze,[2 2 3]); m3 = nlarx(ze,[2 2 3],idWaveletNetwork(8));
Альтернативный способ выполнить оценку состоит в том, чтобы сконфигурировать структуру модели сначала, и затем оценить эту модель.
m4 = idnlarx([2 2 3],idSigmoidNetwork(14));
m4.RegressorUsage.("y1:NonlinearFcn")(3:4) = false;
m4 = nlarx(ze,m4);Сравните получившиеся модели путем графического вывода выходных параметров модели с измеренным выходом.
compare(zv, m1,m2,m3,m4)
