Оцените нелинейные модели 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 создать регрессоры как произвольные функции переменных входа и выхода модели.

Пример.For, создайте два пользовательских регрессора та реализация '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      

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

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

Отображение описанияЗначение (значение по умолчанию, сопоставляющее конфигурацию объекта)Отображение объекта
Сеть Wavelet
(значение по умолчанию)
'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 (t) системы линейная комбинация (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)

Смотрите также

Функции

Похожие темы