3. Iндивiдуальне завдання
Дослідити проходження фотона крізь мутне середовище (бродіння):
1)Згенерувати рандомну кількість частинок
2) Обчислити математичне сподiвання, дисперсiю, середньоквадратичне вiдхилення.
3) Обчислити частоти значень випадкової величини (побудувати гiстограму)
4) Перевiрити на нормальний розподiл.
5) Побудувати обвідну гістограму
6)Побудувати теоретичну криву проходження фотонів
4. Хiд виконання та результати роботи
Робота була виконана у середовищi MatLab. Код програми:
clear all;
close all;
%Згенеруємо тисячу фотонів та збережемо їх координати
N = 1000;
X = zeros(1,1000);
Y = zeros(1,1000);
for i=1:N
[res, code] = photon(0,0);
X(1,i) = res(length(res),1);
Y(1,i) = res(length(res),2);
end
%Будуємо графіки вибірок їх середні значення та середньоквадратичні
%відхилення
hold on
plot(X,'g')
plot([0 1000],[mean(X) mean(X)])
plot([0 1000],[mean(X)+std(X) mean(X)+std(X)],'--')
plot([0 1000],[mean(X)-std(X) mean(X)-std(X)],'--')
xlabel('n');
ylabel('X');
legend('mean','mean+std','mean-std');
figure
hold on
plot(Y,'g')
plot([0 1000],[mean(Y) mean(Y)])
plot([0 1000],[mean(Y)+std(Y) mean(Y)+std(Y)],'--')
plot([0 1000],[mean(Y)-std(Y) mean(Y)-std(Y)],'--')
xlabel('n');
ylabel('Y');
legend('mean','mean+std','mean-std');
figure
hold on
plot([X Y],'g')
plot([0 2000],[mean([X Y]) mean([X Y])])
plot([0 2000],[mean([X Y])+std([X Y]) mean([X Y])+std([X Y])],'--')
plot([0 2000],[mean([X Y])-std([X Y]) mean([X Y])-std([X Y])],'--')
xlabel('n');
ylabel('X, Y');
legend('mean','mean+std','mean-std');
%Будуємо гістограми
figure
hist(X)
xlabel('X');
ylabel('n');
figure
hist(Y)
xlabel('Y');
ylabel('n');
figure
hist([X Y])
xlabel('X,Y');
ylabel('n');
%Перевірка розподілу на нормальність
[h, p] = chi2gof(X)
[h, p] = chi2gof(Y)
[h, p] = chi2gof([X Y])
function [ res, code ] = photon(x0,y0)
h = 15;%товщина шару
mus = 0.1;
T = @(x) x > h; % Перевірка пропускання
alpha = @(P) P < 0.05; % Перевірка Поглинання
R = @(x) x<0; % Перевірка Відбиття
i = 2;
x = x0;
y = y0;
P = 1;
res = [x0 y0];
while not(R(x) || T(x) || alpha(P)) % Перевірте умови
res(i,1) = x;
res(i,2) = y;
P = -log(rand())/mus;
phi = 2 * pi * rand();
x = x + P * cos(phi);
y = y + P * sin(phi);
i = i + 1;
end
res(i,1) = x;
res(i,2) = y;
if R(x)
code = 1;
elseif T(x)
code = 2;
elseif alpha(P)
code = 3;
end
end
Рис.
1 – Графік
пропускання фотона
Рис. 2 – Графік поглинання фотона
Рис. 3 – Графік відбиття фотона
Рис.4 – Гістограма пропускання фотона
Рис.5 – Гістограма поглинання фотона
Рис.6 – Гістограма відбиття фотона
Перевірка розподілу на нормальність:
h =1
p = 2.0805e-017
h =1
p =4.2190e-022
h =1
p =1.2263e-017
Отже, можемо зробити висновок, що коефіцієнт поглинання фотонів є найменшим, а коефіцієнт відбиття та пропускання близькі за значенням. Тому можемо сказати,що при таких рандомних значеннях умов, середовище має великий коефіцієнт прозорості.
Робота була виконана у середовищi MatLab. Код програми:
clc
N=100; %кількість експериментів
Nphotons=1e3;% загальна кількість падаючих фотонів
Nexperiment=100;
for k=1:N
mu_a=10; mu_s=90; %mu_a - Коефіцієнт поглинання
albedo=mu_s/(mu_s+mu_a); %mu_s - Коефіцієнт пружного розсіяння
mfpl=1/(mu_s+mu_a); %Cередня відстань вільного пробігу фотона
mt=mu_s+mu_a; % Транспортний коефіцієнт взаємодії фотонів з центрами розсіяння
maxZ=0.02;
ns=50;% Максимальна кількість росіювання фотонів
g=0.75; % Параметр анізотропії
Reflected=0;
Translimitted=0;
Absorbed=0;
for i=1:Nphotons
z=0;% Первісна глибина
muz = 1;% Напрямок падаючого світла
w= 1;% Початкова вага фотона
for j=1:ns
s=-log(rand(1))/(mt);% Геометрична довжина шляху
z=z+muz*s; % Рух фотону
if(rand(1)>albedo)
Absorbed= Absorbed+1;
break
end
if(z<0)
Reflected=Reflected+1;
break
end
if(z>maxZ)
Translimitted=Translimitted+1;
break
end % Кількість фотонів, що виходять з вершини
if g>0
temp=(1-g.^2)/(1-g+2*g*rand(1));
theta = acos((1+g.^2-temp.^2)/(2*g));
else
theta= acos(2*rand(1)-1);
end
phi=2*pi*rand(1);
muz= -sin(theta)*cos(phi)*sqrt(1-((muz)*(muz)))+muz*cos(theta);
w=w*albedo;% Поглинання частини пакета фотонів
end
end
% Нормалізований результат
R(k)=Reflected/Nphotons;
T(k)=Translimitted/Nphotons;
a(k)=Absorbed/Nphotons;
end
y=1:1:Nexperiment;
Mean_R=sum(R(y))/Nexperiment;% Середнє відображення
FR=(R(y)-Mean_R).^2;
Std_RR=sum(FR)/Nexperiment;% STD відображення
figure
plot(y,R(y),'black',y,Mean_R,'o',y,Mean_R+sqrt(Std_RR),'x',y,Mean_R-sqrt(Std_RR),'*');
hold on
axis([0,100,0.06,0.12])
legend('coeff.R','meam R','mean r+std R','mean r+std R')
figure
alpha=95;% Довірчий вітсоток
[p S]=polyfit(y,R(y),1);
[Y,DELTA]=polyconf(p,R(y),S,1-(alpha/100));% поліномінальна оцінка і довірчий інтервал оцінки.
A=mean (Y-DELTA); % Мінімальний ліміт
B=mean(Y+DELTA); % Максимальний ліміт
[n,xout]=hist(R(y),50);
histfit(R(y),50,'kernel'); % Теоретична крива
hold on
xval=0:0.1:max(n);
plot(A,xval,'*',B,xval,'*');
hold off;
legend('Experimental distr.','Theoretical dist.',strcat('confidence interval, %=',num2str(alpha)))
Рис.7 – Побудова теоретичної кривої відбиття фотона в середовищі
Рис.8– Побудова обвідної гістограми
