customRegressor

Задайте пользовательский регрессор для нелинейной модели ARX

Описание

Пользовательский регрессор представляет одну пользовательскую формулу, которая работает с задержанными входными и выходными переменными. Например, y (t -1) eu(t–1) является пользовательским регрессором, который можно создать с помощью формулы @(x,y)x.*exp(y). A customRegressor объект инкапсулирует набор пользовательских регрессоров. Использование customRegressor объекты при создании нелинейных моделей ARX с помощью idnlarx или nlarx. Можно задать customRegressor объекты наряду с linearRegressor и polynomialRegressor объекты и объединить их в один комбинированный набор регрессоров.

Создание

Описание

пример

cReg = customRegressor(Variables,Lags,Fcn) создает customRegressor объект с выходом и входом именами в Variables, соответствующие лаги в Lags, и указатель на функцию в Fcn. Fcn устанавливает VariablesToRegressorFcn свойство. Для примера, если Variables содержит 'y', lags содержит соответствующий вектор задержки [2 4], и пользовательская функция @(x)sin(x), затем регрессоры, которые используют 'y' являются sin (y (t -2)) и sin (y (t -4)).

cReg = customRegressor(Variables,Lags,Fcn,Vectorized) задает, Fcn может обработать вектор входов, чтобы вернуть вектор с выходом значениями, основанными на значении Vectorized.

Свойства

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

Пользовательская функция, которая преобразует набор задержанных переменных в числовой скалярный выход, заданный как указатель на функцию.

Пример: @(x)sin(x)

Пример: @(x,y)x.*exp(y)

Выход и входы имен переменных, заданные как массив ячеек из строк или массив ячеек, который ссылается на OutputName и InputName свойства iddata объект. Каждая запись должна быть строкой без специальных символов, кроме белых пространств.

Пример: {'y1','u1'}

Пример: [z.OutputName; z.InputName]

Лаги в каждой переменной, заданные как массив ячеек 1-by n v из неотрицательных целочисленных векторов-строк, где n v - общее количество переменных регрессора. Каждый вектор-строка содержит n r целых чисел, которые задают n r задержек регрессора для соответствующей переменной. Когда n r > 1 по крайней мере для одной из переменных, то программное обеспечение генерирует регрессор для каждой комбинации задержек. Например, предположите, что Вы хотите создать формулу <reservedrangesplaceholder9> (<reservedrangesplaceholder8>) = sin (y 1 (t - a)), потому что (u 1 (t - b)), где задержка a может быть 1 или 2 и задержку b можно 0 или 3. Задайте Lags как {[1 2],[0 3]}, что соответствует переменным {'y1','u1'}. Настоящая спецификация создает следующий набор регрессоров:

  • 'sin(y1(t-1))*cos(u1(t))'

  • 'sin(y1(t-1))*cos(u1(t-3))'

  • 'sin(y1(t-2))*cos(u1(t))'

  • 'sin(y1(t-2))*cos(u1(t-3))'

Если задержка соответствует выходу переменной idnlarx модель, минимальная задержка должна быть больше или равной 1.

Пример: {1 1}

Пример: {[1 2],[1,3,4]}

Индикатор векторизации, который определяет, VariablesToRegressorFcn ли векторизируется, задается как true или false.

Пример установки этого свойства см. в разделе Использование абсолютного значения в наборе полиномиальных регрессоров.

Пример: [true,false]

Имя временной переменной, заданное как допустимый MATLAB® имя переменной, отличающееся от значений в Variables.

Пример: 'ClockTime'

Примеры

свернуть все

Создайте пользовательский регрессор, который представляет формулу xey.

Задайте входные переменные следующим 'u1'y1'и соответствующие лаги 1 и 3 задержки.

vars = {'y1','u1'};
lags = {1 3};

Задайте пользовательскую функцию.

fcn = @(x,y)x.*exp(y);

Создайте регрессор.

