- •Компьютерное моделирование в пакете matlab/Simulink
- •© Сибирский федеральный университет, 2011
- •Оглавление
- •Общие сведения
- •Решение системы линейных алгебраических уравнений
- •Краткие теоретические сведения
- •Указания к выполнению
- •Порядок выполнения работы
- •Задания для самоподготовки
- •Решение транспортной задачи
- •Краткие теоретические сведения
- •Указания к выполнению
- •Исходные данные для транспортной задачи
- •Задания для самоподготовки
- •Указания к выполнению
- •Порядок выполнения работы
- •Задания для самоподготовки
- •Моделирование движения маятника
- •Краткие теоретические сведения
- •Указания к выполнению
- •Порядок выполнения работы
- •Задания для самоподготовки
- •Модель полЕта двухступенчатой ракеты
- •Краткие теоретические сведения
- •Указания к выполнению
- •Указания к выполнению
- •Порядок выполнения работы
- •Задания для самоподготовки
- •Построение НепараметрическОй Оценки Регрессии
- •Краткие теоретические сведения
- •Указания к выполнению
- •Порядок выполнения работы
- •Задания для самоподготовки
- •Библиографический список
- •Компьютерное моделирование в пакете matlab/Simulink
- •Агафонов Евгений Дмитриевич
- •660041, Г. Красноярск, пр. Свободный, 79.
- •660041, Г. Красноярск, пр. Свободный, 82а.
Указания к выполнению
Непараметрическая оценка регрессии создается в среде Simulink по приведенному на рис. 12 образцу.
Генерация выборки осуществляется блоком Sample, представляющим собой источник сигнала Constant, в котором вместо константы задан вектор входных значений
Рис. 12. Непараметрическая оценка регрессии в среде Simulink
Вектор выборочных значений выходной величины вычисляется по формуле синусоидальной функции с добавлением аддитивной помехи. Векторная помеха задается блоком Random Vector, переименованным блоком Random Number со специальными свойствами (рис. 13).
Рис. 13. Свойства блока Random Vector
Вектор помех состоит из случайных величин, распределенных по нормальному закону со следующими параметрами: ,
Блок Cs задает параметр размытости. Блок S-function – пользовательский блок, написанный на языке MATLAB в соответствии с шаблоном из справочной системы.
Код пользовательского блока содержится в файле block.m:
% S-function
function [sys,x0,str,ts]=block(t,x,u,flag,n)
switch flag
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0
[sys,x0,str,ts] = mdlInitializeSizes(x,n);
case 1
sys = [1];
case {2,4,9}
sys = [];
%%%%%%%%%%
% Output %
%%%%%%%%%%
case 3
sys = mdlOutputs(t,x,u,n);
otherwise
error(['unhandled flag = ',num2str(flag)]);
end
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
function [sys,x0,str,ts] = mdlInitializeSizes(x,n)
sizes = simsizes;
sizes.NumContStates = 0; % количество непрерывных переменных % состояния
sizes.NumDiscStates = 1; % количество дискретных
% переменных состояния
sizes.NumOutputs = 2; % количество выходных переменных
sizes.NumInputs = 1+n+n; % количество входных переменных
sizes.DirFeedthrough = 1; % есть проход входного сигнала на % выход
sizes.NumSampleTimes = 1; % размерность вектора шагов
% модельного времени
sys = simsizes(sizes);
str = [];
x0 = [0];
ts = [0 0]; % sample time: [period, offset]
global xx;
global yy;
% end mdlInitializeSizes
%=============================================================================
% mdlOutputs
% Return the output vector for the S-function
%=============================================================================
function sys = mdlOutputs(t,x,u,n)
global xx;
global yy;
tt = t; % time
cn = u(1); % bandwidth
% n - размерность векторов входа
n2 = n + 1; % граница с учетом сдвига
if t == 0
xx = [];
yy = [];
for i=2:n2
xx = [ xx u(i) ];
yy = [ yy u(i+n) ];
end
end
sumzn = 0;
sumch = 0;
for i=1:n
if abs(tt-xx(i)) < cn
sumch = sumch + 0.75*( 1-(tt-xx(i))*(tt-xx(i))/(cn*cn)) *yy(i);
sumzn = sumzn + 0.75*( 1-(tt-xx(i))*(tt-xx(i))/(cn*cn));
end
end
if sumzn == 0
p = 0;
else
p = sumch/sumzn;
end
sys(1) = p;
sys(2) = x(1);
for i=1:n % отображаем выборку на графике
if abs(tt - xx(i))<=0.005;
sys(2) = yy(i);
break;
end
end
% end mdlOutputs
В параметрах модели, доступных в меню File → Model Properties → → Callbacks → InitFcn, объявляются и инициализируются три переменные, задающие объем выборки, левую границу и шаг выборочных значений U:
N = 91; % Sample size
st = 2; % Initial time
dt = 0.1; % Time increment
Имя переменной N используется в качестве параметра, указываемого в окне свойств блока S-function. Результат работы модели отображается блоком Scope на графике (рис. 14).
Рис. 14. Выборочные значения и оценка регрессии
Выборочные значения представлены в виде импульсов. Оценка регрессии отражена кривой, усредняющей выборочные значения в локаль-ных областях.