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