Facebook
From Capacious Hog, 7 Years ago, written in Python.
This paste is a reply to Untitled from Perl Agouti - view diff
Embed
Download Paste or View Raw
Hits: 385
  1. from math import cos,sin,pi,sqrt
  2. import matplotlib.pyplot as plt
  3.  
  4. def simpson(xl, xr, ndiv, fun): #liczy całke
  5.         h=(xr-xl)/ndiv/2.
  6.         integ=0.
  7.         for i in range(0,ndiv):
  8.                 integ=integ+2.*h*(fun(xl+i*2.*h)+4.*fun(xl+i*2.*h+h)+fun(xl+i*2.*h+2*h))/6.
  9.         return integ
  10.  
  11. def real_amp(x):
  12.         r=sqrt(d*d+(y-x)**2)
  13.         return ampl*cos(k*r)/(sqrt(r))
  14.  
  15. def imag_amp(x):
  16.         r=(d*d+(y-x)**2)**(1./2.)
  17.         return ampl*sin(k*r)/(sqrt(r))
  18.  
  19.  
  20.  
  21. ndiv=100 #kroki w simpsonie
  22. ampl=1. #amplituda
  23. lmbd=2 #długosc fali
  24. k=2.*pi/lmbd #liczba falowa
  25.  
  26. a=1. #polozenie szczelin
  27. d=20. #odleglosc
  28. yl=-30.
  29. yr=30.
  30. ny=1000 #dokładnosc sumowana amplitudy
  31.  
  32.  
  33.  
  34. hy=(yr-yl)/(ny-1)
  35.  
  36. yarr=[] #os
  37. iarr=[] #ampiltuda z pierwszej szczeliny
  38. jarr=[] #ampiltuda z drugiej szczeliny
  39. karr=[] #suma amplitud
  40.  
  41. for iy in range(1,ny):
  42.     y=yl+(iy-1.)*hy
  43.     yarr.append(y)
  44.     i=simpson(-5.*a,-3.*a,ndiv,real_amp)+simpson(-5.*a,-3.*a,ndiv,imag_amp)
  45.     j=simpson(3.*a,5*a,ndiv,real_amp)+simpson(3.*a,5.*a,ndiv,imag_amp)
  46.  
  47.     iarr.append(i)
  48.     jarr.append(j)
  49.     #yarr.append(y)
  50.     karr.append((i+j)**2) #natezenie
  51.    
  52. #n=2
  53.    
  54. #for p in range(0,ny-1):
  55. #    k=0
  56.  #   k=k+(iarr[p]+jarr[p])
  57.  #   karr.append(k)
  58.    
  59.  
  60. plt.xlabel("odleglosci")
  61. plt.title("Dyfrakcja na dwoch szczelinach")    
  62. plt.plot(yarr,karr)
  63.  
  64.  
  65.