Оценка нелинейных моделей ARX в командной строке

Нелинейные модели ARX можно оценить после выполнения следующих задач:

Оцените модель используя nlarx

Использовать nlarx для создания и оценки нелинейной модели ARX. После каждой оценки проверяйте модель, сравнивая ее с другими моделями и моделируя или прогнозируя реакцию модели.

Базовая оценка

Начните с самой простой оценки, используя m = nlarx(data,[na nb nk]). Для примера:

load iddata1;
% na = nb = 2 and nk = 1 
m = nlarx(z1,[2 2 1])
m = 
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 1 unit

Sample time: 0.1 seconds

Status:                                          
Estimated using NLARX on time domain data "z1".  
Fit to estimation data: 68.83% (prediction focus)
FPE: 1.975, MSE: 1.885

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

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

Второй входной параметр [na nb nk] задает порядки модели и задержки. По умолчанию выходной функцией является вейвлет wavenet, который принимает регрессоры как входы в свои линейные и нелинейные функции. m является idnlarx объект.

Для систем MIMO, nb, nf, и nk ny -by - nu матрицы. См. nlarx страница с описанием для получения дополнительной информации об оценке MIMO.

Создайте nlarxOptions Опцию установите и сконфигурируйте Focus свойство для минимизации ошибки симуляции.

opt = nlarxOptions('Focus','simulation');
M = nlarx(z1,[2 2 1],'sigmoid',opt);

Сконфигурируйте регрессоры модели

Линейные регрессоры

Линейные регрессоры представляют линейные функции, которые основаны на задержанных входных и выходных переменных и которые обеспечивают входы в выходную функцию модели. Когда вы используете порядки для задания модели, количество входа регрессоров равно na и количество выхода регрессоров равно nb. Синтаксис порядков ограничивает вас последовательными лагами. Можно также создать линейные регрессоры с помощью linearRegressor. Когда вы используете linearRegressor, можно задать произвольные лаги.

Полиномиальные регрессоры

Исследуйте включение полиномиальных регрессоров с помощью polynomialRegressor в дополнение к линейным регрессорам в нелинейной структуре модели ARX. Полиномиальные регрессоры являются полиномиальными функциями задержанных входов и выходов. (см. «Нелинейные порядки модели ARX и задержка»).

Для примера сгенерируйте полиномиальные регрессоры до порядка 2.

P = polynomialRegressor({'y1','u1'},{[1],[2]},2);

Добавьте полиномиальные регрессоры к линейным регрессорам в m.Regressors.

m.Regressors = [m.Regressors;P];
getreg(m)
ans = 8×1 cell
    {'y1(t-1)'  }
    {'y1(t-2)'  }
    {'u1(t-1)'  }
    {'u1(t-2)'  }
    {'y1(t-3)'  }
    {'y1(t-5)'  }
    {'y1(t-1)^2'}
    {'u1(t-2)^2'}

m теперь включает полиномиальные регрессоры.

Просмотрите размер m.Regressors массив.

size(m.Regressors)
ans = 1×2

     3     1

Массив теперь содержит три объекта регрессора.

Настраиваемые регрессоры

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

.Для примера создайте два пользовательских регрессора, которые реализуют 'sin(y1(t-1)' и 'y1(t-2).*u1(t-3)'.

C1 = customRegressor({'y1'},{1},@(x)sin(x));
C2 = customRegressor({'y1','u1'},{2,3},@(x,y)x.*y);
m.Regressors = [m.Regressors;C1;C2];
getreg(m) % displays all regressors
ans = 10×1 cell
    {'y1(t-1)'         }
    {'y1(t-2)'         }
    {'u1(t-1)'         }
    {'u1(t-2)'         }
    {'y1(t-3)'         }
    {'y1(t-5)'         }
    {'y1(t-1)^2'       }
    {'u1(t-2)^2'       }
    {'sin(y1(t-1))'    }
    {'y1(t-2).*u1(t-3)'}

Просмотрите свойства пользовательских регрессоров. Например, получите указатель на функцию первого пользовательского регрессора в массиве. Этот регрессор является четвертым регрессором, установленным в Regressors массив.

C1_fcn = m.Regressors(4).VariablesToRegressorFcn
C1_fcn = function_handle with value:
    @(x)sin(x)

Просмотрите описание регрессора.

display(m.Regressors(4))
Custom regressor: sin(y1(t-1))
    VariablesToRegressorFcn: @(x)sin(x)
                  Variables: {'y1'}
                       Lags: {[1]}
                 Vectorized: 1
               TimeVariable: 't'

  Regressors described by this set

Объедините регрессоры

Как только вы создали линейные, полиномиальные и пользовательские объекты регрессора, можно объединить их любым способом, которым вы хотите удовлетворить ваши потребности в оценке.

Задайте входные параметры регрессора для линейных и нелинейных компонентов

Регрессоры модели могут вводить в качестве входов один или оба линейных и нелинейных функциональных компонентов функций отображения, составляющих выходную функцию. Чтобы уменьшить сложность модели и сохранить оценку хорошо обусловленной, рассмотрите назначение уменьшенного набора регрессоров нелинейному компоненту. Линейному компоненту можно также назначить подмножество регрессоров. Таблица использования регрессора, которая управляет назначениями, обеспечивает полную гибкость. Каждому компоненту можно назначить любую комбинацию регрессоров. Для примера задайте нелинейную модель ARX, которая будет линейной в прошлых выходах и нелинейной в прошлых входах.

m = nlarx(z1,[2 2 1]); 
disp(m.RegressorUsage)
               y1:LinearFcn    y1:NonlinearFcn
               ____________    _______________

    y1(t-1)       true              true      
    y1(t-2)       true              true      
    u1(t-1)       true              true      
    u1(t-2)       true              true      
m.RegressorUsage{3:4,1} = false;
m.RegressorUsage{1:2,2} = false;
disp(m.RegressorUsage)
               y1:LinearFcn    y1:NonlinearFcn
               ____________    _______________

    y1(t-1)       true              false     
    y1(t-2)       true              false     
    u1(t-1)       false             true      
    u1(t-2)       false             true      

Сконфигурируйте выходную функцию

В следующей таблице представлены доступные объекты отображения для выходной функции модели.

Описание отображенияЗначение (объект сопоставления по умолчанию Строение)Объект отображения
Вейвлет
(по умолчанию)
'wavenet' или 'wave'wavenet
Один слой сигмоидная сеть'sigmoidnet' или 'sigm'sigmoidnet
Древовидный раздел'treepartition' или 'tree'treepartition
F линейна в x'linear' или [ ] или ''linear

Дополнительные доступные объекты отображения включают многослойные нейронные сети и пользовательские сети, которые вы создаете.

Задайте многослойную нейронную сеть, используя:

m = nlarx(data,[na nb nk],NNet)

где NNet - объект нейронной сети, созданный вами с помощью программного обеспечения Deep Learning Toolbox™. См. neuralnet страница с описанием.

Задайте пользовательскую сеть путем определения функции, вызываемой gaussunit.m, как описано в customnet страница с описанием. Определите пользовательский сетевой объект CNetw и оцените модель:

CNetw = customnet(@gaussunit);
m = nlarx(data,[na nb nk],CNetw)

Исключить линейную функцию в выходной функции

Если ваша выходная функция модели включает wavenet, sigmoidnet, или customnet отображая объекты, можно исключить линейную функцию с помощью LinearFcn.Use свойство объекта отображения. Объект отображения становится F (x) =g(Q(xr))+y0, где g (.) - нелинейная функция, и y 0 является смещением.

Примечание

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

Исключить нелинейную функцию в выходной функции

Сконфигурируйте нелинейную структуру ARX, чтобы включить только линейную функцию в объект отображения путем установки объекта отображения на linear. В этом случае, F(x)=LT(xr)+y0 является взвешенной суммой регрессоров модели плюс смещение. Такие модели обеспечивают мост между чисто линейными моделями ARX и полностью гибкими нелинейными моделями.

Популярное нелинейное строение ARX во многих приложениях использует полиномиальные регрессоры, чтобы смоделировать нелинейности системы. В таких случаях система рассматривается как линейная комбинация производных (отложенных) входных и выходных переменных. Используйте polynomialRegressor команда для легкой генерации комбинаций продуктов и степеней.

Например, предположите, что Вы знаете, что выход y (<reservedrangesplaceholder2>) системы линейная комбинация (y (t − 1))2, (u (t − 1))2 и y (t − 1) u (t − 1)). Чтобы смоделировать такую систему, используйте:

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

  Regressors described by this set
P.AllowVariableMix = true;
M = nlarx(z1,P,'linear');
getreg(M)
ans = 3×1 cell
    {'y1(t-1)^2'      }
    {'u1(t-1)^2'      }
    {'y1(t-1)*u1(t-1)'}

Для более сложных комбинаций полиномиальных задержек и регрессоров со смешанными переменными можно также использовать customRegressor.

Итерационное уточнение модели

Если ваша структура модели включает объекты отображения, которые поддерживают итерационный поиск (см., Задайте опции оценки для нелинейных моделей ARX), можно использовать nlarx для уточнения параметров модели:

m1 = nlarx(z1,[2 2 1],'sigmoidnet');
m2 = nlarx(z1,m1); % can repeatedly run this command

Можно также использовать pem для уточнения исходной модели:

m2 = pem(z1,m1);

Проверьте критерий завершения поиска m.Report.Termination.WhyStop . Если WhyStop указывает, что оценка достигла максимального количества итераций, попробуйте повторить оценку и, возможно, указать большее значение для nlarxOptions.SearchOptions.MaxIterations опция оценки:

opt = nlarxOptions;
opt.SearchOptions.MaxIterations = 30;
m2 = nlarx(z1,m1,opt); % runs 30 more iterations
                               % starting from m1

Когда m.Report.Termination.WhyStop значение Near (local) minimum, (norm( g) < tol или No improvement along the search direction with line search , проверьте свою модель, чтобы увидеть, соответствует ли эта модель данным. Если нет, решение может застрять в локальном минимуме поверхности функции затрат. Попробуйте настроить SearchOptions .Tolerance значение или SearchMethod опция в наборе опций nlarxOptions и повторите оценку.

Можно также попробовать возмущать параметры последней модели, используя init (называемая рандомизацией) и уточнение модели с помощью nlarx:

M1 = nlarx(z1, [2 2 1], 'sigmoidnet'); % original model
M1p = init(M1);	% randomly perturbs parameters about nominal values
M2 = nlarx(z1, M1p);  % estimates parameters of perturbed model

Прогресс итерационного поиска можно отобразить в Командном Окне MATLAB с помощью nlarxOptions.Display опция оценки:

opt = nlarxOptions('Display','on');
M2= nlarx(z1,M1p,opt);

Поиск и устранение проблем с оценкой

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

Нелинейная черно-коробочная система идентификации обычно требует больше данных, чем линейная идентификация модели, чтобы получить достаточную информацию о системе.

Используйте nlarx, чтобы оценить нелинейные модели ARX

В этом примере показано, как использовать nlarx для оценки нелинейной модели ARX для измеренных входных/выходных данных.

Подготовим данные к оценке.

load twotankdata
z = iddata(y, u, 0.2);
ze = z(1:1000); zv = z(1001:3000);

Оцените несколько моделей, используя различные порядки моделей, задержки и настройки нелинейности.

m1 = nlarx(ze,[2 2 1]);
m2 = nlarx(ze,[2 2 3]);
m3 = nlarx(ze,[2 2 3],wavenet(8));

Альтернативный способ выполнить оценку - сначала сконфигурировать структуру модели, а затем оценить эту модель.

m4 = idnlarx([2 2 3],sigmoidnet(14));
m4.RegressorUsage.("y1:NonlinearFcn")(3:4) = false;
m4 = nlarx(ze,m4);

Сравните получившиеся модели путем построения графиков выходов модели с измеренным выходом.

compare(zv, m1,m2,m3,m4)

См. также

Функции

Похожие темы