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