customRegressor

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

Описание

Пользовательский регрессор представляет обеспеченную отдельными пользователями формулу, которая работает с задержанными переменными ввода и вывода. Например, y (t –1) eu (t –1) является пользовательским регрессором, что можно создать использование формулы @(x,y)x.*exp(y). 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 nv массивом ячеек неотрицательных целочисленных векторов-строк, где n v является общим количеством переменных регрессора. Каждый вектор-строка содержит n r целые числа, которые задают n r задержки регрессора для соответствующей переменной. Когда n r> 1 для по крайней мере одной из переменных, затем программное обеспечение генерирует регрессор для каждой комбинации задержки. Например, предположите, что вы хотите создать формулу r (t) = sin (y 1 (ta)) cos (u 1 (tb)), где задержкой 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]}

Индикатор Vectorization, который определяет ли 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