Movimiento ondulatorio |
Interferencia y difracción Tubo de Quincke Interferencia de las ondas producidas por dos fuentes (I) Interferencia de las ondas producidas por dos fuentes (II) Interferencia de las ondas producidas por varias fuentes Difracción producida por una rendija Interferencia más difracción
Difracción de Fresnel |
![]() |
|
En una página previa, hemos estudiado la difracción Fraunhofer producida por una rendija estrecha y larga. En la teoría de la difracción Fraunhofer, se supone que las ondas incidentes son normales al plano de la rendija, y que el observador se encuentra a una distancia grande en comparación con las dimensiones del obstáculo. En esta página, se muestra la difracción producida por una abertura rectangular y por una abertura circular. La deducción de las fórmulas de la intensidad debida a la difracción está fuera del propósito de este Curso Interactivo y se recomienda consultar el libro citado en las referencias. En los applets de las páginas anteriores, la intensidad se ha codificado en colores de la escala de grises. Los pixels (puntos) del área de trabajo del applet se han coloreado del siguiente modo:
En los dos applets de esta página, se simula que se toma una fotografía del obstáculo iluminado, con una exposición grande para registrar algunos de los detalles más débiles. Tomando la intensidad I(0) máxima registrada en el origen como la unidad, se asigna
Difracción producida por una abertura rectangularEn la figura, se muestra el obstáculo, una abertura rectangular de lados a y b y un punto P situado en una pantalla a una distancia R del obstáculo de coordenadas x e y.
La expresión de la intensidad I(x, y) registrada en el punto P debida a la difracción de ondas planas de longitud de onda λ por el obstáculo, es
Donde I(0) es la intensidad registrada en el origen x=0, y=0 de la pantalla ActividadesSe introduce
Se pulsa el botón titulado Dibuja |
Difracción producida por una abertura circularEn la figura, se muestra el obstáculo, una abertura circular de radio a, y un punto P situado en una pantalla a una distancia R del obstáculo. La recta que une el centro del círculo y el punto, forma un ángulo θ con el eje Z. La expresión de la intensidad I(x, y) registrada en el punto P debido a la difracción de ondas planas de longitud de onda λ por el obstáculo, es
Donde I(0) es la intensidad registrada en el origen de la pantalla Jn(α) es la función de Bessel de orden n. Máximos y mínimos
En la siguiente tabla, se proporcionan los primeros ceros de las funciones de Bessel J1(x) y J2(x).
Fuente: Puig Adam P., Curso teórico-práctico de ecuaciones diferencias aplicado a la Física y Técnica. Biblioteca Matemática (1950).pág. 156.
ActividadesSe pulsa el botón titulado Dibuja
|
Hecht E., Zajac A. Óptica. Addison-Wesley Iberoamericana (1977), págs. 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. Código en C adaptado por el autor al lenguaje Java
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]); } } } |