Можно оценить нелинейные модели 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 regressors
Regressors: 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)