Explicación física del problema
El problema que se nos planteaba era ver como se propaga una onda electromagnética en el espacio, de tres dimensiones. Para ello contábamos con las ecuaciones de Maxwell de las que se deduce que cambios temporales en el campo magnético producen cambios espaciales en el campo eléctrico
En un sistema de coordenadas de tres dimendiones tenemos un campo eléctrico en la dirección del eje x , y un campo magnético en la dirección del eje y.
Para solucionar el problema dividimos el eje z, que tiene una longitud L en N partes iguale, cada una de esas partes tendrá una longitud dz.Vamos a calcular el campo eléctrico en cada instante en los puntos del 0 al i, es decir:zE1,zE2,...,zEi. Inicialmente le asignamos al campo eléctrico en todos los puntos el valor 0.
También hemos dividido el eje z tal que los intervalos tienen la misma longitud que antes, dz, de manera que tenemos localizados los puntos donde queremos calcular el campo magnetico entre los puntos donde queremos calcular el campo eléctrico. E inicialmente le asignamos alcampo magnético en todos los puntos 0
En la página de inicialización hemos puesto:
for(int i=0; i<=N;i++){
zE[i]=i*dz;
Ex[i]=0;
}
for(int i=0; i<N;i++){
zB[i]=(i+0.5)*dz;
By[i]=0;
}
Ahora que
ya tengo las condiciones iniciales, viene el proceso de
propagación de los campos. Vamos a calcular los campos en
cada punto
según avance el tiempo utilizando las ecuaciones de Maxwell.
Para calcular el campo magnético en cada punto utilizamos la ley
de Faraday, que nos dice que cambios espaciales o de magnitud del campo
eléctrico, provocan la aparición de un campo
magnético, que depende de las variaciones del campo
eléctrico.
Como en nuestro caso sólo tenemos campo eléctrico en la dirección x, sería: ∂ Ex /∂z = -∂By/ ∂t
En vez de tomar diferenciales tomamos intervalos: ∆ Ex /∆z = -∆By/ ∆t
y entonces la ley de
Y como nosotros los estamos haciendo con intervalos la formúla quedaría como:
En la página de evolución tenemos:
t=t+dt;
Ex[0]=A*Math.sin(5.*t);
for(int i=0;i<N;i++){
By[i]=By[i]- ((Ex[i+1]-Ex[i]) * (dt/dz));
}
EN1=Ex[N-1];
for(int i=0;i<N-1;i++){
Ex[i+1]=Ex[i+1]- ((By[i+1]-By[i]) * dt*c*c/dz);
Ex[N]=Ex[N]-(Ex[N]-EN1)*dt*c/dz;
}