Оцените начальные условия для симуляции идентифицированных моделей

Когда вы симулируете динамическую систему, которая не начинает с отдыха, необходимо инициализировать ту симуляцию, чтобы совпадать со стартовыми условиями. Например, можно сравнивать симулированный ответ на результаты измерений, или на предыдущую симуляцию или расчет. Вы можете хотеть запустить свою симуляцию при установившемся условии или продолжить симуляцию от предыдущей симуляции.

Сводные данные подходов оценки Начального Условия

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
('Введите', zp. InputData,
'Выведите', zp. OutputData);
выберите = simOptions ('InitialCondition', IO)
или
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)

пример: Продолжите Симуляцию Идентифицированной Модели с помощью Прошлых состояний

Методы оценки начального условия

Предыдущая таблица вызывает различные методы для оценки начального условия. Следующие разделы обобщают эти методы источником данных оценки.

Оцените начальные условия от результатов измерений

Оцените начальные условия из данных об измерении, от которых вы получаете свои входные параметры симуляции. Методы включают:

Оцените начальные условия из прошлых данных об измерении

Оцените, что начальные условия из данных об измерении, сразу предшествующих вашей симуляции, запускаются. Методы включают:

  • Используя функциональный 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 и вручную вычисленные результаты ysim2.

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.

Симулируйте модель Хаммерстайна-Винера в Simulink

Сравните симулированный выход блока 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

Когда вы симулируете нелинейную модель 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

Используйте два различных метода, чтобы оценить начальные условия для нелинейной модели 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 секунд.

Смотрите также

| | | | | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте