Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ver_3__СлучВел.doc
Скачиваний:
38
Добавлен:
05.11.2018
Размер:
429.06 Кб
Скачать

Полиморфизм объектных методов

Объектная технология замечательна своей полиморфностью, благодаря чему можно повторить вычисления, заменив прямоугольники кругами:

>>A=Circ(10);B= Circ(3);D=Circ(15);X=Gen('rnd',D,50);

Выполнив остальные команды с новыми объектами A, B, D, построим функцию распределения площадей пересечений. Полиморфное взаимодействие (в данном случае, определение площади пересечений) объектов разных геометрических классов (рис. 3.17) осуществляется корректно каждой парой объектов в соответствии с их свойствами.

Геометрические объекты способны учитывать взаимное пересечение при вычислении площади поражения цели несколькими снарядами. Моделирование с помощью генератора Gen рассеивания залповой стрельбы, корректное вычисление ущерба геометрическими объектами в каждой случайной реализациии, построение функции ущерба по накопленной статистике с помощью SmartHist и вычисление показателей эффективности по известной функции распределения – это технология, на основе которой возможен системный анализ эффективности стрельбы.

Контрольные вопросы

  1. Объясните связь между случайными событиями и случайными величинами.

  2. Как описывают распределение дискретной СВ?

  3. Как отличаются друг от друга многоугольники распределения двух СВ «расход снарядов» и «число промахов» в серии независимых выстрелов до первого попадания?

  4. Перечислите свойства функции распределения непрерывной СВ.

  5. Объясните вероятностный смысл плотности вероятности непрерывной СВ, элемента вероятности. Основное свойство плотности вероятности.

  6. Объясните структуру подынтегрального выражения в интегральной формуле полной вероятности.

  7. Каковы особенности функции распределения дискретно-непрерывной СВ? Как записать интегральную формулу полной вероятности для дискретно-непрерывной СВ?

  8. Как построить гистограмму статистического распределения? какими соображениями следует руководствоваться при выборе ширины регистров?

  9. Как построить статистический ряд распределения и полигон частот?

ПРИЛОЖЕНИЕ к лекции 3

Листинг 3.1. Функция Gen для вычисления функции распределения стандартного нормального закона:

%Генерирует случайные реализации СВ с заданным законом распределения

function out=Gen(varargin)

switch varargin{1}

case 'const', out=ones(varargin{3:4})*varargin{2};

case 'exp', out=-log(rand(varargin{3:4}))/varargin{2};

case 'Wei', out=-log(rand(varargin{3:4}));

c=varargin{2}; if c(2)~=1 out=out.^1/c(2);end

out=out/c(1);

case 'rnd', a=varargin{2};

if isreal(a)

v=Default({{0},0,pi/2,10000,1},varargin);

out = a+(v{3}-a)*rand(v{4:5});

elseif isa(a,'Rect')

c=MyCenter(a); r=MySize(a); n=varargin{3};

