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

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

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

  • Для линейной динамики представляйте модель с помощью линейной модели серого ящика (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, возвращает представление пространства состояний линейной модели движения математического маятника с помощью коэффициентов модели mGL, и 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');

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

3. Задайте mG, и l как известные параметры.

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

Как задано на предыдущем шаге, mG, и l первые три параметра linear_model. Используя Structure.Parameters.Free поле для каждого из параметров, mG, и 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Ориентировочная стоимость.The 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, возвращает производные состояния и выход нелинейной модели движения маятника с помощью коэффициентов модели mGL, и 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. Задайте mG, и l как известные параметры.

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

Как задано на предыдущем шаге, mG, и l первые три параметра nonlinear_model. Используя setpar команда, mG, и 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Ориентировочная стоимость.The b, коэффициент вязкого трения, с помощью нелинейной оценки серого ящика возвращен в nonlinear_b_est.

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

compare(data,linear_model,nonlinear_model)

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

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

| | |

Похожие темы