Вы находитесь на странице: 1из 2

% �������� �������������� �������

function[Er,wx,wy,wz]=kompton(Er,wx,wy,wz)
al=Er/0.511;
flag=0;%������������
Ek=0;
Emin=0.01;
wxk=0;
wyk=0;
wzk=0;
%����� ����
while flag==0
rnd6=rand(1);
rnd7=rand(1);
rnd8=rand(1);
if rnd6<=((1+2*al)/(9+2*al))
Xk=1+2*al*rnd7;
if rnd8<=(4*((1/Xk)-(1/Xk^2)))
Ek=Er/Xk;
flag=1;
else
flag=0;
end;
else
Xk=(1+2*al)/(1+2*al*rnd7);
if rnd8<=(((1-Xk+al)^2)/(2*al^2))+(1/(2*Xk))
Ek=Er/Xk;
flag=1;
else
flag=0;
end;
end;
end;
%�������� ���� ������ ���������� �����-������
mu=1-(0.511/Ek)+(0.511/Er);
% ����� ��. ��� ��������
% while flag==2
% rnd9=rand(1);
% rnd10=rand(1);
% rnd11=rand(1);
% if rnd9^2+rnd10^2<=1
% cos(fi)=(rnd9^2-rnd10^2)/(rnd9^2+rnd10^2);
% sin(fi)=2*rnd9*rnd10/(rnd9^2+rnd10^2)*sign(0.5-rnd11);
% cosin=(rnd9^2-rnd10^2)/(rnd9^2+rnd10^2);
% sinus=2*rnd9*rnd10/(rnd9^2+rnd10^2)*sign(0.5-rnd11);
% flag=3;
% else
% flag=2;
% end;
% end;
% % ����������� ������������� �� ����������
fi=2*pi*rand(1);
wxk=((sqrt(1-mu^2)/sqrt(1-wz^2))*(-wy*sin(fi)+wx*wz*cos(fi)))+wx*mu;
wyk=((sqrt(1-mu^2)/sqrt(1-wz^2))*(wy*wz*cos(fi)+wx*sin(fi)))+wy*mu;
wzk=(-sqrt(1-mu^2)*sqrt(1-wz^2)*cos(fi))+wz*mu;

% ������ �� �������
if Ek>Emin
Er=Ek;
wx=wxk;
wy=wyk;
wz=wzk;
else
% ��������� �� �����, � ����������� �������� ������ ������ ������
Er=Ek;
wx=wxk;
wy=wyk;
wz=wzk;
end;