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

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

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

System Identification Toolbox™ обеспечивает несколько методов для определения начальных условий (ICS), чтобы использовать. Эти методы включают использование:

  • Идентификационные результаты модели

  • Текущие или прошлые измерения данных о вводе/выводе

  • Информация состояния от предыдущих симуляций

Следующая таблица обобщает, какие подходы доступны и когда использовать их. Для краткости эта таблица использует термин "симуляция" широко, чтобы означать "симулировать или предсказывать". Для получения дополнительной информации смотрите, Симулируют и Предсказывают Идентифицированный Выход Модели.

Подходы для оценки начальных условий

Когда использоватьПодходСводные данные метода
Вы симулируете idss, idtf, idproc, idpoly, или idgrey ответ модели с помощью тех же входных данных, с которыми вы идентифицировали свою модель.

Извлеките ICS из идентификационных результатов модели (возвращенные значения или отчет оценки). Оценка возвращает информацию о IC в одной из следующих форм.

  • Вектор начального состояния (idss и idgrey модели)

  • initialCondition объектidtf, idproc, и idpoly модели)

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

[sys,x0est] = ssest(z,__)

[sys,x0est] = greyest(z,__)

x0est = sys.Report.Parameters.X0

[sys,icest] = tfest(z,__)

[sys,~,icest] = procest(z,__)

[sys,icest] = idpoly(z,__)

Примеры:

Разрешите Подходящие Различия в Значении Между Идентификацией Модели и сравните Команду

Примените Начальные условия когда Симуляция Идентифицированные Линейные Модели

Вы хотите воспроизвести результаты, сгенерированные compare (или сгенерированный Model Output строят в приложении).

Используйте возвращенный ICS от compare.

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

[y,fit,x0] = compare(sys,z)

[y,fit,ic] = compare(sys,z)

Примеры:

Соответствуйте Выход сравнивают Команду и Нелинейный блок Model ARX

Примените Начальные условия когда Симуляция Идентифицированные Линейные Модели

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

Использование compare возвратить ICS для idss, idtf, idproc, idpoly, или idgrey модели.

Использование findstates возвратить вектор начального состояния для idss модели только.

Если исходная модель idtf, idproc, или idpoly, можно использовать findstates первым преобразованием модели к использованию формы пространства состояний idss. Смотрите оценочные начальные условия для симуляции линейных моделей.

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

[y,fit,x0] = compare(sys,z)

[y,fit,ic] = compare(sys,z)

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 версии. Как альтернатива 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 и вручную вычисленные результаты ysim2.

plot(ysim,'b',ysim2,'--r')

Figure contains an axes object. The axes object with title y1 contains 2 objects of type line. These objects represent ysim, ysim2.

ysim2 совпадает с ysim.

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

Оцените начальные условия для сегмента симуляции идентифицированной модели при помощи конечного состояния предыдущего сегмента симуляции.

Загрузите данные z1, который является iddata объект, содержащий входные и выходные данные. Оцените пятый порядок линейная модель из данных.

load iddata1 z1
plot(z1)

Figure contains 2 axes objects. Axes object 1 with title y1 contains an object of type line. This object represents z1. Axes object 2 with title u1 contains an object of type line. This object represents 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')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent ynext\_no\_ic, z1next. Axes object 2 with title u1 contains an object of type line. This object represents z1next.

Теперь определите конечное состояние, 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')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent ynext\_ic, z1next. Axes object 2 with title u1 contains an object of type line. This object represents z1next.

Оцените начальные условия для симуляции Хаммерстайна-Винера и нелинейных моделей серого ящика

Когда вы симулируете Хаммерстайна-Винера или нелинейную модель серого ящика и хотите использовать начальные условия, сопоставимые с набором данных измерения 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],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

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

Figure contains 2 axes objects. Axes object 1 with title y1 contains an object of type line. This object represents z1. Axes object 2 with title u1 contains an object of type line. This object represents z1.

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')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent data\_no\_ic, z1sim. Axes object 2 with title u1 contains an object of type line. This object represents z1sim.

Используйте 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')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent data\_fs, z1sim. Axes object 2 with title u1 contains an object of type line. This object represents z1sim.

Ответ и измеренный выход теперь запускаются примерно в той же точке.

Теперь используйте 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')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent data\_d2s, z1sim. Axes object 2 with title u1 contains an object of type line. This object represents z1sim.

Если вы выполнили каждый раздел отдельно, можно найти что data2states метод, завершенный более быстро, чем findstates метод.

Теперь сравните ответы для всех трех случаев начального условия.

plot(data_fs,data_d2s,data_no_ic)
title('Nonlinear ARX model Responses for Three IC Approaches Compared')
legend('location','se')

Figure contains an axes object. The axes object with title y1 contains 3 objects of type line. These objects represent data\_fs, data\_d2s, data\_no\_ic.

Ответы для случаев с помощью findstates и data2state фактически то же самое. Ответ для случая, где начальные условия не были установлены, сходится в конечном счете, но только когда после 30 секунд.

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

| | | | | | |

Похожие темы