Когда вы симулируете динамическую систему, которая не начинает с отдыха, необходимо инициализировать ту симуляцию, чтобы совпадать со стартовыми условиями. Например, можно сравнивать симулированный отклик с результатами измерений, или с предыдущей симуляцией или расчетом. Вы можете хотеть запустить свою симуляцию при установившемся условии или продолжить симуляцию от предыдущей симуляции.
System Identification Toolbox™ обеспечивает несколько методов для определения начальных условий (ICS), чтобы использовать. Эти методы включают использование:
Идентификационные результаты модели
Текущие или прошлые измерения данных о вводе/выводе
Информация состояния от предыдущих симуляций
Следующая таблица обобщает, какие подходы доступны и когда использовать их. Для краткости эта таблица использует термин "симуляция" широко, чтобы означать "симулировать или предсказывать". Для получения дополнительной информации смотрите, Симулируют и Предсказывают Идентифицированный Выход Модели.
Подходы для оценки начальных условий
Когда использовать | Подход | Сводные данные метода |
---|---|---|
Вы симулируете idss , idtf , idproc , idpoly , или idgrey ответ модели с помощью тех же входных данных, с которыми вы идентифицировали свою модель. | Извлеките ICS из идентификационных результатов модели (возвращенные значения или отчет оценки). Оценка возвращает информацию о IC в одной из следующих форм.
Смотрите оценочные начальные условия от результатов измерений. |
Примеры: Разрешите Подходящие Различия в Значении Между Идентификацией Модели и сравните Команду Примените Начальные условия когда Симуляция Идентифицированные Линейные Модели |
Вы хотите воспроизвести результаты, сгенерированные compare (или сгенерированный Model Output строят в приложении). | Используйте возвращенный ICS от Смотрите оценочные начальные условия от результатов измерений. |
Примеры: Соответствуйте Выход сравнивают Команду и Нелинейный блок Model ARX Примените Начальные условия когда Симуляция Идентифицированные Линейные Модели |
Вы - ответ имитационной модели на данный входной сигнал и хотите запустить симуляцию в точке, которая приводит к самому близкому соответствию к данному выходному сигналу. | Использование Использование Если исходная модель Смотрите оценочные начальные условия от результатов измерений. |
Примеры: Примените Начальные условия когда Симуляция Идентифицированные Линейные Модели Оцените начальные условия для линейной модели Используя результаты измерений |
Вы продолжаете симуляцию, такой что касается онлайновой обработки. Вы используете набор данных разделения, такой что касается 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
. X0 представляет вектор начального состояния, и IC представляет initialCondition
объект. Для примеров смотрите Различия в Значении Подгонки Твердости Между Идентификацией Модели и сравните Команду, Соответствие Вывело, сравнивают Команду и Нелинейный блок Model ARX, и Применяют Начальные условия когда Симуляция Идентифицированные Линейные Модели.
Оцените начальные условия с помощью измеренных данных о вводе/выводе, с помощью функции findstates
оценить начальные состояния, сопоставимые с набором данных. Для примера смотрите Оценочные Начальные условия для Линейной Модели Используя Результаты измерений.
Оцените, что начальные условия из данных об измерении, сразу предшествующих вашей симуляции, запускаются. Методы включают следующее.
Используя функцию data2state
оценить то конечное состояние набора данных. Прошлое конечное состояние затем становится начальным состоянием для последующей симуляции. Для примера смотрите Оценочные Начальные условия для Нелинейной Модели ARX.
Используя ваши прошлые данные как прокси для начальных условий при использовании sim
или predict
. Когда вы запускаете свою симуляцию, модель внутренне вызывает data2state
для вас. Для примера смотрите, Изучают Использование Исторических данных для Симуляции модели.
При разделении набора данных вы используете в две части. Сделайте первую часть только достаточно большой, чтобы позволить data2state
вычислить точное конечное состояние. Этот подход данных разделения может быть намного менее в вычислительном отношении интенсивным, чем использование findstates
на полном наборе данных, особенно для нелинейных моделей ARX. Для примера смотрите Оценочные Начальные условия для Нелинейной Модели ARX.
Используйте информацию состояния от предыдущих симуляций или предварительных симуляций. Если никакая предыдущая симуляция не доступна, можно предварительно симулировать от отдыха, или известное начальное условие на грани симуляции запускаются. Конечное состояние прошлого или предварительной симуляции является начальными состояниями для симуляции, которую вы хотите выполнить. Для примера смотрите, Продолжают Симуляцию Идентифицированной Модели с помощью Прошлых состояний.
findstates
и data2state
функции являются наиболее общими средствами для определения начальных состояний или конечного состояния от любых измерений данных о вводе/выводе. Однако, чтобы использовать эти функции, у вас должна быть структура модели, которая включает явное представление состояния. Линейные модели кроме idss
и idgrey
не используйте явные состояния. Чтобы найти эквивалентные начальные состояния, можно преобразовать эти модели в idss
модели и находят начальные состояния от idss
версии. Как альтернатива findstates
, можно также использовать compare
получить начальные условия, не преобразовывая ваши модели в форму пространства состояний. Для этих моделей, compare
возвращает initialCondition
объект, который содержит информацию о свободном ответе модели в форме пространства состояний и соответствующих начальных состояниях.
После того, как вы оцените начальные условия, можно включить их в синтаксис симуляции командной строки, Simulink® модель или приложение System Identification.
Следующие примеры иллюстрируют оценку начального условия для линейных моделей. Первое использование в качестве примера findstates
и compare
. Вторые и третьи примеры используют исторические данные. Таким образом, примеры определяют начальные условия из данных, сразу предшествующих времени начала симуляции.
Используйте различные методы, чтобы получить начальные условия для линейной модели и сравнить результаты.
Оцените передаточную функцию для результатов измерений. Возвратите начальные условия в ic
.
load iddata1 z1; [sys,ic] = tfest(z1,3); ic
ic = initialCondition with properties: A: [3x3 double] X0: [3x1 double] C: [0.2303 5.9117 2.2283] Ts: 0
ic.X0
ans = 3×1
-1.7569
2.6195
-6.5177
sys
идентифицированная передаточная функция непрерывного времени (idtf
) модель. ic
initialCondition
объект. initialCondition
объект представляет свободный ответ системы в форме пространства состояний. Объект включает конвертированный A
и C
матрицы пространства состояний, которые соответствуют sys
и предполагаемый вектор начального состояния X0
.
Можно также использовать 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,ic2] = compare(z1,sys); ic2
ic2 = initialCondition with properties: A: [3x3 double] X0: [3x1 double] C: [0.2303 5.9117 2.2283] Ts: 0
ic2.X0
ans = 3×1
-1.7569
2.6195
-6.5177
Векторы начального состояния идентичны во всех трех случаях.
Используйте исторические данные ввода - вывода в качестве прокси для начальных условий при симуляции модели. Вы сначала симулируете использование 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],idPiecewiseLinear,idPiecewiseLinear);
Можно теперь симулировать выход предполагаемой модели в 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],idWaveletNetwork);
Извлеките первые 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
| sim
| simOptions
| predict
| predictOptions
| findstates
| data2state