Когда вы симулируете динамическую систему, которая не начинает с отдыха, необходимо инициализировать ту симуляцию, чтобы совпадать со стартовыми условиями. Например, можно сравнивать симулированный ответ на результаты измерений, или на предыдущую симуляцию или расчет. Вы можете хотеть запустить свою симуляцию при установившемся условии или продолжить симуляцию от предыдущей симуляции.
System Identification Toolbox™ обеспечивает несколько методов для определения начальных условий (ICS), чтобы использовать. Эти методы включают использование:
Идентификационные результаты модели
Текущие или прошлые измерения данных о вводе/выводе
Информация состояния от предыдущих симуляций
Следующая таблица обобщает, какие подходы доступны и когда использовать их. Для краткости эта таблица использует термин "симуляция" широко, чтобы означать "симулировать или предсказывать". Для получения дополнительной информации смотрите, Симулируют и Предсказывают Идентифицированный Выход Модели.
Подходы для оценки начальных условий
Когда использовать | Подход | Сводные данные метода |
---|---|---|
Вы симулируете idss или idgrey ответ модели с помощью тех же входных данных, с которыми вы идентифицировали свою модель. | Извлеките ICS из идентификационных результатов модели (возвращенные значения, или отчет оценки) — смотрите Оценочные Начальные условия от Результатов измерений. Используйте в idss и idgrey модели только. | [sys,x0est] = ssest(z,__) [sys,x0est] = n4sid(z,__) [sys,x0est] = greyest(z,__) x0est = sys.Report.Parameters.X0 пример: Разрешите Подходящие Различия в Значении Между Идентификацией Модели и сравните Команду |
Вы хотите воспроизвести результаты, сгенерированные compare (или эквивалентно Model Output строят в приложении). | Используйте возвращенный ICS от compare — Смотрите оценочные начальные условия от результатов измерений. | [y,x0,fit] = compare(sys,z) пример: Соответствуйте Выход сравнивают Команду и Нелинейный блок Model ARX |
Вы - ответ имитационной модели на данный входной сигнал и хотите запустить симуляцию в точке, которая приводит к самому близкому соответствию к данному выходному сигналу. | findstates
Если исходной моделью является idtf , idproc , или idpoly , сначала преобразуйте в форму пространства состояний с помощью idss . Смотрите оценочные начальные условия для симуляции линейных моделей.Для получения дополнительной информации смотрите Оценочные Начальные условия от Результатов измерений. | sys_ss = idss(sys)
x0 = findstates(sys_ss,z) пример: Оцените Начальные условия для Линейной Модели Используя Результаты измерений |
Вы продолжаете симуляцию, такой что касается онлайновой обработки. Вы используете набор данных разделения, такой что касается nlarx модель, когда findstates является слишком в вычислительном отношении дорогим. | data2state
Если исходной моделью является idtf , idproc , или idpoly , преобразуйте в форму пространства состояний сначала использование idss . Можно также использовать data2state неявно путем определения прошлых данных как прокси для начальных условий при использовании sim или predict с любой динамической моделью.Для получения дополнительной информации смотрите Оценочные Начальные условия от Результатов измерений. | sys_ss = idss(sys) x0 = data2state(sys,z_p) или IO = struct или opt = predictOptions ('InitialCondition',IO) . примеры: Оцените Начальные условия для Нелинейной Модели ARX, Изучите использование исторических данных для симуляции модели |
Вы работаете с продолжающейся симуляцией и хотите основывать начальные условия для текущего сегмента симуляции на предыдущем сегменте. Вы намереваетесь запустить свою основную симуляцию в устойчивом состоянии, и вы хотите иметь приквел, который симулирует подготовительный период к устойчивому состоянию от отдыха. | Используйте информацию состояния от предыдущей симуляции или предварительной симуляции. Если исходной моделью является idtf , idproc , или idpoly , преобразуйте в форму пространства состояний сначала использование idss . Для получения дополнительной информации смотрите Начальные условия Использования от Прошлой информации состояния. | sys_ss = idss(sys) x0 = x(end) от [y,y_sd,x] = sim(sys_ss,z_p) пример: Продолжите Симуляцию Идентифицированной Модели с помощью Прошлых состояний |
Предыдущая таблица вызывает различные методы для оценки начального условия. Следующие разделы обобщают эти методы источником данных оценки.
Оцените начальные условия из данных об измерении, от которых вы получаете свои входные параметры симуляции. Методы включают:
Извлеките начальные условия из результатов идентификации модели, такой как из идентификационного отчета для вашей модели или как возвращенные значения от compare
. Для примеров смотрите Различия в Значении Подгонки Твердости Между Идентификацией Модели и сравните Команду и Соответствие, Выход сравнивает Команду и Нелинейный блок Model ARX.
Оцените начальные условия с помощью измеренных данных о вводе/выводе, с помощью функционального findstates
оценить начальные состояния, сопоставимые с набором данных. Для примера смотрите Оценочные Начальные условия для Линейной Модели Используя Результаты измерений.
Оцените, что начальные условия из данных об измерении, сразу предшествующих вашей симуляции, запускаются. Методы включают:
Используя функциональный data2state
оценить то конечное состояние набора данных. Прошлое конечное состояние затем становится начальным состоянием для последующей симуляции. Для примера смотрите Оценочные Начальные условия для Нелинейной Модели ARX.
Используя ваши прошлые данные как прокси для начальных условий при использовании sim
или predict
. Когда вы запускаете свою симуляцию, модель внутренне вызывает data2state
для вас. Для примера смотрите, Изучают Использование Исторических данных для Симуляции модели.
При разделении набора данных вы используете в две части. Сделайте первую часть только достаточно большой, чтобы позволить data2state
вычислить точное конечное состояние. Этот подход данных разделения может быть намного менее в вычислительном отношении интенсивным, чем использование findstates
на полном наборе данных, специально для нелинейных моделей ARX. Для примера смотрите Оценочные Начальные условия для Нелинейной Модели ARX.
Используйте информацию состояния от предыдущих симуляций или предварительных симуляций. Если никакая предыдущая симуляция не доступна, можно предварительно симулировать от отдыха, или известное начальное условие на грани симуляции запускаются. Конечное состояние прошлого или предварительной симуляции является начальными состояниями для симуляции, которую вы хотите выполнить. Для примера смотрите, Продолжают Симуляцию Идентифицированной Модели с помощью Прошлых состояний.
findstates
и data2state
функции являются наиболее общими средствами для определения начальных состояний или конечного состояния от любых измерений данных о вводе/выводе. Однако использование их требует, чтобы вы использовали структуру модели, которая включает явное представление состояния. Линейные модели кроме idss
и idgrey
не используйте явные состояния. Чтобы найти эквивалентные начальные состояния, можно преобразовать эти модели в idss
модели и находят начальные состояния от idss
версии.
После того, как вы оценили начальные условия, можно включить их в синтаксис симуляции командной строки, модель Simulink® или приложение System Identification.
Следующие примеры иллюстрируют оценку начального условия для линейных моделей. Первый пример использует findstates
. Вторые и третьи примеры используют исторические данные. Таким образом, примеры определяют начальные условия из данных, сразу предшествующих времени начала симуляции.
Идентифицируйте idtf
модель с помощью результатов измерений. Преобразуйте его в форму пространства состояний, чтобы оценить начальные условия, сопоставимые с этим результаты измерений. Затем выполните ту же оценку начального условия неявно на исходном idtf
модель с помощью compare
видеть, получаете ли вы те же результаты.
Оцените передаточную функцию для результатов измерений.
load iddata1 z1; sys = tfest(z1,3);
sys
идентифицированная передаточная функция непрерывного времени (idtf
) модель.
Можно использовать findstates
найти начальные условия для линейных моделей, но только если они находятся в idss
или idgrey
форма.
Преобразуйте sys
к форме пространства состояний.
sys_ss = idss(sys);
Используйте findstates
оценить начальные состояния.
X0 = findstates(sys_ss,z1)
X0 = 3×1
-1.7569
2.6195
-6.5177
Теперь используйте compare
оценить начальные состояния, с помощью исходной модели передаточной функции.
[y_tf,fit,X0c] = compare(z1,sys); X0c
X0c = 3×1
-1.7569
2.6195
-6.5177
Ответы идентичны. Этот результат состоит в том потому что compare
внутренне вызывает idss
и findstates
точно таким же образом, когда вы сделали в первой части примера.
Используйте исторические данные ввода - вывода в качестве прокси для начальных условий при симуляции модели. Вы сначала симулируете использование sim
команда и задает исторические данные с помощью simOptions
опция установлена. Вы затем воспроизводите симулированный выход путем ручного отображения исторических данных с начальными состояниями.
Загрузите 2D вход, набор данных с одним выходом.
load iddata7 z7
Идентифицируйте модель в пространстве состояний пятого порядка с помощью данных.
sys = n4sid(z7,5);
Разделите набор данных в две части.
zA = z7(1:15); zB = z7(16:end);
Симулируйте модель с помощью входного сигнала в zB
.
uSim = zB;
Симуляция требует начальных условий. Значения сигналов в zA
исторические данные, то есть, они - значения ввода и вывода в течение времени, сразу предшествующего данным в zB
. Используйте zA
как прокси для необходимых начальных условий.
IO = struct('Input',zA.InputData,'Output',zA.OutputData); opt = simOptions('InitialCondition',IO);
Симулируйте модель.
ysim = sim(sys,uSim,opt);
Теперь воспроизведите выход путем ручного отображения исторических данных с начальными состояниями sys
. Для этого используйте data2state
команда.
xf = data2state(sys,zA);
xf
содержит значения состояния sys
в то время момент сразу после новой выборки данных в zA
.
Симулируйте систему с помощью xf
как начальные состояния.
opt2 = simOptions('InitialCondition',xf);
ysim2 = sim(sys,uSim,opt2);
Постройте выход sim
команда ysim
и вручную вычисленные результаты ysim
2.
plot(ysim,'b',ysim2,'--r')
ysim2
совпадает с ysim
.
Оцените начальные условия для сегмента симуляции идентифицированной модели при помощи конечного состояния предыдущего сегмента симуляции.
Загрузите данные z1, который является iddata
объект, содержащий входные и выходные данные. Оцените пятый порядок линейная модель из данных.
load iddata1 z1 plot(z1)
sys = n4sid(z1,5);
Разделите данные на два сегмента. Один сегмент z1past
представляет данные для прошлой симуляции и запускается в покое. Второй сегмент z1next
представляет данные для последующей симуляции.
z1past = z1(1:150); z1next = z1(150:300);
Симулируйте ответ на входные данные в z1next
не задавая начальные условия.
ynext_no_ic = sim(z1next,sys);
plot(ynext_no_ic,z1next)
legend
title('Simulation Continuation Without Setting ICs')
Теперь определите конечное состояние, x0
, для ответа на z1past
входной параметр.
[ypast,y_sd,xpast] = sim(z1past,sys); x0 = xpast(end,:)';
Используйте конечное состояние, чтобы задать начальные состояния для последующего ответа на z1next
.
opt = simOptions('InitialCondition',x0); ynext_ic = sim(z1next,sys,opt); figure plot(ynext_ic,z1next) legend title('Simulation Continuation with Sychronized ICs')
Когда вы симулируете Хаммерстайна-Винера или нелинейную модель серого ящика и хотите использовать начальные условия, сопоставимые с набором данных измерения z
, используйте findstates
.
Сравните симулированный выход блока Model Хаммерстайна-Винера к измеренному выходу системы. Вы улучшаете соглашение между измеренными и симулированными ответами путем оценки значений начального состояния.
Загрузите выборочные данные.
load twotankdata
Создайте iddata
объект от выборочных данных. Установите 'Tstart'
к 0 так, чтобы время начала данных совпадало со временем начала Simulink 0f 0 с.
z1 = iddata(y,u,0.2,'Tstart',0,'Name','Two tank system');
Оцените модель Хаммерстайна-Винера использование данных.
mw1 = nlhw(z1,[1 5 3],pwlinear,pwlinear);
Можно теперь симулировать выход предполагаемой модели в Simulink с помощью входных данных в z1
. Для этого откройте предварительно сконфигурированную модель Simulink.
model = 'ex_idnlhw_block';
open_system(model);
Модель использует Источник Iddata, Модель Хаммерстайна-Винера и блоки Осциллографа. Следующие параметры блоков были предварительно сконфигурированы, чтобы задать данные об оценке, оцененную модель и начальные условия:
Параметры блоков Исходного блока Iddata:
Объект IDDATA - z1
Параметры блоков блока Model Хаммерстайна-Винера:
Модель - mw1
Начальные условия - Zero
(значение по умолчанию)
Запустите симуляцию.
Просмотрите различие между измеренным выходом и выходом модели при помощи блока Scope.
simOut = sim(model);
open_system([model '/Scope'])
Чтобы улучшить соглашение между измеренными и симулированными ответами, оцените вектор начального состояния для модели из данных об оценке z1
, использование findstates
. Задайте максимальное количество итераций для оценки как 100. Задайте горизонт прогноза как Inf
, так, чтобы алгоритм вычислил начальные состояния, которые минимизируют ошибку симуляции.
opt = findstatesOptions; opt.SearchOptions.MaxIterations = 100; x0 = findstates(mw1,z1,Inf,opt);
Установите значение параметров блоков Начальных условий блока Model Хаммерстайна-Винера к State Values
. Начальными состояниями по умолчанию является x0
.
set_param([model '/Hammerstein-Wiener Model'],'IC','State values');
Запустите симуляцию снова и просмотрите различие между измеренным выходом и выходом модели в блоке Scope. Различие между измеренными и симулированными ответами теперь уменьшается.
simOut = sim(model);
Когда вы симулируете нелинейную модель ARX и хотите использовать начальные условия, сопоставимые с набором данных измерения z
, у вас есть выбор для который подход взять.
Можно использовать findstates
. Для нелинейных моделей ARX однако, этот подход имеет стоимость того, чтобы быть в вычислительном отношении дорогим, если набор данных является большим.
X0 = findstates(m,z,Inf);
Можно повредить набор данных в два фрагмента. Используйте первый nx
выборки данных о вводе/выводе как прошлые данные, где nx
самая большая задержка регрессора модели. Затем используйте data2state
вычислить конечное состояние "прошлых данных". Вы затем можете симулировать модель для остающегося nx+1:end
входные данные с любым подходом симуляции вы выбираете. Оба compare
и приложение System Identification использует этот подход автоматически в нелинейных моделях ARX.
nx = max(getDelayInfo(m)); % Find the largest regressor delay
past_data = z1(1:nx);
X0 = data2state(mw1,z1(1:nx));
Следующий пример иллюстрирует использование метода данных разделения для нелинейной модели ARX.
Используйте два различных метода, чтобы оценить начальные условия для нелинейной модели ARX. Симулируйте каждого вместе с данными об измерении и сравните с симуляцией, которая инициализирует в покое.
Загрузите данные о вводе/выводе z
и постройте его. Используйте первые 1 000 точек z
оценить нелинейную модель ARX.
load twotankdata z = iddata(y,u,0.2); z1 = z(1:1000); plot(z1) title('Estimation data')
mdlnlarx = nlarx(z1,[5 1 3],wavenet);
Извлеките первые 250 точек z1 (50 секунд) как z1sim
для симуляций сравнения. Симулируйте mdlarx
не устанавливая начальные условия и график ответ вместе с измеренным выходом в z1sim
.
z1sim = z1(1:250); data_no_ic = sim(mdlnlarx,z1sim); plot(data_no_ic,z1sim) title('Nonlinear ARX Model with No Initial Condition Setting') grid on legend('location','se')
Используйте findstates
оценить начальные условия. Для того, чтобы минимизировать ошибку симуляции, задайте Inf
для горизонта прогноза. Затем установите sim
опция для InitialCondition
к findstates
результаты. Постройте ответ вместе с измеренным выходом.
x0fs = findstates(mdlnlarx,z1sim,Inf); opt = simOptions('InitialCondition',x0fs); data_fs = sim(mdlnlarx,z1sim,opt); figure plot(data_fs,z1sim) title('Nonlinear ARX Model with IC Estimation Using findstates') grid on legend('location','se')
Ответ и измеренный выход теперь запускаются примерно в той же точке.
Теперь используйте data2states
метод, чтобы оценить начальные условия. Во-первых, повредите набор данных в два фрагмента. Используйте первый nx
выборки z1sim
как "прошлые данные", где nx
самая большая задержка регрессора модели.
nx = max(getDelayInfo(mdlnlarx))
nx = 5
z1past = z1sim(1:nx); z1sim2 = z1sim(nx+1:end);
Используйте data2state
вычислить конечное состояние "прошлых данных". Симулируйте вход использования ответа, запускающийся в z1sim(nx+1)
. Постройте ответ вместе с полным z1sim
данные об измерении так, чтобы можно было соответствовать findstates
график.
x0d2s = data2state(mdlnlarx,z1past); opt = simOptions('InitialCondition',x0d2s); data_d2s = sim(mdlnlarx,z1sim2,opt); figure plot(data_d2s,z1sim) title('Nonlinear ARX Model with IC Estimation Using data2state') grid on legend('location','se')
Если вы выполнили каждый раздел отдельно, можно найти что data2states
метод, завершенный более быстро, чем findstates
метод.
Теперь сравните ответы для всех трех случаев начального условия.
plot(data_fs,data_d2s,data_no_ic) title('Nonlinear ARX model Responses for Three IC Approaches Compared') legend('location','se')
Ответы для случаев с помощью findstates
и data2state
фактически то же самое. Ответ для случая, где начальные условия не были установлены, сходится в конечном счете, но только когда после 30 секунд.
compare
| compareOptions
| data2state
| findstates
| predict
| predictOptions
| sim
| simOptions