exponenta event banner

polynomialRegressor

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

Описание

Полиномиальные регрессоры - это полиномы, которые состоят из запаздывающих входных и выходных переменных. Например, y (t-1) 2 и y (t-1) u (t-1) оба являются полиномиальными регрессорами с порядками 2 и переменными задержками одной выборки. ApolynomialRegressor объект инкапсулирует набор полиномиальных регрессоров. Использовать polynomialRegressor объекты при создании нелинейных моделей ARX с использованием idnlarx или nlarx. Можно указать polynomialRegressor объекты вместе с linearRegressor и customRegressor объекты и объединяют их в единый комбинированный набор регрессоров.

Создание

Описание

пример

pReg = polynomialRegressor(Variables,Lags) создает polynomialRegressor объект порядка 2, содержащий выходные и входные имена в переменных и соответствующие задержки в лагах. Например, если Variables содержит 'y' и lags содержит соответствующий вектор запаздывания [2 4], то регрессоры, которые используют 'y' y (t-2) 2 и y (t-4) 2.

пример

pReg = polynomialRegressor(Variables,Lags,Order) создает polynomialRegressor объект заказа Order .

пример

pReg = polynomialRegressor(Variables,Lags,Order,UseAbsolute) указывает в UseAbsolute следует ли использовать абсолютные значения переменных для создания регрессоров.

пример

pReg = polynomialRegressor(Variables,Lags,Order,UseAbsolute,AllowVariableMix) указывает в AllowVariableMix разрешить ли несколько переменных в формулах-регрессорах. Например, если Variables равно {'y','u'}, Lags равно {1,1}, и Order равно 2, то значение true для AllowVariableMix приводит к включению комбинированного регрессора y (t-1) u (t-1) вместе с однопараметрическими регрессорами y (t-1) 2 и u (t-1) 2.

пример

pReg = polynomialRegressor(Variables,Lags,Order,UseAbsolute,AllowVariableMix,AllowLagMix) указывает в AllowLagMix разрешить ли различные задержки в формулах-регрессорах. Например, если Variables равно {'y','u'}, Lags равно {2,[0 3]}, Order равно 2, и AllowVariableMix равно false, то значение true для AllowLagMix приводит к включению регрессора смешанного запаздывания u (t) u (t-3) вместе с регрессорами уникального запаздывания y (t-2) 2, u (t) 2 и u (t-3) 2. Обратите внимание, что при установкеAllowVariableMix кому true, тогда набор регрессоров будет также включать в себя y (t-2) u (t) и y (t-2) u (t-3).

Свойства

развернуть все

Имена выходных и входных переменных, заданные как массив ячеек из строк или массив ячеек, ссылающийся на OutputName и InputName свойства iddata объект. Каждая запись должна быть строкой без специальных символов, кроме пробела. Пример использования этого свойства см. в разделе Оценка нелинейной модели ARX с полиномиальными регрессорами.

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

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

Запаздывает в каждой переменной, определяемой как массив ячеек 1 на nv неотрицательных целочисленных векторов строк, где nv - общее число переменных-регрессоров. Каждый вектор строки содержит целые числа nr, которые определяют задержки nr-регрессора для соответствующей переменной. Например, предположим, что необходимы следующие регрессоры:

  • Выходная переменная y1: y1 (t-1) 2 и y1 (t-2) 2

  • Входная переменная u1: u1 (t-3) 2

Чтобы получить эти задержки, установите Lags кому {[1 2],3}.

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

Пример использования этого свойства см. в разделе Оценка нелинейной модели ARX с полиномиальными регрессорами.

Пример: {1 1}

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

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

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

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

Индикатор смешанных переменных, который определяет, следует ли использовать несколько переменных в формулах-регрессорах, таких как y (t-1) u (t-1), указанный как логический вектор с длиной, равной числу переменных.

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

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

Индикатор смешанного запаздывания, определяющий, следует ли использовать различные запаздывания в формулах-регрессорах, таких как u (t) u (t-3), заданный как логический вектор с длиной, равной числу переменных.

Установка этого свойства для существующей нелинейной модели ARX sysиспользуйте точечную нотацию, как показано в следующей команде.

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

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

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

Пример: 'ClockTime'

Примеры

свернуть все

Загрузка данных и создание iddata объект z с временем выборки 0,1 секунды.

load twotankdata y u
z = iddata(y,u,'Ts',0.1);

Задайте полиномиальные регрессоры, имеющие формы u (t-2) 2, u (t-4) 2 и y (t-1) 2.

Использовать свойства z для указания имен переменных.

Variables = [z.OutputName;z.InputName];

Укажите задержки.

Lags = {1,[2 4]};

Создайте регрессор. Порядок по умолчанию: 2.

pReg = polynomialRegressor(Variables,Lags)
pReg = 
Order 2 regressors in variables y1, u1
               Order: 2
           Variables: {'y1'  'u1'}
                Lags: {[1]  [2 4]}
         UseAbsolute: [0 0]
    AllowVariableMix: 0
         AllowLagMix: 0
        TimeVariable: 't'

  Regressors described by this set

Использовать pReg для оценки нелинейной модели ARX.

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

Regressors:
  Order 2 regressors in variables y1, u1
  List of all regressors

Output function: Wavelet Network with 66 units

Sample time: 0.1 seconds

Status:                                          
Estimated using NLARX on time domain data "z".   
Fit to estimation data: 95.97% (prediction focus)
FPE: 5.843e-05, MSE: 5.569e-05

Просмотрите регрессоры.

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

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

Variables = 'u1';
Lags = 2;
Order = 3;
pReg = polynomialRegressor(Variables,Lags,Order)
pReg = 
Order 3 regressors in variables u1
               Order: 3
           Variables: {'u1'}
                Lags: {[2]}
         UseAbsolute: 0
    AllowVariableMix: 0
         AllowLagMix: 0
        TimeVariable: 't'

  Regressors described by this set

Создание набора полиномиальных регрессоров второго порядка, использующего в переменной задержки 3, 10 и 100 y1 и задержки 0 и 4 в переменной u1.

vars = {'y1','u1'};
lags = {[3 10 100],[0,4]};

Укажите, что y1 регрессор использует абсолютное значение y1.

UseAbs = [true,false];

Создайте полиномиальный регрессор.

reg = polynomialRegressor(vars,lags,2,UseAbs)
reg = 
Order 2 regressors in variables y1, u1
               Order: 2
           Variables: {'y1'  'u1'}
                Lags: {[3 10 100]  [0 4]}
         UseAbsolute: [1 0]
    AllowVariableMix: 0
         AllowLagMix: 0
        TimeVariable: 't'

  Regressors described by this set

Создайте набор полиномиальных регрессоров, который включает в себя члены y1 (t-1) 2, u1 (t-1) 2 и y1 (t-1) u1 (t-1).

Укажите переменные и задержки.

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

Укажите, что должны быть созданы регрессоры со смешанными переменными.

mixvar = true;

Создание полиномиального регрессора второго порядка с помощью mixvar. Установите четвертую позицию, представляющую UseAbsolute свойство, для false.

reg = polynomialRegressor(vars,lags,2,false,mixvar)
reg = 
Order 2 regressors in variables y1, u1
               Order: 2
           Variables: {'y1'  'u1'}
                Lags: {[1]  [1]}
         UseAbsolute: [0 0]
    AllowVariableMix: 1
         AllowLagMix: 0
        TimeVariable: 't'

  Regressors described by this set

В качестве альтернативы можно сначала создать спецификацию регрессора, используя переменные и задержки, и установить AllowVariableMix свойство после этого с использованием точечной нотации.

reg1 = polynomialRegressor(vars,lags);
reg1.AllowVariablemix = true
reg1 = 
Order 2 regressors in variables y1, u1
               Order: 2
           Variables: {'y1'  'u1'}
                Lags: {[1]  [1]}
         UseAbsolute: [0 0]
    AllowVariableMix: 1
         AllowLagMix: 0
        TimeVariable: 't'

  Regressors described by this set

Использовать reg1 в нелинейной модели ARX.

load twotankdata y u;
z = iddata(y,u,'Ts',0.1);
sys = nlarx(z,reg1);

Просмотрите регрессоры.

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

Регрессоры включают смешанно-переменные термины.

Укажите набор полиномиальных регрессоров, который включает член вида u (t) u (t-3).

Укажите имена переменных и задержки.

vars = {'y1','u1'};
lags = {2,[0 3]};

Инициализируйте полиномиальный регрессор второго порядка.

reg = polynomialRegressor(vars,lags);

Укажите, что регрессор использует смешанные задержки.

reg.AllowLagMix = true;

Используйте набор регрессоров в нелинейной модели ARX.

load twotankdata y u;
z = iddata(y,u,'Ts',0.1);
sys = nlarx(z,reg);

Просмотрите регрессоры.

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

Регрессоры включают термин смешанного запаздывания.

Загрузка данных и создание iddata объект z.

load twotankdata y u
z = iddata(y,u,'Ts',0.1);

Задайте полиномиальные регрессоры, имеющие формы u (t-2) 2 и u (t-4) 2. Также укажите линейный регрессор формы y (t-1).

Укажите задержку ввода.

uLags = {[2 4]};

Задайте полиномиальные регрессоры. Порядок регрессора по умолчанию: 2.

pReg = polynomialRegressor(z.InputName,uLags);

Укажите отставание на выходе и линейный регрессор.

lLags = 1;
lReg = linearRegressor(z.OutputName,lLags);

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

reg = [pReg;lReg]
reg=2×1 object
[2 1] array of polynomialRegressor, linearRegressor objects.
------------------------------------
1. Order 2 regressors in variables u1
               Order: 2
           Variables: {'u1'}
                Lags: {[2 4]}
         UseAbsolute: 0
    AllowVariableMix: 0
         AllowLagMix: 0
        TimeVariable: 't'

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

  Regressors described by this set

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

Regressors:
  1. Linear regressors in variables y1
  2. Order 2 regressors in variables u1
  List of all regressors

Output function: Wavelet Network with 21 units

Sample time: 0.1 seconds

Status:                                          
Estimated using NLARX on time domain data "z".   
Fit to estimation data: 96.56% (prediction focus)
FPE: 4.133e-05, MSE: 4.059e-05

Просмотрите регрессоры.

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

Загрузка оценочных данных 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