Этот пример показывает, как оценить параметры модели с помощью линейного и нелинейного моделирования серого поля.
Используйте идентификацию серого поля, чтобы оценить коэффициенты ОДУ, которые описывают образцовую динамику, чтобы соответствовать данной траектории ответа.
Для линейной динамики представляйте модель с помощью линейной модели серого поля (idgrey
). Оцените коэффициенты модели с помощью greyest
.
Для нелинейной динамики представляйте модель с помощью нелинейной модели серого поля (idnlgrey
). Оцените коэффициенты модели с помощью nlgreyest
.
В этом примере вы оцениваете значение коэффициента трения математического маятника с помощью его данных о колебании. Уравнение движения математического маятника:
угловое смещение маятника относительно его состояния отдыха. 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
используется, чтобы задать атрибуты данных, такие как выходное имя, устройство вывода, и время начала и модули временного вектора.
Предположение, что маятник подвергается только маленьким угловым смещениям, уравнение, описывающее движение маятника, может быть упрощено:
Используя угловое смещение () и угловая скорость () как переменные состояния, упрощенное уравнение может быть переписано в форме:
Здесь,
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
.The ориентировочная стоимость b
, вязкий коэффициент трения, с помощью линейной оценки серого поля возвращен в linear_b_est
.
6. Сравните ответ линейной модели серого поля к результатам измерений.
compare(data,linear_model)
Линейная модель оценки серого поля обеспечивает подгонку на 49,9% к результатам измерений. Плохая подгонка происходит из-за предположения, что маятник подвергается маленьким угловым смещениям, тогда как результаты измерений показывают большие колебания.
Нелинейная оценка серого поля требует, чтобы вы выразили дифференциальное уравнение как набор уравнений первого порядка.
Используя угловое смещение () и угловая скорость () как переменные состояния, уравнение движения может быть переписано как набор первого порядка нелинейные дифференциальные уравнения:
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
.The ориентировочная стоимость b
, вязкий коэффициент трения, с помощью нелинейной оценки серого поля возвращен в nonlinear_b_est
.
5. Сравните ответ линейных и нелинейных моделей серого поля к результатам измерений.
compare(data,linear_model,nonlinear_model)
Нелинейная оценка модели серого поля обеспечивает более близкую подгонку к результатам измерений.
greyest
| idgrey
| idnlgrey
| nlgreyest