exponenta event banner

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 команда оценки. Для более сложных выражений создайте 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 object) сохраняет все пользовательские регрессоры в качестве 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 объект, где kyВ-й записи определяется пользовательский регрессор для вывода 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)
Имя свойстваОписание
Function

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

Например:

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

Массив ячеек символьных векторов, представляющих имена входных и выходных переменных модели в функции Function. Каждое входное и выходное имя должно совпадать с InputName и OutputName свойства idnlarx object - модель, для которой определяются пользовательские регрессоры. Размер 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