Если вы идентифицируете модель, можно симулировать ее в командной строке, в приложении System Identification или в Simulink®. Если вы начнете с одного метода симуляции и перейдете ко второму методу, то можете обнаружить, что результаты точно не совпадают. Это несоответствие не означает, что одна из симуляций реализована неправильно. Каждый метод использует уникальный алгоритм симуляции и приводит к результатам с маленькими числовыми различиями.
Как правило, функции симуляции командной строки, такие как compare
и sim
, а также приложения System Identification, используйте аналогичные настройки по умолчанию и решатели. Simulink использует несколько другие настройки по умолчанию и другой решатель. Если вы хотите подтвердить свою реализацию Simulink по результатам симуляции в командной строке или приложении, необходимо убедиться, что настройки Simulink соответствуют настройкам симуляции в командной строке или приложении. В следующих абзацах перечислены эти настройки в порядке уменьшения значимости.
Наиболее значимым источником изменений при попытке воспроизвести результаты, как правило, являются начальные условия. Начальные условия, которые вы задаете для симуляции в блоках Simulink, должны совпадать с начальными условиями, используемыми compare
, sim
, или System Identification приложение. Можно определить начальные условия, возвращенные в более ранних симуляциях. Или, если вы симулируете относительно данных измерения, можно оценить новый набор начальных условий, которые лучше всего соответствуют этим данным. Затем примените эти условия к любым методам симуляции, которые вы используете. Для получения дополнительной информации об оценке начальных условий см. «Оценка начальных условий для симуляции идентифицированных моделей».
Как только вы определили начальные условия x0
для использования в модели m
и набор данных z
, реализуйте их в своем инструменте симуляции.
Для compare
или sim
, использование compareOptions
или simOptions
.
Для Simulink используйте Idmodel, Nonlinear ARX Model или Hammerstein-Wiener Model блок, задавая m
для модели и x0
для начальных состояний. С Idmodel структурами можно задать начальные состояния только для idss
и idgrey
модели. Если ваша линейная модель любого другого типа, преобразуйте ее сначала в idss
. См. Моделирование идентифицированных Моделей в Simulink или соответствующих блочных страницах с описанием.
Для приложения System Identification вы не можете задать другие начальные условия, кроме нуля. Можно задать только метод их вычисления.
В Simulink время запуска по умолчанию симуляции равняется нулю, в то время как в приложении или командной строке время запуска по умолчанию является шагом расчета данных.
Перед экспортом iddata
объект для симуляции в Simulink, установите объект Tstart
свойство в нуль. Затем экспортируйте объект в Simulink с помощью блока Iddata Source.
Программное обеспечение Simulink принимает интерполяцию задержки первого порядка на входных данных.
При использовании compare
, sim
или приложение, установите InterSample
свойство вашего iddata
объект к 'foh'
.
compare
команда и приложение моделируют модель в непрерывном времени, сначала дискретизируя модель используя c2d
и затем распространение разностных уравнений. По умолчанию Simulink выбирает решатель ОДУ с переменным шагом. Чтобы лучше соответствовать распространению разностного уравнения, установите решатель в Simulink на решатель с фиксированным шагом, такой как ode5
.
sim
Команда и нелинейные ARX Блока ModelВоспроизведение командной строки sim
результаты для предполагаемой нелинейной системы в Simulink. Когда у вас есть предполагаемая системная модель, вы можете симулировать ее или с помощью командной строки sim
команда или с Simulink. Эти два выхода не совпадают точно, если вы не основываете обе симуляции на одинаковых начальных условиях. Вы можете достичь этого соответствия, оценив начальные условия в вашей модели MATLAB и применив оба в sim
команда и в вашей модели Simulink.
Поскольку вы непосредственно сравниваете sim
и результаты Simulink, вы также должны синхронизировать временные метки первых точек данных путем установки первой метки времени в данных, Tstart
на 0
. Вы устанавливаете это время, потому что по умолчанию симуляция командной строки присваивает шагу расчета первую временную метку, в то время как Simulink присваивает временную метку 0 секунд.
Загрузите данные оценки, которые вы используете, чтобы идентифицировать нелинейную модель ARX. Создайте iddata
объект данных из данных. Задайте шаг расчета как 0,2 секунды, и Tstart
как 0 секунд.
load twotankdata z = iddata(y,u,0.2,'Tstart',0);
Используйте первые 1000 точек данных для оценки нелинейной модели ARX mw1
с порядками [5 1 3] и нелинейностью вейвлет.
z1 = z(1:1000); mw1 = nlarx(z1,[5 1 3],wavenet);
Чтобы инициализировать ваш симулированный отклик с измеренными данными, оцените вектор начального состояния x0
из данных оценки z1
использование findstates
функция. Третий аргумент для findstates
в этом примере Inf
, устанавливает горизонт предсказания на бесконечность в порядок, чтобы минимизировать ошибку симуляции.
x0 = findstates(mw1,z1,Inf);
Симулируйте модель mw1
выход с использованием x0
и первые 50 секунд (250 выборок) входных данных.
opt = simOptions('InitialCondition',x0);
data_sim = sim(mw1,z1(1:251),opt);
Теперь симулируйте выход mw1
в Simulink с использованием блока Nonlinear ARX Model и задайте те же начальные условия в блоке. Модель Simulink ex_idnlarx_block_match_sim
предварительно сконфигурирован, чтобы задать данные оценки, нелинейную модель ARX, начальные условия x0
, и время симуляции 50 секунд.
Откройте модель Simulink.
model = 'ex_idnlarx_block_match_sim';
open_system(model);
Симулируйте выход нелинейной модели ARX в течение 50 секунд.
sim(model);
Блок IDDATA Sink выводит моделируемый выход, data
, в рабочую область MATLAB ®.
Постройте и сравните моделируемые выходы, полученные с помощью sim
командный и нелинейный ARX блок.
figure plot(data_sim.SamplingInstants,data_sim.OutputData,'b*',... data.SamplingInstants,data.OutputData,'-r') xlabel('Time(sec)'); ylabel('Simulated output'); legend('Output of sim command','Output of Nonlinear ARX block','location','southeast') title('Estimated Initial Conditions for Simulink')
Моделируемые выходы те же самые, потому что вы задали одно и то же начальное условие при использовании sim
и блок Нелинейная модель ARX.
Если вы хотите увидеть, как будет выглядеть сравнение, не используя тех же начальных условий, можно перезапустить версию Simulink без набора начальных условий.
Обнулите вектор начальных условий x0
и моделируйте в течение 50 секунд, как и прежде. Это значение null для x0
эквивалентно начальным условиям Simulink по умолчанию.
x0 = [0;0;0;0;0;0;0;0]; sim(model);
Постройте график различия между командной строкой и методами Simulink для этого случая.
figure plot(data_sim.SamplingInstants,data_sim.OutputData,'b*',... data.SamplingInstants,data.OutputData,'-r') xlabel('Time(sec)'); ylabel('Simulated output'); legend('Output of sim command','Output of Nonlinear ARX block','location','southeast') title('Default Initial Conditions for Simulink')
Версия Simulink начинается с другой точки, чем sim
версия, но две версии в конечном счете сходятся. Чувствительность к начальным условиям важна для проверки воспроизводимости модели, но обычно является переходным эффектом.
compare
Команда и нелинейные ARX Блока ModelВ этом примере вы сначала используете compare
команда для соответствия моделируемого выхода нелинейной модели ARX измеренным данным. Затем вы воспроизводите моделируемый выход с помощью блока Nonlinear ARX Model.
Данные оценки нагрузки для оценки нелинейной модели ARX. Создайте iddata
объект из данных. Задайте шаг расчета как 0,2 секунды, а время начала данных как 0 секунд.
load twotankdata z = iddata(y,u,0.2,'Tstart',0);
Используйте первые 1000 точек данных для оценки нелинейной модели ARX mw1
с порядками [5 1 3] и нелинейностью вейвлет.
z1 = z(1:1000); mw1 = nlarx(z1,[5 1 3],wavenet);
Используйте compare
команда, совпадающая с симулированным откликом mw1
к измеренным выходным данным в z1
.
data_compare = compare(mw1,z1);
The compare
функция использует первую nx
выборки входно-выходных данных как прошлые данные, где nx
- самая большая задержка регрессора в модели. compare
использует эти прошлые данные для вычисления начальных состояний, а затем моделирует выходы модели для остальных nx+1:end
входные данные.
Чтобы воспроизвести этот результат в Simulink, вычислите начальные значения состояния, используемые compare
, и задайте значения в блоке Нелинейная модель ARX. Сначала вычислите наибольшую задержку регрессора в модели. Используйте эту задержку для вычисления прошлых данных для начальной оценки условия.
nx = max(getDelayInfo(mw1)); past_data = z1(1:nx);
Использование data2state
для получения значений состояний с помощью прошлых данных.
x0 = data2state(mw1,z1(1:nx));
Теперь симулируйте выход mw1
в Simulink с использованием блока Nonlinear ARX Model и задайте x0
как начальные условия в блоке. Используйте оставшиеся nx+1:end
данные для симуляции.
zz = z1(nx+1:end); zz.Tstart = 0;
Модель Simulink ex_idnlarx_block_match_compare
предварительно сконфигурирован, чтобы задать данные оценки, нелинейную модель ARX и начальные условия.
Откройте модель Simulink.
model = 'ex_idnlarx_block_match_compare';
open_system(model);
Симулируйте выход нелинейной модели ARX в течение 200 секунд.
sim(model);
Блок IDDATA Sink выводит моделируемый выход, data
, в рабочую область MATLAB ®.
Сравните моделируемые выходы, полученные с помощью compare
командный и нелинейный ARX блок. Для этого постройте график моделируемых выходов.
Сравнение выходов compare
на выход блока Nonlinear ARX Model, сбросьте первый nx
выборки data_compare
.
data_compare = data_compare(nx+1:end); data.Tstart=1; plot(data_compare,data,'r--') xlabel('Time(sec)'); legend('compare','Nonlinear ARX Model block')
Моделируемые выходы те же самые, потому что вы задали одно и то же начальное условие при использовании compare
и блок Нелинейная модель ARX.
compare
| Hammerstein-Wiener Model | Nonlinear ARX Model | Nonlinear Grey-Box Model | sim