customreg

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

customreg команда не рекомендуется. Для полиномиальных регрессоров используйте polynomialRegressor вместо этого. Для других пользовательских регрессоров используйте customRegressor. Для получения дополнительной информации см. Вопросы совместимости.

Синтаксис

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

Описание

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

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

Для более простых выражений регрессора задайте пользовательские регрессоры непосредственно в приложении или в nlarx команда оценки. Для более сложных выражений создайте a 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, чтобы получить rth пользовательский регрессор для выхода ky, используйте m.CustomRegressors{ky}(r).

Используйте Vectorized свойство задать, вычислить ли пользовательские регрессоры с помощью векторизованной формы во время оценки. Если вы знаете, что ваши формулы регрессора могут быть векторизованы, установите Vectorized к 1 достигнуть лучшей эффективности. Чтобы лучше изучить векторизацию, считайте пользовательский указатель на функцию регрессора z=@(x,y)x^2*yX и 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 isa customreg возразите, что хранит пользовательский регрессор. Function функция переменных ввода и вывода. Variables представляйте имена входов и выходов модели в функциональном Function. Каждое имя ввода и вывода должно совпасть с InputName и OutputName свойства соответствия idnlarx объект. Размер Variables должен совпадать с количеством Function входные параметры. Для нескольких - выходные модели с p выходные параметры, пользовательским регрессором является p- 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 значением является 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'} \in:

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

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

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

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

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

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

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

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

Примеры

свернуть все

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

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);

Вопросы совместимости

развернуть все

Не рекомендуемый запуск в R2021a

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