Можно оценить нелинейные модели 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 Standard regressors corresponding to the orders: na = 2, nb = 2, nk = 1 No custom regressor Nonlinear regressors: y1(t-1) y1(t-2) u1(t-1) u1(t-2) Nonlinearity: wavenet with 1 unit 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
Второй входной параметр [na nb nk] задайте порядки модели и задержки. По умолчанию средство оценки нелинейности является сетью вейвлета (см. wavenet страница с описанием), который берет все стандартные регрессоры в качестве входных параметров к ее линейным и нелинейным функциям. m idnlarx объект.
Для систем MIMO, nb, nf, и nk ny-by-nu матрицы. Смотрите nlarx страница с описанием для получения дополнительной информации об оценке MIMO.
Задайте различное средство оценки нелинейности (например, сигмоидальная сеть).
M = nlarx(z1,[2 2 1],'sigmoid');Создайте nlarxOptions набор опции и конфигурирует Focus свойство минимизировать ошибку симуляции.
opt = nlarxOptions('Focus','simulation'); M = nlarx(z1,[2 2 1],'sigmoid',opt);
Стандартные регрессоры
Измените порядок модели создать структуру модели с различными регрессорами модели, которые являются задержанными переменными ввода и вывода, которые являются входными параметрами к средству оценки нелинейности.
Пользовательские регрессоры
Исследуйте включая пользовательские регрессоры в нелинейной структуре модели ARX. Пользовательские регрессоры в дополнение к стандартным регрессорам модели (см. Нелинейные Порядки Модели ARX и Задержку).
Используйте polyreg или customreg создать пользовательские регрессоры в терминах переменных ввода - вывода модели. Можно задать пользовательские регрессоры с помощью CustomRegressors свойство idnlarx класс или addreg добавлять пользовательские регрессоры к существующей модели.
Например, сгенерируйте регрессоры как полиномиальные функции вводов и выводов:
load iddata1 m = nlarx(z1,[2 2 1],'sigmoidnet'); getreg(m) % displays all regressors
Regressors:
y1(t-1)
y1(t-2)
u1(t-1)
u1(t-2)
% Generate polynomial regressors up to order 2:
reg = polyreg(m)4x1 array of Custom Regressors with fields: Function, Arguments, Delays, Vectorized
Добавьте полиномиальные регрессоры к CustomRegressors.
m = addreg(m,reg); getreg(m)
Regressors:
y1(t-1)
y1(t-2)
u1(t-1)
u1(t-2)
y1(t-1).^2
y1(t-2).^2
u1(t-1).^2
u1(t-2).^2
m теперь включает полиномиальные регрессоры.
Можно также задать произвольные функции переменных ввода и вывода. Например:
load iddata1 m = nlarx(z1,[2 2 1],'sigmoidnet','CustomReg',{'y1(t-1)^2','y1(t-2)*u1(t-3)'}); getreg(m) % displays all regressors
Regressors:
y1(t-1)
y1(t-2)
u1(t-1)
u1(t-2)
y1(t-1)^2
y1(t-2)*u1(t-3)
Добавьте полиномиальные регрессоры к CustomRegressors.
m = addreg(m,reg);
getreg(m) % polynomial regressorsRegressors:
y1(t-1)
y1(t-2)
u1(t-1)
u1(t-2)
y1(t-1)^2
y1(t-2)*u1(t-3)
y1(t-1).^2
y1(t-2).^2
u1(t-1).^2
u1(t-2).^2
Управляйте пользовательскими регрессорами с помощью CustomRegressors свойство idnlarx класс. Например, чтобы получить указатель на функцию первого пользовательского регрессора в массиве:
CReg1 = m.CustomReg(1).Function;
Просмотрите выражение регрессора.
m.CustomReg(1).Display
ans = 'y1(t-1)^2'
Можно исключить все стандартные регрессоры и использовать только пользовательские регрессоры в структуре модели установкой na=nb=nk=0:
m = nlarx(z1,[0 0 0],'linear','CustomReg',{'y1(t-1)^2','y1(t-2)*u1(t-3)'});
В усовершенствованных приложениях можно задать усовершенствованные опции оценки для средств оценки нелинейности. Например, wavenet и treepartition классы обеспечивают Options свойство для установки таких опций оценки.
По умолчанию все регрессоры модели входят как входные параметры и в линейные и в нелинейные функциональные блоки средства оценки нелинейности. Чтобы уменьшать сложность модели и сохранить оценку хорошо подготовленной, используйте подмножество регрессоров как входные параметры к нелинейной функции нелинейного блока средства оценки. Например, задайте нелинейную модель ARX, чтобы быть линейными в мимо выходных параметров и нелинейными в прошлых входных параметрах.
m = nlarx(z1,[2 2 1]); % all standard regressors are % inputs to the nonlinear function getreg(m); % lists all standard regressors
Regressors:
y1(t-1)
y1(t-2)
u1(t-1)
u1(t-2)
m = nlarx(z1,[4 4 1],sigmoidnet,'nlreg',[5 6 7 8]);Этот пример использует getreg определить индекс каждого регрессора из полного списка всех регрессоров модели. Только регрессор числа 5 - 8 является входными параметрами к нелинейной функции - getreg показывает, что эти регрессоры являются функциями входной переменной u1. nlreg сокращение от NonlinearRegressors свойство idnlarx класс. В качестве альтернативы включайте только входные регрессоры в нелинейное использование функционального блока:
m = nlarx(z1,[4 4 1],sigmoidnet,'nlreg','input');
Когда вы не будете уверены, который регрессоры включать как входные параметры к нелинейному функциональному блоку, задайте, чтобы искать во время оценки оптимальную комбинацию регрессора:
m = nlarx(z1,[4 4 1],sigmoidnet,'nlreg','search');
Этот поиск обычно занимает много времени. Можно отобразить поисковое использование прогресса:
opt = nlarxOptions('Display','on'); m = nlarx(z1,[4 4 1],sigmoidnet,'nlreg','search',opt);
После оценки используйте m.NonlinearRegressors просмотреть, какие регрессоры были выбраны автоматическим поиском регрессора.
m.NonlinearRegressors
ans = 1×4
3 5 6 7
Задайте средство оценки нелинейности непосредственно в команде оценки как:
Вектор символов имени нелинейности, которое использует настройку нелинейности по умолчанию.
m = nlarx(z1, [2 2 1],'sigmoidnet');Объект Nonlinearity.
m = nlarx(z1,[2 2 1],wavenet('num',5));Эта оценка использует нелинейную модель ARX с нелинейностью вейвлета, которая имеет 5 модулей. Создать объект нелинейности прежде если это как вход к средству оценки нелинейности:
w = wavenet('num', 5); m = nlarx(z1,[2 2 1],w); % or w = wavenet; w.NumberOfUnits = 5; m = nlarx(z1,[2 2 1],w);
Для систем MIMO можно задать различную нелинейность для каждого выхода. Например, чтобы задать sigmoidnet для первого выхода и wavenet для второго выхода:
load iddata1 z1 load iddata2 z2 data = [z1, z2(1:300)]; M = nlarx(data,[[1 1;1 1] [2 1;1 1] [2 1;1 1]],[sigmoidnet wavenet]);
Если вы хотите ту же нелинейность для всех выходных каналов, задаете одну нелинейность.
M = nlarx(data,[[1 1;1 1] [2 1;1 1] [2 1;1 1]],sigmoidnet);
Следующая таблица обобщает значения, которые задают средства оценки нелинейности.
| Нелинейность | Значение (настройка нелинейности по умолчанию) | Класс |
|---|---|---|
| Сеть Wavelet (значение по умолчанию) | 'wavenet' или 'wave' | wavenet |
| Один слой сигмоидальная сеть | 'sigmoidnet' или 'sigm' | sigmoidnet |
| Древовидный раздел | 'treepartition' или 'tree' | treepartition |
| F линеен в x | 'linear' или [ ] | linear |
Дополнительная доступная нелинейность включает многослойные нейронные сети и пользовательские сети, которые вы создаете.
Задайте многослойное использование нейронной сети:
m = nlarx(data,[na nb nk],NNet)
где NNet объект нейронной сети, что вы создаете использование программного обеспечения Deep Learning Toolbox™. Смотрите neuralnet страница с описанием.
Задайте пользовательскую сеть путем определения функции под названием gaussunit.m, как описано в customnet страница с описанием. Задайте пользовательский сетевой объект CNetw и оценка модель:
CNetw = customnet(@gaussunit); m = nlarx(data,[na nb nk],CNetw)
Если ваша модель включает wavenet, sigmoidnet, и customnet средства оценки нелинейности, можно исключить линейную функцию с помощью LinearTerm свойство средства оценки нелинейности. Средство оценки нелинейности становится F (x) =.

