Если вы идентифицируете модель, можно симулировать ее в командной строке в приложении 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 или блок Hammerstein-Weiner, задавая 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
Команда и нелинейный блок Model ARXВоспроизведите командную строку sim
результаты для предполагаемой нелинейной системы в Simulink. Когда у вас есть предполагаемая системная модель, можно симулировать ее любой с командной строкой sim
команда или с Simulink. Эти два выходных параметров не соответствуют точно, если вы не основываете обе симуляции на тех же начальных условиях. Можно достигнуть этого соответствия путем оценки начальных условий в модели MATLAB и применения обоих в sim
команда и в вашей модели Simulink.
Поскольку вы непосредственно сравниваете sim
и результаты Simulink, также необходимо синхронизировать метки времени точек First Data путем установки первой метки времени в данных, Tstart
к 0
. Вы устанавливаете на этот раз, потому что по умолчанию симуляция командной строки присваивает шаг расчета первой метке времени, в то время как Simulink присваивает метку времени 0 секунд.
Загрузите данные об оценке, которые вы используете, чтобы идентифицировать нелинейную модель ARX. Создайте iddata
объект данных из данных. Задайте шаг расчета как 0,2 секунды и Tstart
как 0 секунд.
load twotankdata z = iddata(y,u,0.2,'Tstart',0);
Используйте первые 1 000 точек данных, чтобы оценить нелинейную модель 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 с помощью Нелинейного блока Model ARX, и задают те же начальные условия в блоке. Модель 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
команда и блок Nonlinear 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
и Нелинейный блок Model ARX.
Если бы вы хотите видеть то, на что сравнение было бы похоже, не используя те же начальные условия, можно повторно выполнить версию Simulink без набора начальных условий.
Аннулируйте вектор начального условия x0
, и симулируйте в течение 50 секунд как прежде. Эта пустая установка 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
Команда и нелинейный блок Model ARXВ этом примере вы сначала используете compare
команда, чтобы совпадать с симулированным выходом нелинейной модели ARX к результатам измерений. Вы затем воспроизводите симулированный выход с помощью Нелинейного блока Model ARX.
Загрузите данные об оценке, чтобы оценить нелинейную модель ARX. Создайте iddata
объект из данных. Задайте шаг расчета как 0,2 секунды и время начала данных как 0 секунд.
load twotankdata z = iddata(y,u,0.2,'Tstart',0);
Используйте первые 1 000 точек данных, чтобы оценить нелинейную модель ARX mw1
с порядками [5 1 3] и нелинейность сети вейвлета.
z1 = z(1:1000); mw1 = nlarx(z1,[5 1 3],wavenet);
Используйте compare
команда, чтобы совпадать с симулированным ответом mw1
к измеренным выходным данным в z1
.
data_compare = compare(mw1,z1);
compare
функционируйте использует первый nx
выборки данных ввода - вывода как прошлые данные, где nx
самая большая задержка регрессора модели. compare
использование эти прошлые данные, чтобы вычислить начальные состояния, и затем симулирует выход модели для остающегося nx+1:end
входные данные.
Чтобы воспроизвести этот результат в Simulink, вычислите значения начального состояния, используемые compare
, и задайте значения в Нелинейном блоке Model ARX. Сначала вычислите самую большую задержку регрессора модели. Используйте эту задержку, чтобы вычислить прошлые данные для начальной оценки условия.
nx = max(getDelayInfo(mw1)); past_data = z1(1:nx);
Используйте data2state
получить значения состояния с помощью прошлых данных.
x0 = data2state(mw1,z1(1:nx));
Теперь симулируйте выход mw1
в Simulink с помощью Нелинейного блока Model ARX, и задают 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
команда и блок Nonlinear ARX. Для этого постройте симулированные выходные параметры.
Сравнить выход compare
к выходу Нелинейного блока Model ARX отбросьте первый 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
и Нелинейный блок Model ARX.
Hammerstein-Wiener Model | Nonlinear ARX Model | Nonlinear Grey-Box Model | compare
| sim