exponenta event banner

Оценочные коэффициенты ОДУ, соответствующие данному решению

В этом примере показано, как оценить параметры модели с помощью линейного и нелинейного моделирования «серый ящик».

Используйте идентификацию «серого ящика» для оценки коэффициентов ОДУ, которые описывают динамику модели в соответствии с заданной траекторией отклика.

  • Для линейной динамики представляйте модель с помощью линейной модели «серый ящик» (idgrey). Оценка коэффициентов модели с помощью greyest.

  • Для нелинейной динамики представляйте модель с помощью нелинейной серой модели (idnlgrey). Оценка коэффициентов модели с помощью nlgreyest.

В этом примере оценивается значение коэффициента трения простого маятника с использованием данных о его колебаниях. Уравнение движения простого маятника:

$$m{l^2}\ddot \theta + b\dot \theta + mglsin\theta = 0$$

${\theta}$ - угловое смещение маятника относительно его состояния покоя. g - постоянная гравитационного ускорения. m - масса маятника и l - длина маятника. b - коэффициент вязкого трения, значение которого оценивается в соответствии с заданными данными углового смещения. Внешняя движущая сила, способствующая движению маятника, отсутствует.

Данные измерения нагрузки.

load(fullfile(matlabroot,'toolbox','ident', ...
     'iddemos','data','pendulumdata'));
data = iddata(y,[],0.1,'Name','Pendulum');
data.OutputName = 'Pendulum position';
data.OutputUnit = 'rad';
data.Tstart = 0;
data.TimeUnit = 's';

Данные измеренного углового смещения загружаются и сохраняются как dataодин iddata объект со временем выборки 0,1 секунды. set используется для указания атрибутов данных, таких как имя вывода, единица измерения вывода, время начала и единицы измерения вектора времени.

Выполните линейную оценку в сером ящике.

Предполагая, что маятник подвергается только небольшим угловым смещениям, уравнение, описывающее движение маятника, может быть упрощено:

$$m{l^2}\ddot \theta + b\dot \theta + mgl\theta = 0$$

Используя в $\theta$$\dot \theta$качестве переменных состояния угловое смещение () и угловую скорость (), упрощенное уравнение можно переписать в виде:

$$\begin{array}{l}
\mathop {X(t)}\limits^. = AX(t) + Bu(t)\\
y(t) = CX(t) + Du(t)
\end{array}$$

Здесь,

$$\begin{array}{l}
X(t) = \left[ {\begin{array}{*{20}{c}}
\theta \\
{\dot \theta }
\end{array}} \right]\\
A = \left[ {\begin{array}{*{20}{c}}
0&1\\
{\frac{{ - g}}{l}}&{\frac{{ - b}}{{m{l^2}}}}
\end{array}} \right]\\
B = 0\\
C = \left[ {\begin{array}{*{20}{c}}
1&0
\end{array}} \right]\\
D = 0
\end{array}$$

B и D матрицы равны нулю, поскольку отсутствует внешняя движущая сила для простого маятника.

1. Создайте файл ОДУ, который связывает коэффициенты модели с представлением пространства состояния.

function [A,B,C,D] = LinearPendulum(m,g,l,b,Ts)
A = [0 1; -g/l, -b/m/l^2];
B = zeros(2,0);
C = [1 0];
D = zeros(1,0);
end 

Функция, LinearPendulum, возвращает представление пространства состояния модели линейного движения простого маятника с использованием коэффициентов модели m, g, l, и b. Ts - время выборки. Сохранить эту функцию как LinearPendulum.m. Функция LinearPendulum должен находиться в тракте MATLAB ®. Кроме того, можно указать полный путь для этой функции.

2. Создайте линейную серую модель, связанную с LinearPendulum функция.

m = 1;
g = 9.81;
l = 1;
b = 0.2;
linear_model = idgrey('LinearPendulum',{m,g,l,b},'c');

m, g и, l укажите значения известных коэффициентов модели. b задает начальное предположение для коэффициента вязкого трения. 'c' входной аргумент в вызове idgrey определяет linear_model как система непрерывного времени.

3. Определить m, g, и l в качестве известных параметров.

linear_model.Structure.Parameters(1).Free = false;
linear_model.Structure.Parameters(2).Free = false;
linear_model.Structure.Parameters(3).Free = false;