out=Madd(Mmult(rand(2,n)-0.5,r'),c);

elseif isa(a,'Circ')

c=MyCenter(a); r=MySize(a); n=varargin{3};

out=Madd(Mmult(rand(2,fix(4/3*n))-0.5,2*r'),c);

I=find((out(1,:)-c(1)).^2+(out(2,:)-c(2)).^2<r^2);

if length(I)>n I=I(1:n);end

out=out(:,I);

elseif isa(a,'smartshape')

out=[];

n=varargin{3};AB=getab(a);

m=min(AB,[],2);M=max(AB,[],2);

k=fix(4/3*n);

o=Madd(Mmult(rand(2,k),M-m),m);

for i=1:k

if Impact(a,o(:,i)) out(:,end+1)=o(:,i);end

end

end

case 'bin', n=1;if nargin>3 n=varargin{4};end

k=varargin{2}; p=varargin{3};

if p>1 pp=k;k=p;p=pp; end

R=rand(n,k);out=sum(R<p,2)';

case 'sin', v=Default({{0},0,pi/2,10000,1},varargin);

a=sin(v{2});

out=asin(rand(v{4},v{5})*(sin(v{3})-a)+a);

end

function v=Default(v,act)

v(1:length(act))=act;

Листинг 3.2. Построитель гистограмм:

function varargout = SmartHist(A,X,n,nh)

if nargin<2 | isempty(X) X=[min(A) max(A)]; end

if nargin<3 & length(X)<3 n=[]; end

t=[];H=[]; eps=1e-15;

A=sort(A(:)');N=length(A);

k=[find(A(2:end)-A(1:end-1)>eps) N];

if length(k)>0

C=diff([0 k]);

I=find(C>1); if ~isempty(I) t=A(k(I));end

A0=A;A=[];

J=find(C==1);if ~isempty(J) A=A0(k(J)); end

end

if ~isempty(A)

if isempty(n) [n, n2]=opt_n(A,X); end

if nargin<4

nh=n;

else

if isempty(nh)nh=opt_n(A,X);end

end

[x,F,f,H]=SDL(A,X,n,nh,nargout);

F.F=F;F.x=x;f.f=f;f.x=x;

else

f.f=C(I)/N; f.x=t; F.x=t; F.F=f.f*0;

end

if ~isempty(t)

dh=1;if isstruct(H) dh=H.h;end

F.F=F.F*length(A)/N;

[F,fs]=CorrectF(F,f,t,I,C/N,C/N/dh);

if ~isempty(A) f=fs;end

if isstruct(H) H.p=hist(A0,H.x)/N; end

end

F.I='F';f.I='f';H.I='H';

varargout{1}=F;

if nargout >1 varargout{2}=f; end

if nargout >2 varargout{3}=H; end

%

function [n, ns] = opt_n(A,X)

Sd=1e10;I=0;

for k=10:2:100

I=I+1;

[x,dh,xx]=Net(X,k);

B=hist(A,xx);

[d,d2]=Diff_k(B);

Ds(I)=sum(abs(d));D2s(I)=sum(abs(d2));

end

[D,IDm]=min(Ds); n=10+(IDm-1)*2;

[D2,ID2m]=min(D2s);ns=10+(ID2m-1)*2;

%

function fs = Correct_f(fs,t,I,C)

for i=1:length(t)

J=find(fs.x==t(i));

fs.f(J)=fs.f(J)+C(I(i));

end

%

function [Fs,fs] = CorrectF(Fs,fs,t,I,CF,Cf)

x=Fs.x;F=Fs.F;f=fs.f;

K=max(fs.f)/max(Cf(I))*1.5;

Cf=Cf*K;

for i=1:length(t)

m=find(x>t(i));

if ~isempty(m)

m1=m(1)-1;

x=[x(1:m1),x(m1),x(m)];

F=[F(1:m1),[F(m1),F(m)]+CF(I(i))];

fs.f=[fs.f(1:m1),Cf(I(i)),fs.f(m)];

else

m=length(x);

x=[x(1:m),x(m)];

F=[F(1:m),F(m)];

fs.f=[fs.f(1:m),fs.f(m)];

F(m+1)=F(m+1)+CF(I(i));

fs.f(m+1)=Cf(I(i));

end

Fs.F=F;Fs.x=x;fs.x=x;

end

%

function [d,d2]=Diff_k(x)

d=[0 diff(x)];

d2=[0 diff(d)];

%

function [x,F,f,H]=SDL(W,X,N,nh,narg)

[x,dh,xx]=Net(X,N);

ff=hist(W,xx)/length(W);

f2=ff/(2*diff(x(1:2)));

F=[0,cumsum(ff)];

f1=[f2(1),f2]+[f2,f2(end)];

f=f1+[f1(2:end) f1(end)]*0.5+[f1(1) f1(1:end-1)]*0.5;

f=f/Trap(f,x);

if narg<3 H=[];break,end

if nh~=N

[h,dh,xx]=Net(X,nh);

ff=hist(W,xx)/length(W);

end

H.x=xx;H.p=ff;H.h=dh;

%

function [x,dh,xc]=Net(X,N)

x=linspace(X(1),X(2),N);

dh=diff(x(1:2));

xc=x(1:end-1)+dh/2;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]