Оценка линейных моделей серого-прямоугольника

Определение структуры модели линейного серого-прямоугольника

Можно оценить линейные модели серого ящика в дискретном времени и в непрерывном времени для произвольных обыкновенных дифференциальных или разностных уравнений, используя данные с одним выводом и несколькими выводами во временной области или данные с timeseries (только вывод).

Вы должны представлять свои системные уравнения в форме пространство состояний. Модели в пространстве состояний используют переменные состояния x (t), чтобы описать систему как набор дифференциальных уравнений первого порядка, а не одним или несколькими дифференциальными уравнениями n-го порядка.

Первый шаг в сером ящике - это написание функции, которая возвращает матрицы пространства состояний как функцию от пользовательских параметров и информации о модели.

Используйте следующий формат, чтобы реализовать линейную модель серого ящика в файле:

[A,B,C,D] = myfunc(par1,par2,...,parN,Ts,aux1,aux2,...)

где выходными аргументами являются матрицы пространства состояний и myfunc - имя файла. par1,par2,...,parN являются N параметрами модели. Каждая запись может быть скаляром, вектором или матрицей Ts. - шаг расчета. aux1,aux2,... являются ли необязательными входными параметрами, которые myfunc использует, чтобы вычислить матрицы пространства состояний в дополнение к параметрам и шагу расчета. aux содержит вспомогательные переменные в вашей системе. Вы используете вспомогательные переменные, чтобы варьировать системные параметры на входе в функцию и избегать редактирования файла.

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

В непрерывном времени описание пространства состояний имеет следующую форму:

x˙(t)=Ax(t)+Bu(t)+Ke(t)y(t)=Cx(t)+Du(t)+e(t)x(0)=x0

где, A, B, C и D являются матрицами, которые параметризованы параметрами par1,par2,...,parN. Матрица шума K и вектор начального состояния, x0, не параметризованы myfunc. В некоторых приложениях можно хотеть выразить K и x0 как величины, которые параметризованы выбранными параметрами, так же как A, B, C и D матрицы. Для обработки таких случаев можно записать файл ODE, myfunc, для возврата K и x0 в качестве дополнительных выходных аргументов:

[A,B,C,D,K,x0] = myfunc(par1,par2,...,parN,Ts,aux1,aux2,...)
K и x0 таким образом рассматривают таким же образом как A, B, C и D матрицы. Все они являются функциями параметров par1,par2,...,parN. Чтобы сконфигурировать обработку начальных состояний, x0 и компонента нарушения порядка, K во время оценки используйте greyestOptions набор опций.

В дискретном времени описание пространства состояний имеет сходную форму:

x(k+1)=Ax(k)+Bu(k)+Ke(t)y(k)=Cx(k)+Du(k)+e(t)x(0)=x0

где A, B, C и D теперь являются матрицами дискретного времени, которые параметризованы параметрами par1,par2,...,parN. K и x0 не параметризованы непосредственно, но могут быть оценены, если требуется, путем конфигурирования соответствующих опций оценки.

После создания функции или файла MEX со структурой модели, вы должны задать idgrey объект модели.

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

В этом примере показано, как представлять структуру следующей модели в непрерывном времени:

$$\begin{array}{l}
\dot x(t) = \left[ {\begin{array}{*{20}{c}}
0&1\\
0&{{\theta _1}}
\end{array}} \right]x(t) + \left[ {\begin{array}{*{20}{c}}
0\\
{{\theta _2}}
\end{array}} \right]u(t)\\
y(t) = \left[ {\begin{array}{*{20}{c}}
1&0\\
0&1
\end{array}} \right]x(t) + e(t)\\
x(0) = \left[ {\begin{array}{*{20}{c}}
{{\theta _3}}\\
0
\end{array}} \right]
\end{array}$$

Это уравнение представляет электродвигатель, где${y_1}(t) = {x_1}(t)$ - угловое положение вала мотора, и${y_2}(t) = {x_2}(t)$ является скоростью вращения. Параметр является$- {\theta _1}$ обратной временной константой двигателя и является$- {{\theta _2}}/{{\theta _1}}$ статическим усилением от входа до скорости вращения.

Двигатель находится в состоянии покоя в t = 0, но его угловое положение${\theta _3}$ неизвестно. Предположим, что приблизительные номинальные значения неизвестных параметров, ${\theta _1} = - 1$${\theta _2} = 0.25$и. ${\theta _3} = 0$Для получения дополнительной информации об этом примере смотрите раздел о моделях пространства состояний в Система Идентификации: Theory for the User, Second Edition, Lennart Ljung, Prentice Hall PTR, 1999.

Структура модели пространства состояний в непрерывном времени определяется следующим уравнением:

$$\begin{array}{l}
\dot x(t) = Fx(t) + Gu(t) + \tilde Kw(t)\\
y(t) = Hx(t) + Du(t) + w(t)\\
x(0) = x0
\end{array}$$

Если вы хотите оценить ту же модель с помощью структурированного представления пространства состояний, см. «Оценка структурированных моделей пространства состояний непрерывного времени».

Чтобы подготовить эту модель к оценке:

  • Создайте следующий файл, чтобы представлять структуру модели в этом примере:

function [A,B,C,D,K,x0] = myfunc(par,T)
A = [0 1; 0 par(1)]; 
B = [0;par(2)];
C = eye(2);
D = zeros(2,1);
K = zeros(2,2);
x0 = [par(3);0];

Сохраните файл так, чтобы он находился в пути поиска файлов MATLAB ®.

  • Используйте следующий синтаксис, чтобы задать idgrey объект модели на основе myfunc файл:

par = [-1; 0.25; 0];
aux = {};
T = 0;
m = idgrey('myfunc',par,'c',aux,T);

где par представляет вектор всех пользовательских параметров и содержит их номинальные (начальные) значения. В этом примере все скалярные параметры сгруппированы в par вектор. Скалярные параметры также могли быть рассмотрены как независимые входные параметры в функцию ODE myfunc. 'c' задает, что базовая параметризация находится в непрерывном времени. aux представляет необязательные аргументы. Как myfunc не имеет дополнительных аргументов, используйте aux = {}. T задает шаг расчета; T = 0 указывает модель в непрерывном времени.

Загрузите данные оценки.

load(fullfile(matlabroot,'toolbox','ident','iddemos','data','dcmotordata'));
data = iddata(y,u,0.1);

Использование greyest для оценки значений параметров серого ящика:

m_est = greyest(data,m);

где data - данные оценки и m является инициализацией оценки idgrey модель. m_est является оценочным idgrey модель.

См. также

|

Похожие темы