Моделирование суррогата Используя гауссову основанную на процессе модель NLARX

В этом примере вы заменяете гидравлическую кавитационную модель цикла в Simulink® с суррогатной нелинейной моделью ARX (NLARX), чтобы упростить более быструю симуляцию.

В гидравлическом кавитационном цикле для этого примера жидкость в пользовательском гидроцилиндре двойного действия может cavitate и восстанавливаться. Во время повторяющегося цикла колеблющегося давления абсолютное давление не опускается ниже абсолютного нуля, когда модуль объемной упругости гомогенной жидко-газовой смеси уменьшается соответственно при низких давлениях. Вход к этой системе является скоростным источником, и наблюдаемый выходной сигнал является абсолютным давлением в полостях цилиндра.

Часто, такие физические модели являются в вычислительном отношении дорогими, чтобы симулировать. Можно уменьшать время симуляции, заменяя модель на более простую суррогатную модель. В этом примере вы создаете суррогатную модель для этой физической системы предполагаемая модель NLARX с Гауссовым процессом нелинейная выходная функция. Используя этот подход, можно вести динамику системы путем выбора, как регрессоры (задержанные формы данных ввода - вывода) взаимодействуют с нелинейной выходной функцией.

Получите данные ввода - вывода

Чтобы оценить модель, необходимо сначала получить данные ввода - вывода путем симуляции исходной модели.

Откройте модель и установите амплитуду скоростного входного сигнала.

modelName = 'HydraulicCavitationCycleFullModel';
velocityAmplitude = 0.05; %#ok<*NASGU> 
open_system(modelName)

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

Эта модель включает блок Iddata Sink, который сохраняет симулированные данные ввода - вывода к рабочей области MATLAB® как iddata объект.

Симулируйте модель.

sim(modelName);

Отобразите данные на графике из сохраненного iddata объект.

plot(cavitationCycleIOData)

Figure contains 2 axes objects. Axes object 1 with title y1 contains an object of type line. This object represents cavitationCycleIOData. Axes object 2 with title u1 contains an object of type line. This object represents cavitationCycleIOData.

Здесь, y1 является выходным сигналом, который является абсолютным давлением в полостях цилиндра. u1 входная скорость, применился к пользовательскому цилиндру.

Эта система чувствительна к изменениям во входном источнике. Необходимо принять эту чувствительность во внимание, когда вы обучаете, подтверждаете и используете модель NLARX.

Оценочная модель

Затем вы оцениваете модель NLARX с помощью этих данных ввода - вывода. Цель состоит в том, чтобы обоснованно реплицировать динамику кавитационного цикла.

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

Создайте Гауссов объект построения карты процессов с настройками по умолчанию.

gpObject = idGaussianProcess;

Создайте набор регрессора для модели NLARX.

vars = {'y1','u1'};
lags = {1:30,1:60};
regressors = linearRegressor(vars,lags);

Оцените модель NLARX с помощью Гауссовой выходной функции процесса и заданных линейных регрессоров.

trainedModel = nlarx(cavitationCycleIOData,regressors,gpObject)
trainedModel = 
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: Gaussian process function using a SquaredExponential kernel.
Sample time: 0.01 seconds

Status:                                                           
Estimated using NLARX on time domain data "cavitationCycleIOData".
Fit to estimation data: 99.96% (prediction focus)                 
FPE: 1.586e-08, MSE: 1.223e-08

Подтвердите модель

Чтобы проверять эффективность обученной модели, сначала получите данные о валидации из исходной модели Simulink. В данном примере увеличьте скоростную амплитуду на 4% и симулируйте модель.

velocityAmplitude = 1.04*0.05;
sim(modelName);

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

compare(cavitationCycleIOData,trainedModel)

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent cavitationCycleIOData (y1), trainedModel: 95.19%.

Модель, подходящая для данных о валидации, составляет более чем 95%, который указывает, что обученная модель обоснованно представляет динамику системы.

Чувствительность тестовой модели

Эффективность обученной модели чувствительна к амплитуде скоростного входа. Чтобы продемонстрировать эту чувствительность, симулируйте обученную систему с большей скоростной амплитудой.

velocityAmplitude = 1.1*0.05;
sim(modelName);

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

compare(cavitationCycleIOData,trainedModel)

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent cavitationCycleIOData (y1), trainedModel: 89.34%.

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

Учитывая чувствительность обученной модели, можно считать обучение другой суррогатной моделью для больших амплитудных условий работы при сохранении существующей настройки регрессора с достаточно хорошей подгонкой. Выполнение так демонстрирует гибкость этого подхода моделирования.

Замените суррогатной моделью

Чтобы заменить суррогатной системой в модель Simulink, используйте Нелинейный блок Model ARX. Как пример, откройте GPsurrogateModel Модель Simulink.

surrogateModelName = 'GPSurrogateModel';
open_system(surrogateModelName)

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

velocityAmplitude = 0.05;
gpSurrogateModelData = sim(surrogateModelName);

Симулируйте исходную модель с помощью той же скоростной амплитуды.

sim(modelName);

Постройте симуляцию выход и сравните его с выводом данных оценки.

plot(gpSurrogateModelData.tout,gpSurrogateModelData.simout, ...
    cavitationCycleIOData.SamplingInstants,cavitationCycleIOData.OutputData);
title('Surrogate Model Performance - Estimation Data')
xlabel('Time (s)')
ylabel('Absolute Pressure (atm)')
legend('Surrogate model','Original model')

Figure contains an axes object. The axes object with title Surrogate Model Performance - Estimation Data contains 2 objects of type line. These objects represent Surrogate model, Original model.

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

Функции

Блоки

Похожие темы