linearRegressor

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

Описание

Линейный регрессор является отстающим выходом или входной переменной, такой как y (t -1) или u (t -2). Здесь термин y имеет задержку 1 выборка и термин u имеет задержку 2 выборки. A linearRegressor объект инкапсулирует набор линейных регрессоров. Использование linearRegressor объекты при создании нелинейных моделей ARX с помощью idnlarx или nlarx. linearRegressor обобщает концепцию orders в моделях ARX, или другими словами, [na nb nk] матрица, для разрешения абсолютных значений и несмежных лагов. Использование linearRegressor объекты также позволяют вам объединить линейные регрессоры с полиномиальными и пользовательскими регрессорами в одном наборе регрессоров.

Создание

Описание

пример

lReg = linearRegressor(Variables,Lags) создает linearRegressor объект, который содержит выходные и входные имена в Variables и соответствующие лаги в Lags.

пример

lreg = linearRegressor(Variables,Lags,useAbsolute) задает в UseAbsolute использовать ли абсолютные значения переменных для создания регрессоров.

Свойства

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

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

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

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

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

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

  • Вход переменную u1: u1 (t -3)

Чтобы получить эти лаги, установите Lags на {[1 2],3}.

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

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

Пример: {1 1}

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

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

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

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

Пример: 'ClockTime'

Примеры

свернуть все

Задайте линейный регрессор, который эквивалентен матрице порядка ARX-модели [4 4 1].

Матрица порядка [4 4 1] указывает, что и входной, и выход наборы регрессоров содержат четыре регрессора с лагами в диапазоне от 1 до 4. Для примера, u1(t-2) представляет второй входной регрессор.

Задайте выходные и входные имена.

output_name = 'y1';
input_name = 'u1';
names = {output_name,input_name};

Задайте выходные и входные лаги.

output_lag = [1 2 3 4];
input_lag = [1 2 3 4];
lags = {output_lag,input_lag};

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

lreg = linearRegressor(names,lags)
lreg = 
Linear regressors in variables y1, u1
       Variables: {'y1'  'u1'}
            Lags: {[1 2 3 4]  [1 2 3 4]}
     UseAbsolute: [0 0]
    TimeVariable: 't'

  Regressors described by this set

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

load twotankdata
z = iddata(y,u,0.2);

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

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

Regressors:
  Linear regressors in variables y1, u1
  List of all regressors

Output function: Wavelet Network with 11 units

Sample time: 0.2 seconds

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

Просмотр регрессоров

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

Сравните выход модели с данными оценки.

compare(z,sys)

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

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

Задайте, что y1 регрессор использует абсолютное значение y1.

UseAbs = [true,false];

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

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

  Regressors described by this set

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