customreg

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

The 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 команда оценки. Для более сложных выражений создайте 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*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 объект, где kyth entry определяет пользовательский регрессор для выхода ky. Вы должны добавить эти регрессоры к model путем назначения CustomRegressors model свойство или при помощи addreg.

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

Свойства

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

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

Вы также можете использовать set функция для задания значения конкретных свойств. Для примера:

set(C,'Vectorized',1)
Имя свойстваОписание
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);

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

расширить все

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

Введенный в R2007a