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

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

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

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

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

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

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

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

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

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

Извлечение IC из результатов идентификации модели (возвращенные значения или отчет об оценке). Оценка возвращает информацию 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 в приложении).

Использовать возвращенные ИС из compare.

См. Оценка начальных условий по измеренным данным.

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

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

Примеры:

Совпадайте с Выходом сравнения Командного и нелинейного ARX Блока Model

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

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

Использовать compare для возврата IC для 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
('Input', zp.InputData,
'Выход', zp. OutputData);
opt = 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 набор опций. Затем вы воспроизводите моделируемый выход путем преобразования исторических данных в начальные состояния вручную.

Загрузите набор данных с двумя входами и одним выходом.

load iddata7 z7

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

sys = n4sid(z7,5);

Разделите набор данных на две части.

zA = z7(1:15);
zB = z7(16:end);

Симулируйте модель с помощью входного сигнала в zB.

uSim = zB;

Симуляция требует начальных условий. The значений сигналов in 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. The axes 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. Axes 1 with title y1 contains an object of type line. This object represents z1. Axes 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. Axes 1 with title y1 contains 2 objects of type line. These objects represent ynext\_no\_ic, z1next. Axes 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. Axes 1 with title y1 contains 2 objects of type line. These objects represent ynext\_ic, z1next. Axes 2 with title u1 contains an object of type line. This object represents z1next.

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

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

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

Сравните моделируемый выход блока Hammerstein-Wiener 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 Source, Hammerstein-Wiener и Scope. Следующие параметры блоков были предварительно сконфигурированы, чтобы указать данные оценки, оценочную модель и начальные условия:

Параметры блоков Исходного блока Iddata:

  • Объект IDDATA - z1

Параметры блоков блока Hammerstein-Wiener 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);

Установите значение параметров блоков Initial conditions блока Hammerstein-Wiener 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 и постройте его. Используйте первые 1000 точек z для оценки нелинейной модели ARX.

load twotankdata
z = iddata(y,u,0.2);
z1 = z(1:1000);
plot(z1)
title('Estimation data')

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

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

Figure contains 2 axes. Axes 1 with title y1 contains 2 objects of type line. These objects represent data\_no\_ic, z1sim. Axes 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. Axes 1 with title y1 contains 2 objects of type line. These objects represent data\_fs, z1sim. Axes 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. Axes 1 with title y1 contains 2 objects of type line. These objects represent data\_d2s, z1sim. Axes 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. The axes with title y1 contains 3 objects of type line. These objects represent data\_fs, data\_d2s, data\_no\_ic.

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

См. также

| | | | | | |

Похожие темы