polynomialRegressor

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

Описание

Полиномиальные регрессоры являются полиномами, которые состоят из задержанных входных и выходных переменных. Для примера y (t -1)2 и y (t-1) u (t-1) являются полиномиальными регрессорами с порядками 2 и переменными задержками одной выборки. A polynomialRegressor объект инкапсулирует набор полиномиальных регрессоров. Использование 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 (<reservedrangesplaceholder0>)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-by n v из неотрицательных целочисленных векторов-строк, где n v - общее количество переменных регрессора. Каждый вектор-строка содержит n r целых чисел, которые задают n r задержек регрессора для соответствующей переменной. Например, предположим, что вам нужны следующие регрессоры:

  • Выход переменную 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