Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СФУ - Компьютерное моделирование.doc
Скачиваний:
47
Добавлен:
21.09.2019
Размер:
901.63 Кб
Скачать

Указания к выполнению

Непараметрическая оценка регрессии создается в среде 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. Выборочные значения и оценка регрессии

Выборочные значения представлены в виде импульсов. Оценка регрессии отражена кривой, усредняющей выборочные значения в локаль-ных областях.