Например:
SNL = sigmoidnet('LinearTerm','off'); m = nlarx(z1,[2 2 1],SNL);
Вы не можете исключить линейную функцию от древовидного раздела и средств оценки нелинейности нейронной сети.
Сконфигурируйте нелинейную структуру ARX, чтобы включать только линейную функцию в средство оценки нелинейности путем установки нелинейности на linear. В этом случае, F (x) = взвешенная сумма регрессоров модели плюс смещение. Такие модели обеспечивают мост между чисто линейными моделями ARX и полностью гибкими нелинейными моделями.

В самом простом случае модель только со стандартными регрессорами линейна (аффинно). Например, эта структура:
m = nlarx(z1,[2 2 1],'linear');похоже на линейную модель ARX:
lin_m = arx(z1,[2 2 1]);
Однако нелинейная модель m ARX более гибка, чем линейная модель ARX lin_m потому что это содержит срок смещения, d. Этот срок смещения обеспечивает дополнительную гибкость получения смещений сигнала, который не доступен в линейных моделях.
Популярная нелинейная настройка ARX во многих приложениях использует полиномиальные регрессоры для системной нелинейности модели. В таких случаях система считается линейной комбинацией продуктов (задержанных) переменных ввода и вывода. Используйте polyreg команда, чтобы легко сгенерировать комбинации продуктов регрессора и степеней.
Например, предположите, что вы знаете, что выход y (t) системы линейная комбинация (y (t − 1)) 2 и y (t − 2) *u (t − 3). Чтобы смоделировать такую систему, используйте:
M = nlarx(z1,[0 0 0],'linear','CustomReg',{'y1(t-1)^2','y1(t-2)*u1(t-3)'});
M не имеет никаких стандартных регрессоров, и нелинейность в модели описана только пользовательскими регрессорами.
Если ваша структура модели включает нелинейность, которая поддерживает итеративный поиск (см., Задают Опции Оценки для Нелинейных Моделей ARX), можно использовать nlarx совершенствовать параметры модели:
m1 = nlarx(z1,[2 2 1],'sigmoidnet'); 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], 'sigm'); % 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],wavenet('num',8)); m4 = nlarx(ze,[2 2 3],wavenet('num',8),... 'nlr', [1 2]);
Альтернативный способ выполнить оценку состоит в том, чтобы сконфигурировать структуру модели сначала, и затем оценить эту модель.
m5 = idnlarx([2 2 3],sigmoidnet('num',14),'nlr',[1 2]); m5 = nlarx(ze,m5);
Сравните получившиеся модели путем графического вывода выходных параметров модели с измеренным выходом.
compare(zv, m1,m2,m3,m4,m5)