cReg = customRegressor(vars,lags,fcn)
cReg = 
Custom regressor: y1(t-1).*exp(u1(t-3))
    VariablesToRegressorFcn: @(x,y)x.*exp(y)
                  Variables: {'y1'  'u1'}
                       Lags: {[1]  [3]}
                 Vectorized: 1
               TimeVariable: 't'

  Regressors described by this set

Создайте набор пользовательских регрессоров в трех переменных, все на основе формулы xy+sin(z).

Задайте имена переменных и лаги.

vars = {'a','b','c'};
lags = {[1 5],[0 8],7};

Задайте пользовательскую функцию.

fcn = @(x,y,z)x.*y+sin(z);

Создайте пользовательский набор регрессоров.

cReg = customRegressor(vars,lags,fcn)
cReg = 
Custom regressor: @(x,y,z)x.*y+sin(z)
    VariablesToRegressorFcn: @(x,y,z)x.*y+sin(z)
                  Variables: {'a'  'b'  'c'}
                       Lags: {[1 5]  [0 8]  [7]}
                 Vectorized: 1
               TimeVariable: 't'

  Regressors described by this set

cReg задает регрессоры для всех возможных комбинаций задержек.

Загрузите данные оценки z1, который имеет один вход и один выход, и получают выходные и входные имена.

load iddata1 z1;
names = [z1.OutputName z1.InputName]
names = 1×2 cell
    {'y1'}    {'u1'}

Задайте L как набор линейных регрессоров, который представляет y1(t-1), u1(t-2), и u1(t-5).

L = linearRegressor(names,{1,[2 5]});

Задайте P как полиномиальный регрессор y1(t-1)2.

P = polynomialRegressor(names(1),1,2);

Задайте C как пользовательский регрессор y1(t-2)u1(t-3). Используйте указатель анонимной функции, чтобы задать эту функцию.

C = customRegressor(names,{2 3},@(x,y)x.*y)
C = 
Custom regressor: y1(t-2).*u1(t-3)
    VariablesToRegressorFcn: @(x,y)x.*y
                  Variables: {'y1'  'u1'}
                       Lags: {[2]  [3]}
                 Vectorized: 1
               TimeVariable: 't'

  Regressors described by this set

Объедините регрессоры в вектор-столбец R.

R = [L;P;C]
R=3×1 object
[3 1] array of linearRegressor, polynomialRegressor, customRegressor objects.
------------------------------------
1. Linear regressors in variables y1, u1
       Variables: {'y1'  'u1'}
            Lags: {[1]  [2 5]}
     UseAbsolute: [0 0]
    TimeVariable: 't'

------------------------------------
2. Order 2 regressors in variables y1
               Order: 2
           Variables: {'y1'}
                Lags: {[1]}
         UseAbsolute: 0
    AllowVariableMix: 0
         AllowLagMix: 0
        TimeVariable: 't'

------------------------------------
3. Custom regressor: y1(t-2).*u1(t-3)
    VariablesToRegressorFcn: @(x,y)x.*y
                  Variables: {'y1'  'u1'}
                       Lags: {[2]  [3]}
                 Vectorized: 1
               TimeVariable: 't'

  Regressors described by this set

Оцените нелинейную модель ARX с R.

sys = nlarx(z1,R)
sys = 
Nonlinear ARX model with 1 output and 1 input
  Inputs: u1
  Outputs: y1

Regressors:
  1. Linear regressors in variables y1, u1
  2. Order 2 regressors in variables y1
  3. Custom regressor: y1(t-2).*u1(t-3)
  List of all regressors

Output function: Wavelet Network with 1 unit

Sample time: 0.1 seconds

Status:                                          
Estimated using NLARX on time domain data "z1".  
Fit to estimation data: 59.73% (prediction focus)
FPE: 3.356, MSE: 3.147

Просмотрите полный набор регрессоров.

getreg(sys)
ans = 5×1 cell
    {'y1(t-1)'         }
    {'u1(t-2)'         }
    {'u1(t-5)'         }
    {'y1(t-1)^2'       }
    {'y1(t-2).*u1(t-3)'}

Введенный в R2021a