Advertisement
Frigorifico

My code

Nov 22nd, 2015
723
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.27 KB | None | 0 0
  1. function [ xs,ys,zs] = prog( ro,e0,alfa1,fi1,N,z )
  2. emed=0; %energía del medio
  3. %valores iniciales donde choca el rayo con la muestra
  4. xi=0.5;
  5. yi=0;
  6. zi=0.5;
  7. %vectores donde guardaremos todos los puntos
  8. xs=xi;
  9. ys=yi;
  10. zs=zi;
  11.  
  12. %estos valores serán usados para que cada fotón comience con los mismos
  13. %valores de alfa y fi, ya que los valores originales se pierden en el while
  14. alfaprime=alfa1;
  15. fiprime=fi1;
  16.  
  17. for i=1:N %número de fotones a simular
  18.     a=2;
  19.    
  20.     alfa1=alfaprime;
  21.     fi1=fiprime;
  22.    
  23.     while a>1
  24. %valores iniciales donde choca el rayo con la muestra
  25.  
  26. m=9.10938356*(10^-31); %masa del electron
  27. c=3*(10^8); %velocidad de la luz
  28. gamma=e0/(m*c^2);
  29.  
  30. re=2.82*(10^-15);
  31.  
  32. dsigkn=(((re^2)/2)/(1+gamma*(1-cos(alfa1))^2))*(1+((cos(alfa1))^2)+gamma^2*(1-((cos(alfa1))^2))/(1+gamma*(1-cos(alfa1))));
  33.  
  34. sigkn=2*pi*(re^2)*(((1+gamma)/gamma^2)*((2*(1+gamma)/(1+2*gamma))-(log(1+2*gamma))/gamma)+((log(1+2*gamma))/(2*gamma))-((1+3*gamma)/(1+2*gamma)^2));
  35.  
  36. re=2.82*(10^-15);
  37. fsc=(7.297352566)*(10^-3);
  38. f=fsc*z;
  39. fipe=4*pi*(re^2)*(f^4)*(z/gamma);
  40. if f>=0 && f<=0.05
  41.     sigpe=fipe*(1.008+(1.926/gamma)+(2.107/(gamma^2)))*1.079;
  42. else if f>=0.05 && f<=0.1
  43.         sigpe=fipe*(0.704+(1.647/gamma)+(1.592/(gamma^2)))*1.079;
  44.     else if  f>=0.1 && f<=0.15
  45.              sigpe=fipe*(0.604+(1.547/gamma)+(1.411/(gamma^2)))*1.092;
  46.         else if f>=0.15 && f<=0.20
  47.                 sigpe=fipe*(0.522+(1.46/gamma)+(0.985/(gamma^2)))*1.092;
  48.              else if f>=0.20 && f<=0.25
  49.                 sigpe=fipe*(0.455+(1.392/gamma)+(1.102/(gamma^2)))*1.102;
  50.                  end
  51.             end
  52.         end
  53.     end
  54. end
  55.  
  56. sig=(z*sigkn)+sigpe;
  57. c=z*sigkn/(sig);
  58.  
  59. disp('Ccccccc')
  60. disp(c)
  61.  
  62. r=rand;
  63. s=-log(r)/(sig*ro);
  64.  
  65. disp('S')
  66. disp(s)
  67. disp('Alfa1')
  68. disp(alfa1)
  69. disp('Fi1')
  70. disp(fi1)
  71.  
  72. b=2;
  73. criterio=0;
  74. x1=s*cos(fi1)*sin(alfa1)+xi;
  75. y1=s*sin(fi1)*sin(alfa1)+yi;
  76. z1=s*cos(alfa1)+zi;
  77. xi=x1;
  78. yi=y1;
  79. zi=z1;
  80. if (x1>1)||(y1>1)||(z1>1)
  81. disp('nuevo fotón porque el otro se salió')
  82. break
  83. end
  84. if (x1<0)||(y1<0)||(z1<0)
  85. disp('nuevo fotón porque el otro se salió')
  86.     break
  87. end
  88. r2=rand;
  89. %se decide que clase de efecto ocurre y los valores correspondientes
  90.  
  91. if (0<r2)&&(r2<c)
  92.                 r=rand;
  93.                 fi=2*pi*r;
  94.                 ry=20;
  95.                 p=0;
  96.                    while ry>p
  97.                        rx=pi*rand;
  98.                        p=dsigkn*sin(rx)*2*pi;
  99.                        ry=7*(10^-29)*rand;
  100.                    end
  101.                    alfa=rx;
  102. else
  103.    emed=e0+emed;
  104.    b=0; %se sale del while
  105. end
  106.  
  107. a=b;
  108. if a==0
  109. disp('nuevo fotón porque el anterior fue absorbido')    
  110. break
  111. end
  112. %lo que sigue es evaluar los ángulos de la nueva trayectoria si es que
  113. %ocurrió compton
  114.  
  115. %con esto se calculan los ángulos de rebote, que usaremos para repetir el
  116. %proceso
  117. alfa2=acos(cos(alfa1)*cos(alfa)+sin(alfa1)*sin(alfa)*cos(fi));
  118. disp('Alfa2')
  119. disp(alfa2)
  120. fi2=fi1+asin((sin(alfa)*sin(fi))/sin(alfa2));
  121. disp('Fi2')
  122. disp(fi2)
  123. alfa1=alfa2;
  124. fi1=fi2;
  125. disp('Siguiente Alfa1')
  126. disp(alfa1)
  127. disp('Siguiente Fi1')
  128. disp(fi1)
  129.  
  130. ef=e0/(1+gamma*(1-cos(alfa1))); %energ{ia del fotón reflejado
  131. tmax=e0*(2*gamma/(1+2*gamma)); %máxima energía transferida al electrón
  132. emed=tmax-ef+emed;
  133. e0=ef;  
  134.      end
  135. end
  136.  
  137. scatter(xs,ys)
  138.  
  139. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement