Anterior

Procedimiento numérico

Código para calcular el coeficiente de transmisión

Las clases auxiliares Complejo, CMatriz2x2, CVector2 tienen el mismo código que en Sólido lineal

public class Solido {
     int N;       //número de barreras
     static final int MAXBARRERAS=9;     //máximo número de barreras
     double a=2.0;    //separación entre barreras
     double b=1.0;    //anchura de la barrera
     static final double ALTURA=5.0; //altura de la barrera constante
     static double MAXENERGIA=10.0;
     double x[];    //puntos de discontinuidad de la función potencial
     double V[];       //función potencial
     Complejo q[];
     CVector2 Coef[]; //coeficientes para la función de onda
     double Lmax;       //máxima longitud de la representación
 
  public Solido(int N, double a, double b){
     this.N=N;
     this.a=a;   //separación entre barreras
     this.b=b;   //anchura de la barrera
     x=new double[2*N+2];
     V=new double[2*N+2];
     q=new Complejo[2*N+2];
     Coef=new CVector2[2*N+2];
     Lmax=(MAXBARRERAS+2)*2.0+(MAXBARRERAS+1)*1.0;     
     for(int j=0; j<2*N+1; j++){
          q[j]=new Complejo();
     }
     for(int j=0; j<2*N+1; j++){
          Coef[j]=new CVector2();
     }
//puntos de discontinuidad
     x[0]=-Lmax/2;
     x[2*N+1]=Lmax/2;
     x[1]=-N/2*b-((N-1)/2)*a;
     if(N%2==1){
          x[1]-=b/2;
     }else{
          x[1]-=a/2;
     }
     x[2*N]=-x[1];
     for(int j=2; j<2*N; j+=2){
          x[j]=x[j-1]+b;
          x[j+1]=x[j]+a;
     }
//potenciales
     for(int j=0; j<2*N+1; j+=2){
          V[j]=0.0;
          if(j==2*N)     break;
          V[j+1]=ALTURA;
     }
 }
//calcula el coeficiente de transmisión
 double calcular(double E){
     CVector2 X=new CVector2(new Complejo(1.0, 0), new Complejo());
     Coef[2*N]=X;
     CMatriz2x2 R=new CMatriz2x2();
     CMatriz2x2 I=new CMatriz2x2();
     for(int j=0; j<2*N+1; j++){
          q[j]=Complejo.csqrt(E-V[j]);
     }
     int j=2*N;
     while(j>0){
          I.inversa(q[j-1], x[j]);
          R.matriz(q[j], x[j]);
          X=CMatriz2x2.producto(I, CMatriz2x2.producto(R, X));
          Coef[j-1]=X;
          j--;
     };
//coeficiente de trasnmisión
     double trans=1.0/Coef[0].a.modulo();
//normaliza los coeficientes, asignado módulo 1
// a la amplitud de la onda incidente double norma=Math.sqrt(Coef[0].a.modulo()); for(j=0; j<2*N+1; j++){ Coef[j]=CVector2.cociente(Coef[j], norma); } return trans; } }
Anterior