customreg

Пользовательский регрессор для нелинейных моделей ARX

Синтаксис

C=customreg(Function,Variables)
C=customreg(Function,Variables,Delays,Vectorized)

Описание

Класс customreg представляет произвольные функции прошлых вводов и выводов, такие как продукты, степени и другие выражения MATLAB® переменных ввода и вывода.

Можно задать пользовательские регрессоры в дополнение к или вместо стандартных регрессоров для большей гибкости в моделировании данных с помощью нелинейных моделей ARX. Например, можно задать регрессоры как загар (u (t-1)), u (t-1) 2 и u (t-1) *y (t-3).

Для более простых выражений регрессора задайте пользовательские регрессоры непосредственно в приложении или в команде оценки nlarx. Для более сложных выражений создайте объект customreg для каждого пользовательского регрессора и задайте эти объекты как входные параметры к оценке. Независимо от того, как вы задаете пользовательские регрессоры, тулбокс представляет эти регрессоры, когда customreg возражает. Используйте getreg, чтобы перечислить выражения всех стандартных и пользовательских регрессоров в вашей модели.

Особый случай пользовательских регрессоров включает полиномиальные комбинации прошлых вводов и выводов. Например, распространено получить нелинейность в системе с помощью многочленных выражений как y (t −1) 2, u (t −1) 2, y (t −2) 2, y (t −1) *y (t −2), y (t −1) *u (t −1), y (t − 2) *u (t −1). В командной строке используйте команду polyreg, чтобы сгенерировать регрессоры полиномиального типа автоматически путем вычисления всех комбинаций переменных ввода и вывода до заданной степени. polyreg производит объекты customreg, которые вы задаете как входные параметры к оценке.

Нелинейная модель ARX (объект idnlarx) хранит все пользовательские регрессоры как свойство CustomRegressors. Можно перечислить все пользовательские регрессоры с помощью m.CustomRegressors, где m является нелинейной моделью ARX. Для моделей MIMO, чтобы получить r th пользовательский регрессор для вывода ky, m.CustomRegressors{ky}(r) использования.

Используйте свойство Vectorized задать, вычислить ли пользовательские регрессоры с помощью векторизованной формы во время оценки. Если вы знаете, что ваши формулы регрессора могут быть векторизованы, установите Vectorized на 1 достигать лучшей производительности. Чтобы лучше понять векторизацию, считайте пользовательский указатель на функцию регрессора z=@(x,y)x^2*y. x и y являются векторами, и каждая переменная оценена по сетке времени. Поэтому z должен быть оценен для каждой пары (xi,yi), и результаты конкатенированы, чтобы произвести вектор z:

for k = 1:length(x)
   z(k) = x(k)^2*y(k)
end

Вышеупомянутое выражение является невекторизованным вычислением и имеет тенденцию быть медленным. Определение вычисления Vectorized использует правила векторизации MATLAB, чтобы выполнить выражение регрессора с помощью матриц вместо FOR - цикл и результаты в более быстром вычислении:

% ".*" indicates element-wise operation
z=(x.^2).*y 

Конструкция

C=customreg(Function,Variables) задает пользовательский регрессор для нелинейной модели ARX. C является объектом customreg, который хранит пользовательский регрессор. Function является функцией переменных ввода и вывода. Variables представляет имена входов и выходов модели в функциональном Function. Каждое имя ввода и вывода должно совпасть со свойствами InputName и OutputName соответствующего объекта idnlarx. Размер Variables должен совпадать с количеством входных параметров Function. Для нескольких - выходные модели с p выходные параметры, пользовательским регрессором является p-by-1 массив ячеек или массив объекта customreg, где ky th запись задает пользовательский регрессор для вывода ky. Необходимо добавить эти регрессоры в model путем присвоения свойства CustomRegressors model или при помощи addreg.

C=customreg(Function,Variables,Delays,Vectorized) создайте пользовательский регрессор, который включает задержки, соответствующие вводам или выводам в Arguments. Delays является вектором положительных целых чисел, которые представляют задержки переменных Variables (значение по умолчанию 1 для каждого векторного элемента). Размер Delays должен совпадать с размером Variables. значение Vectorized 1 использует правила векторизации MATLAB, чтобы выполнить выражение регрессора Function. По умолчанию значением Vectorized является (FALSE) 0.

Свойства

После создания объекта можно использовать get или запись через точку, чтобы получить доступ к значениям свойства объекта. Например:

% List all property values
get(C)
% Get value of Arguments property
C.Arguments

Можно также использовать функцию set, чтобы установить значение конкретных свойств. Например:

set(C,'Vectorized',1)
PropertyName Описание
Function

Указатель на функцию или вектор символов, представляющий функцию регрессоров стандартов.

Например:

cr = @(x,y) x*y
Variables

Массив ячеек из символьных векторов, которые представляют имена переменных входа и выхода модели в функциональном Function. Каждое имя ввода и вывода должно совпасть со свойствами InputName и OutputName объекта idnlarx — модель, для которой вы задаете пользовательские регрессоры. Размер Variables должен совпадать с количеством входных параметров Function.

Например, Variables соответствуют {'y1','u1'} в:

C = customreg(cr,{'y1','u1'},[2 3])
Delays

Вектор положительных целых чисел, представляющих задержки Variables. Размер Delays должен совпадать с размером Arguments.

Значение по умолчанию: 1 для каждого векторного элемента.

Например, Delays [2 3] в:

C = customreg(cr,{'y1','u1'},[2 3])
Vectorized

Присваиваемые значения:

  • 0 (значение по умолчанию) — Function не вычисляется в векторизованной форме.

  • 1Function вычисляется в векторизованной форме, когда названо аргументами вектора.

Примеры

свернуть все

Загрузите данные об оценке.

load iddata1

Задайте регрессоры как массив ячеек из символьных векторов.

C = {'u1(t-1)*sin(y1(t-3))','u1(t-2)^3'};

u1 и y1 являются входными и выходными данными, соответственно.

Оцените нелинейную модель ARX с помощью пользовательских регрессоров.

m = nlarx(z1,[2 2 1],'linear','CustomRegressors',C);

Загрузите данные об оценке.

load iddata1

Оцените нелинейную модель ARX с пользовательскими регрессорами.

m = nlarx(z1,[2 2 1],'linear','CustomRegressors',...
          {'u1(t-1)*sin(y1(t-3))','u1(t-2)^3'});

Загрузите данные об оценке.

load iddata1

Создайте нелинейную модель ARX.

m = idnlarx([2 2 1]);

Задайте пользовательские регрессоры.

cr1 = @(x,y) x*sin(y);
cr2 = @(x) x^3;
C = [customreg(cr1,{'u','y'},[1 3]),customreg(cr2,{'u'},2)];

Добавьте пользовательские регрессоры в модель.

m2 = addreg(m,C);

Загрузите данные об оценке.

load iddata1

Задайте регрессоры.

C = customreg(@(x,y) x*sin(y),{'u' 'y'},[1 3]);
set(C,'Vectorized',1);

Оцените нелинейную модель ARX с пользовательскими регрессорами.

m = nlarx(z1,[2 2 1],'sigmoidnet','CustomReg',C);

Представленный в R2007a