Difracción Fraunhofer  producida por una abertura rectangular y circular

prev.gif (1231 bytes)home.gif (1232 bytes)next.gif (1211 bytes)

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
marca.gif (847 bytes)Difracción abertura
rectangular y circular
Difracción de Fresnel

Difracción producida por una abertura rectangular

Difracción producida por una abertura circular

Referencias

Código fuente

 

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:

  • Se asigna el color blanco a un píxel que registra la máxima intensidad.

  • El color negro cuando registra una intensidad nula.

  • A una intensidad intermedia, le corresponde un color de la escala de grises comprendido entre el blanco y el negro.

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

  • el color blanco a un píxel que registre una intensidad igual o superior a 0.01.

  • el color negro, si registra una intensidad cero, 

  • un color de la escala de grises entre el blanco y el negro, si la intensidad es mayor que cero y menor que 0.01.

 

Difracción producida por una abertura rectangular

En 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

Actividades

Se introduce

  • La longitud del lado b, en el control de edición titulado Lado b

  • La longitud del lado a, se ha fijado en a=1.0

Se pulsa el botón titulado Dibuja

 

 

Difracción producida por una abertura circular

En 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

  • Los máximos de intensidad se producen cuando

Las funciones de Bessel tiene la siguiente relación de recurrencia

Aplicando esta propiedad a la función J1(α)

Se concluye que los máximos secundarios de intensidad son los ceros de la función de Bessel J2(α).

J2(α)=0

  • Los mínimos de intensidad son los ceros de la función de Bessel J1(α).

J1(α)=0

Ahora bien J1(α) presenta un cero para α=0, y este corresponde a un máximo de intensidad, ya que

En la siguiente tabla, se proporcionan los primeros ceros de las funciones de Bessel J1(x) y J2(x).

J1(x)

 J2(x)

3.8317

5.1356

7.0156

8.4172

10.1735

11.6198

13.3237

14.7960

16.4706

17.9598

196159

21.1170

22.7601

24.2701

25.9037

27.4206

29.0468

30.5692

32.1897

33.7165

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.

 

Actividades

Se pulsa el botón titulado Dibuja

 

 

Referencias

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

 

Código fuente

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]);
	}
}
}