Реалізація другої лабораторної роботи виглядає ось так:
Код:
%#> Lab#2_Sheremeta variant #7
function Lab2_Sheremeta
% Part#1: R=10.12 X=-0.001 Y=0.001;
circleCenterAbscissa = -1e-3;
circleCenterOrdinate = 1e-3;
radius = 10.12;
experiment = []; % here will be answer
for amountOfPoints = [100, 200, 1000, 10000]
circleAreas = [];
for i = 1:5
circleArea = monteCarlo(circleCenterAbscissa, circleCenterOrdinate, radius, amountOfPoints);
circleAreas = [circleAreas; circleArea];
end
circleAreas = [amountOfPoints; circleAreas; mean(circleAreas); var(circleAreas)];
experiment = [experiment, circleAreas];
end
% Beautiful answer format
array2table(experiment, 'RowNames', {'Amount Of Points(n)', 'Stringer 1', 'Stringer 2', 'Stringer 3', 'Stringer 4', 'Stringer 5', 'Mean', 'Variance'})
% Part#2 System uptime calculation
meanOfNodeUptime = 1000;
varinceOfNodeUptime = 100;
% Uniform distribution parameters
a = meanOfNodeUptime - varinceOfNodeUptime*sqrt(3);
b = meanOfNodeUptime + varinceOfNodeUptime*sqrt(3);
% Normal distribution parameters
mu = meanOfNodeUptime; % mean
% R = normrnd(mu,sigma) generates random numbers from the normal distribution with mean parameter mu
% and standard deviation parameter sigma
sigma = sqrt(varinceOfNodeUptime); % standard deviation is the square root of the variance
N = 1e5;
gammaUniform = [];
gammaNormal = [];
for k = 1:N
% uniform distribution
gammaUniform = [gammaUniform, systemUptime(unifrnd(a, b, 1,7))];
% normal distribution
gammaNormal = [gammaNormal, systemUptime(normrnd(mu, sigma, 1, 7))];
end
% statistical parameters
gammaUniformMean = mean(gammaUniform);
gammaNormalMean = mean(gammaNormal);
gammaUniformStd = std(gammaUniform, 1);
gammaNormalStd = std(gammaNormal, 1);
% charting results
gammaUniformPdf = []; gammaNormalPdf = [];
xmin = min(min(gammaUniform), min(gammaNormal));
xmax = max(max(gammaUniform), max(gammaNormal));
step = (xmax - xmin)/40;
for x = xmin:step:xmax
gammaUniformPdf = [gammaUniformPdf, sum(gammaUniform >= x & gammaUniform < x + step)/N];
gammaNormalPdf = [gammaNormalPdf, sum(gammaNormal >= x & gammaNormal < x + step)/N];
end
hold on;
grid on;
x = xmin:step:xmax;
plot(x, gammaUniformPdf, '*-r');
plot(x, gammaNormalPdf, 'o-b');
title(['N_i_t_e_r = ', num2str(N),...
'; m_u_n_i_f = ', num2str(gammaUniformMean),...
'; \sigma_u_n_i_f = ', num2str(gammaUniformStd),...
'; m_n_o_r_m = ', num2str(gammaNormalMean),...
'; \sigma_n_o_r_m = ', num2str(gammaNormalStd)]);
xlabel('System uptime, h');
ylabel('Probability density');
legend('uniform', 'normal');
end
function circleArea = monteCarlo(circleCenterAbscissa, circleCenterOrdinate, radius, amountOfPoints)
squaredRadius = radius^2;
sqaureArea = (2*radius)^2;
minSquareAbscisa = circleCenterAbscissa - radius;
maxSquareAbscisa = circleCenterAbscissa + radius;
minSquareOrdinate = circleCenterOrdinate - radius;
maxSquareOrdinate = circleCenterOrdinate + radius;
% generating array of random numbers in range [minSquareAbscisa, maxSquareAbscisa]
x = minSquareAbscisa + (maxSquareAbscisa - minSquareAbscisa).*rand(1, amountOfPoints);
% generating array of random numbers in range [minSquareOrdinate, maxSquareOrdinate]
y = minSquareOrdinate + (maxSquareOrdinate - minSquareOrdinate).*rand(1, amountOfPoints);
amountOfPointsBelongToCircle = 0;
for i = 1:amountOfPoints
if(((x(i) - circleCenterAbscissa)^2 + (y(i) - circleCenterOrdinate)^2) <= squaredRadius)
amountOfPointsBelongToCircle = amountOfPointsBelongToCircle +1;
end
end
circleArea = sqaureArea*amountOfPointsBelongToCircle/amountOfPoints;
end
function gamma = systemUptime(t)
path1 = min([t(1), t(2), t(5), t(7)]);
path2 = min([t(1), t(3), t(5), t(7)]);
path3 = min([t(1), t(4), t(6), t(7)]);
gamma = max([path1, path2, path3]);
end
P.S. Не лякайтесь, взагальному ця лабораторна робота теж дуже проста. Просто треба трошки розібратись.
P.S.S. Бажаю всім успіхів)