В этом примере вы заменяете гидравлическую кавитационную модель цикла в Simulink® с суррогатной нелинейной моделью ARX (NLARX), чтобы упростить более быструю симуляцию.
В гидравлическом кавитационном цикле для этого примера жидкость в пользовательском гидроцилиндре двойного действия может cavitate и восстанавливаться. Во время повторяющегося цикла колеблющегося давления абсолютное давление не опускается ниже абсолютного нуля, когда модуль объемной упругости гомогенной жидко-газовой смеси уменьшается соответственно при низких давлениях. Вход к этой системе является скоростным источником, и наблюдаемый выходной сигнал является абсолютным давлением в полостях цилиндра.
Часто, такие физические модели являются в вычислительном отношении дорогими, чтобы симулировать. Можно уменьшать время симуляции, заменяя модель на более простую суррогатную модель. В этом примере вы создаете суррогатную модель для этой физической системы предполагаемая модель NLARX с Гауссовым процессом нелинейная выходная функция. Используя этот подход, можно вести динамику системы путем выбора, как регрессоры (задержанные формы данных ввода - вывода) взаимодействуют с нелинейной выходной функцией.
Чтобы оценить модель, необходимо сначала получить данные ввода - вывода путем симуляции исходной модели.
Откройте модель и установите амплитуду скоростного входного сигнала.
modelName = 'HydraulicCavitationCycleFullModel'; velocityAmplitude = 0.05; %#ok<*NASGU> open_system(modelName)
Оценка модели требует входного сигнала, который достаточно богат, чтобы получить динамику этой нелинейной системы. Поэтому модель применяет скоростной сигнал последовательности импульсов к пользовательскому цилиндру.
Эта модель включает блок Iddata Sink, который сохраняет симулированные данные ввода - вывода к рабочей области MATLAB® как iddata
объект.
Симулируйте модель.
sim(modelName);
Отобразите данные на графике из сохраненного iddata
объект.
plot(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)
Модель, подходящая для данных о валидации, составляет более чем 95%, который указывает, что обученная модель обоснованно представляет динамику системы.
Эффективность обученной модели чувствительна к амплитуде скоростного входа. Чтобы продемонстрировать эту чувствительность, симулируйте обученную систему с большей скоростной амплитудой.
velocityAmplitude = 1.1*0.05; sim(modelName);
Сравните эффективность обученной модели к симуляции с помощью этих данных о тестировании.
compare(cavitationCycleIOData,trainedModel)
Для этих данных пригодное для обученной модели ниже 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')