Если вы идентифицируете модель, можно моделировать ее в командной строке в приложении System Identification, или в Simulink®. Если при запуске с одного метода симуляции и мигрируете на второй метод, можно найти, что результаты точно не соответствуют. Это несоответствие не означает, что одна из симуляций реализована неправильно. Каждый метод использует уникальный алгоритм симуляции и приводит к результатам с небольшими числовыми различиями.
Обычно функции симуляции командной строки, такие как compare
и sim
, а также приложение System Identification, используют подобные настройки по умолчанию и решатели. Simulink использует несколько различные настройки по умолчанию и другой решатель. Если вы хотите подтвердить свою реализацию Simulink против командной строки или результатов симуляции приложения, необходимо гарантировать, что настройки Simulink сопоставимы с командной строкой или настройками симуляции приложения. Следующие параграфы перечисляют эти настройки в порядке уменьшающегося значения.
Старший значащий источник изменения при попытке воспроизвести результаты обычно является начальными условиями. Начальные условия, которые вы задаете для симуляции в блоках Simulink, должны совпадать с начальными условиями, используемыми compare
, sim
или приложением System Identification. Можно определить начальные условия, возвращенные в более ранних симуляциях. Или, если вы моделируете против данных об измерении, можно оценить новый набор начальных условий, которые лучше всего совпадают с теми данными. Затем примените те условия к любым методам симуляции, которые вы используете. Для получения дополнительной информации об оценке начальных условий смотрите Оценочные Начальные условия для Симуляции Идентифицированных Моделей.
Если вы определили начальные условия x0
, чтобы использовать для модели m
и набора данных z
, реализуйте их в своем инструменте симуляции.
Для compare
или sim
, используйте compareOptions
или simOptions
.
Для Simulink используйте Idmodel, Нелинейный ARX или блок Хаммерстайна-Вайнера, задавая m
для модели и x0
для начальных состояний. Со структурами Idmodel можно задать начальные состояния только для моделей idss
и idgrey
. Если ваша линейная модель имеет какой-либо другой тип, преобразуйте его сначала в idss
. Смотрите Моделируют Идентифицированную Модель в Simulink или соответствующих страницах с описанием блока.
Для приложения System Identification вы не можете задать начальные условия кроме нуля. Можно задать только метод вычисления их.
В Simulink время начала значения по умолчанию симуляции является нулем, в то время как в приложении или командной строке время начала по умолчанию является шагом расчета данных.
Прежде, чем экспортировать объект iddata
для симуляции в Simulink, обнуленном свойство объекта Tstart
. Затем экспортируйте объект в Simulink с помощью Исходного блока Iddata.
Программное обеспечение 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 = fullfile(matlabroot,'examples','ident','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 = fullfile(matlabroot,'examples','ident','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.
Модель Хаммерстайна-Винера | Нелинейная модель ARX | Нелинейная модель Серого Поля | compare
| sim