Uhinak |
Interferentzia eta difrakzioa Quincke-ren hodia Uhinen interferentzia bi iturrirekin (I) Uhinen interferentzia bi iturrirekin (II) Uhinen interferentzia zenbait iturrirekin Zirrikitu lineal batek sortutako difrakzioa Interferentzia gehi difrakzioa
Fresnelen difrakzioa |
![]() |
|
Aurreko orri batean aztertzen da zirrikitu lineal batek sortutako difrakzioa (estua eta luzea), Fraunhofer-en baldintzetan. Fraunhofer-ek garatutako teorian, uhinek zirrikitua erasotzen dute zirrikituaren planoarekiko perpendikularki, eta behatzailea oso urruti kokatzen da oztopoaren neurriekin konparatuta. Honako orri honetan, berriz, Fraunhofer-en baldintzatan jarraituko dugu, baina irekigunearen forma laukizuzena edota zirkularra izango da. Intentsitate erresultantearen formulak lortzeko garapen matematikoa kurtso honen mailatik gora dago, eta erreferentzietan aipatzen den liburuan datoz zehazki azalduta. Aurreko kapituluetako programetan bezalaxe, pixel bakoitzari dagokion intentsitate erresultantea gris-eskalan kodetu dugu, honelako irizpidearekin:
Kapitulu honetako bi programetan oztopoaren argazki bat simulatzen da, betiere esposizio-denbora luzeaz, horrela xehetasun ahulenak ere indartu eta bereizi ahal izateko. Intentsitaterako unitate gisa, I(0) hartzen da, jatorrian lortzen den intentsitate erresultantea, alegia, intentsitate maximoa, eta gainontzeko pixelei gris-eskala honela aplikatzen zaie:
Irekigune laukizuzenak sortutako difrakzioaIrudiak irekigunea erakusten du, a eta b aldeetako laukizuzena, eta oztopo horretatik R distantziara, pantaila batean, P puntuaren posizioak x eta y koordenatuak ditu. Uhinak ezkerretik erasotzen du.
Hona hemen pantailara iritsiko den I(x, y) intentsitate erresultantearen adierazpena, P puntuaren posizioaren menpe eta uhinaren λ uhin-luzeraren menpe:
I(0), pantailako jatorrira iristen den intentsitatea da, alegia, x=0, y=0 posizioan. SaiakuntzaAukeran idatz daiteke:
Irudia botoia klikatu. |
Irekigune zirkularrak sortutako difrakzioaIrudiak irekigunea erakusten du, a erradiodun zirkulua, eta oztopo horretatik R distantziara, pantaila batean, P puntuaren posizioak x eta y koordenatuak ditu. Uhinak ezkerretik erasotzen du. Zirkuluaren zentroa eta P puntua lotzen dituen zuzenak Z ardatzarekin θ angelua osatzen du. Hona hemen pantailara iritsiko den I(θ) intentsitate erresultantearen adierazpena, P puntuaren θ posizio angeluarraren menpe eta uhinaren λ uhin-luzeraren menpe:
I(0), pantailako jatorrira iristen den intentsitatea da, alegia, θ=0 posizioan. Jn(α) Bessel-en funtzioa da, n ordenakoa. Maximo eta minimoak
Ondoko taulak Bessel-en J1(x) eta J2(x) funtzioen lehen zeroak ematen ditu
Jatorria: Puig Adam P., Curso teórico-práctico de ecuaciones diferenciales aplicado a la Física y Técnica. Biblioteca Matemática (1950) 156 or.
SaiakuntzaIrudia botoia klikatu.
|
Hecht E., Zajac A. Óptica. Addison-Wesley Iberoamericana (1977), pp. 369-379
Press W. H., Teukolsky S. A., Vetterling W. T., Flannery B. P. Numerical Recipes in C, Second edition, Special functions. Bessel functions of integer order Chapter 6º. pp. 230. Cambridge University Press. Autoreak programazio-kodea C lengoaiatik Java lengoaiara egokitu du
public abstract class Raiz { private final double CERO=1e-10; private final double ERROR=0.0001; private final int MAXITER=100; protected final int MAXRAICES=20; protected double raices[]=new double[MAXRAICES]; protected int iRaiz=0; protected double puntoMedio(double a, double b)throws RaizExcepcion{ double m, ym; int iter=0; do{ m=(a+b)/2; ym=f(m); if(Math.abs(ym)<CERO) break; if(Math.abs((a-b)/m)<ERROR) break; if((f(a)*ym)<0) b=m; else a=m; iter++; }while(iter<MAXITER); if(iter==MAXITER){ throw new RaizExcepcion("No se ha encontrado una raíz"); } return m; } private void explorar(double xIni, double xFin, double dx){ double y1, y2; iRaiz=0; y1=f(xIni); for(double x=xIni; x<xFin; x+=dx){ y2=f(x+dx); //Uno de los extremos del intervalo es raíz if(Math.abs(y1)<CERO && iRaiz<MAXRAICES){ raices[iRaiz++]=x; y1=y2; continue; } //no hay raíz en este intervalo if(y1*y2>=0.0){ y1=y2; continue; } //hay una raíz en este intervalo if(iRaiz<MAXRAICES){ try{ raices[iRaiz]=puntoMedio(x, x+dx); iRaiz++; }catch(RaizExcepcion ex){ System.out.println(ex.getMessage()); } } y1=y2; } } public double[] hallarRaices(double ini, double fin, double paso){ explorar(ini, fin, paso); double solucion[]=new double[iRaiz]; for(int i=0; i<iRaiz; i++){ solucion[i]=(double)Math.round(raices[i]*1000)/1000; } return solucion; } abstract protected double f(double x); } class RaizExcepcion extends Exception { public RaizExcepcion(String s) { super(s); } } public class Maximos extends Raiz { protected double f(double x){ return bessj1(x); } private double bessj1(double x){ //Returns the Bessel function J1(x) for any real x. double ax,z; double xx,y,ans,ans1,ans2; //Accumulate polynomials in double precision. if ((ax=Math.abs(x)) < 8.0) { //Direct rational approximation. y=x*x; ans1=x*(72362614232.0+y*(-7895059235.0+y*(242396853.1+y*(-2972611.439+ y*(15704.48260+y*(-30.16036606)))))); ans2=144725228442.0+y*(2300535178.0+y*(18583304.74+y*(99447.43394+y*(376.9991397+y*1.0)))); ans=ans1/ans2; } else { //Fitting function (6.5.9). z=8.0/ax; y=z*z; xx=ax-2.356194491; ans1=1.0+y*(0.183105e-2+y*(-0.3516396496e-4+y*(0.2457520174e-5+y*(-0.240337019e-6)))); ans2=0.04687499995+y*(-0.2002690873e-3+y*(0.8449199096e-5+ y*(-0.88228987e-6+y*0.105787412e-6))); ans=Math.sqrt(0.636619772/ax)*(Math.cos(xx)*ans1-z*Math.sin(xx)*ans2); if (x < 0.0) ans = -ans; } return ans; } } public class Minimos extends Raiz { protected double f(double x){ return bessj0(x); } private double bessj0(double x){ //Returns the Bessel function J0(x) for any real x. double ax,z; double xx,y,ans,ans1,ans2; //Accumulate polynomials in double precision. if ((ax=Math.abs(x)) < 8.0) { //Direct rational function t. y=x*x; ans1=57568490574.0+y*(-13362590354.0+y*(651619640.7+y*(-11214424.18+y*(77392.33017+ y*(-184.9052456))))); ans2=57568490411.0+y*(1029532985.0+y*(9494680.718+y*(59272.64853+y*(267.8532712+y*1.0)))); ans=ans1/ans2; } else { //Fitting function (6.5.9). z=8.0/ax; y=z*z; xx=ax-0.785398164; ans1=1.0+y*(-0.1098628627e-2+y*(0.2734510407e-4 +y*(-0.2073370639e-5+y*0.2093887211e-6))); ans2 = -0.1562499995e-1+y*(0.1430488765e-3 +y*(-0.6911147651e-5+ y*(0.7621095161e-6-y*0.934935152e-7))); ans=Math.sqrt(0.636619772/ax)*(Math.cos(xx)*ans1-z*Math.sin(xx)*ans2); } return ans; } } public class Difraccion { public static void main(String[] args) { double[] raices=new Maximos().hallarRaices(0.0, 30.0, 1.0); System.out.print("Máximos"); for(int i=0; i<raices.length; i++){ System.out.print(" "+raices[i]); } System.out.println(""); raices=new Minimos().hallarRaices(0.0, 30.0, 1.0); System.out.print("Mínimos"); for(int i=0; i<raices.length; i++){ System.out.print(" "+raices[i]); } } } |