Как определено на предыдущем шаге, m, g, и l являются первыми тремя параметрами linear_model. Использование Structure.Parameters.Free поле для каждого из параметров, m, g, и l указаны как фиксированные значения.

4. Создайте набор опций оценки, который задает начальное состояние для оценки и включает отображение хода выполнения оценки. Также заставляют алгоритм оценки возвращать стабильную модель. Эта опция доступна только для оценки линейной модели (idgrey).

opt = greyestOptions('InitialState','estimate','Display','on');
opt.EnforceStability = true;

5. Оцените коэффициент вязкого трения.

linear_model = greyest(data,linear_model,opt);

greyest команда обновляет параметр linear_model.

b_est = linear_model.Structure.Parameters(4).Value;
[linear_b_est,dlinear_b_est] = getpvec(linear_model,'free')
linear_b_est =

    0.1178


dlinear_b_est =

    0.0088

getpvec возврат, dlinear_b_est, неопределенность 1 стандартного отклонения, связанная с b, параметр свободной оценки linear_model. Оценочная стоимость b, коэффициент вязкого трения, используя линейную оценку в сером ящике, возвращается в linear_b_est.

6. Сравните отклик линейной серой модели с измеренными данными.

compare(data,linear_model)

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

Выполните нелинейную оценку в сером ящике.

Нелинейная серая оценка требует, чтобы дифференциальное уравнение выражалось как набор уравнений первого порядка.

Используя угловое смещение $\theta$() и угловую скорость $\dot \theta$() в качестве переменных состояния, уравнение движения может быть переписано как множество нелинейных дифференциальных уравнений первого порядка:

$$\begin{array}{l}
{x_1}(t) = \theta (t)\\
{x_2}(t) = \dot \theta (t)\\
{{\dot x}_1}(t) = {x_2}(t)\\
{{\dot x}_2}(t) = \frac{{ - g}}{l}sin({x_1}(t)) - \frac{b}{{m{l^2}}}{x_2}(t)\\
y(t) = {x_1}(t)
\end{array}$$

1. Создайте файл ОДУ, который связывает коэффициенты модели с нелинейным представлением.

function [dx,y] = NonlinearPendulum(t,x,u,m,g,l,b,varargin)

% Output equation.
y = x(1); % Angular position.

% State equations.
dx = [x(2);                             ... % Angular position
      -(g/l)*sin(x(1))-b/(m*l^2)*x(2)   ... % Angular velocity
     ];
end

Функция, NonlinearPendulum, возвращает производные состояния и вывод нелинейной модели движения маятника с использованием коэффициентов модели m, g, l, и b. Сохранить эту функцию как NonlinearPendulum.m на тракте MATLAB ®. Кроме того, можно указать полный путь для этой функции.

2. Создайте нелинейную серую модель, связанную с NonlinearPendulum функция.

m = 1;
g = 9.81;
l = 1;
b = 0.2;
order         = [1 0 2];
parameters    = {m,g,l,b};
initial_states = [1; 0];
Ts            = 0;
nonlinear_model = idnlgrey('NonlinearPendulum',order,parameters,initial_states,Ts);

3. Определить m, g, и l в качестве известных параметров.

setpar(nonlinear_model,'Fixed',{true true true false});

Как определено на предыдущем шаге, m, g, и l являются первыми тремя параметрами nonlinear_model. Использование setpar команда, m, g, и l указаны как фиксированные значения и b задается как свободный параметр оценки.

4. Оцените коэффициент вязкого трения.

nonlinear_model = nlgreyest(data,nonlinear_model,'Display','Full');

nlgreyest команда обновляет параметр nonlinear_model.

b_est = nonlinear_model.Parameters(4).Value;
[nonlinear_b_est, dnonlinear_b_est] = getpvec(nonlinear_model,'free')
nonlinear_b_est =

    0.1002


dnonlinear_b_est =

    0.0149

getpvec возвращает, как dnonlinear_b_est, неопределенность 1 стандартного отклонения, связанная с b, параметр свободной оценки nonlinear_model. Оценочная стоимость b, коэффициент вязкого трения, используя нелинейную оценку в сером ящике, возвращается в nonlinear_b_est.

5. Сравните отклик линейной и нелинейной серых моделей с измеренными данными.

compare(data,linear_model,nonlinear_model)

Нелинейная оценка модели «серого ящика» обеспечивает более близкое соответствие измеренным данным.

См. также

| | |

Связанные темы