Otros pozos rectangulares de potencial
Pozo de potencial asimétrico (I)

Consideremos un pozo de potencial rectangular de anchura a y profundidad V0, descrito por la función V(x)
Estudiamos la solución de la la ecuación de Schrödinger independiente del tiempo para energías E<V0
En la región I
En la región II
En x=0, el potencial es infinito, por lo que
Cuando x→∞ el primer término se hace muy grande, por lo que el coeficiente D deberá anularse, D=0
La función de onda en las regiones I y II es
Niveles de energía
La función de onda y su derivada primera es continua en x=a
Eliminando A y D de este sistema homogéneo, obtenemos una la ecuación transcendente que determina los niveles de energía permitidos
Establecemos un sistema de unidades tal que ℏ=m=1. La ecuación transcendente se escribe en términos de la energía E
La altura del pozo rectangular asimétrico es V0=5 y la anchura a=3. Utilizamos la función 
function semi_1
    V0=5; %altura
    a=3; %anchura
    f=@(E) sqrt(2*V0-2*E).*sin(sqrt(2*E)*a)+sqrt(2*E).*cos(sqrt(2*E)*a);
    x=linspace(0,V0, 20);
    rr=raices(f,x);
    disp(rr)
    %potencial
    xx=[-0.1, 0, 0, a, a, 2*a, 2*a, -0.1, -0.1];
    yy=[V0+1, V0+1, 0, 0, V0, V0, -0.1, -0.1, V0+1];
    fill(xx,yy, [0.5 0.5 0.5])
    %niveles de energía
    for E=rr
        line([0,a+1],[E,E],'color','b')
        text(a, E,num2str(E),'VerticalAlignment','bottom', 'HorizontalAlignment'
,'right')
   end
    xlabel('')
    ylabel('E')
    title('Niveles de energía')
    function r = raices(f, x)
        y=f(x);
        indices=find(y(1:end-1).*y(2:end)<0);
        r=zeros(1,length(indices));
        for k=1:length(indices)
            r(k)=fzero(f, [x(indices(k)), x(indices(k)+1)]);
        end
    end
end
 	
Funciones de onda
La continuidad de la función de onda en x=a relaciona los coeficientes D y A
La función de onda en las regiones I y II es
El coeficiente A se calcula de modo que
Representamos las funciones de onda correspondientes a los tres niveles de energía
function semi
    V0=5; %altura
    a=3; %anchura
    %niveles de energía
    f=@(E) sqrt(2*V0-2*E).*sin(sqrt(2*E)*a)+sqrt(2*E).*cos(sqrt(2*E)*a);
    x=linspace(0,V0, 20);
    rr=raices(f,x);
    %funciones de onda
    hold on
    for E=rr
       q=sqrt(2*V0-2*E);
       k=sqrt(2*E);
       A=1/sqrt(2*(a-sin(2*k*a)/(2*k)+sin(k*a)^2/q));
       f1=@(x) 2*A*sin(k*x);
       f2=@(x) 2*A*sin(k*a)*exp(q*a)*exp(-q*x);
       fplot(f1,[0,a])
       fplot(f2,[a,2*a])
    end
    hold off
    grid on
    xlabel('x')
    ylabel('\Phi(x)')
    title('Funciones de onda')
    function r = raices(f, x)
        y=f(x);
        indices=find(y(1:end-1).*y(2:end)<0);
        r=zeros(1,length(indices));
        for k=1:length(indices)
            r(k)=fzero(f, [x(indices(k)), x(indices(k)+1)]);
        end
    end
end 
     	
Pozo de potencial asimétrico (II)

Consideremos un pozo de potencial de altura infinita
Estudiamos las soluciones de la la ecuación de Schrödinger independiente del tiempo
primero para E<V0 y a continuación, para E>V0
Energía, E<V0
En la región I
En la región II
Niveles de energía
En x=-a, el potencial es infinito
En x=b, el potencial es infinito
La función de la función de onda y su derivada primera son continuas en x=0
Tenemos un sistema homogéneeo de cuatro ecuaciones con cuatro incógnitas
El determinante de los coeficientes es cero
Después de un largo proceso de simplificación, obtenemos la ecuación transcendente
Energía, E>V0
En la región I
En la región II
La misma solución
Niveles de energía
En x=-a, el potencial es infinito
En x=b, el potencial es infinito
La función de la función de onda y su derivada primera son continuas en x=0
Tenemos un sistema homogéneeo de cuatro ecuaciones con cuatro incógnitas
El determinante de los coeficientes es cero
Después de un largo proceso de simplificación, obtenemos la ecuación transcendente
Establecemos un sistema de unidades tal que ℏ=m=1.
Representamos la función potencial V(x) y los niveles de energía para a=b=3 y V0=20.
function caja_asimetrica
    V0=20; %altura
    a=3; %dimesiones
    b=3;
    q=@(E) sqrt(V0-E);
    k=@(E) sqrt(E);
    f=@(E) exp(q(E)*b).*(k(E).*cos(k(E)*a)+q(E).*sin(k(E)*a))+
exp(-q(E)*b).*(-k(E).*cos(k(E)*a)+q(E).*sin(k(E)*a));
    x=linspace(0,V0, 50);
    r1=raices(f,x);
    disp(r1)
    q=@(E) sqrt(E-V0);
    f=@(E) q(E).*(sin(k(E)*a).*cos(q(E)*b))+k(E).*(sin(q(E)*b).*cos(k(E)*a));
    x=linspace(V0, 30,20);
    r2=raices(f,x);
    disp(r2)
    %potencial
    xx=[-0.1-a,-0.1-a, -a, -a, 0, 0, b, b, b+0.1, b+0.1];
    yy=[-0.1, V0+10, V0+10, 0, 0, V0, V0, V0+10, V0+10,-0.1];
    fill(xx,yy, [0.5 0.5 0.5])
    ylim([-0.1,V0+10])
    %niveles de energía
    for E=r1
        line([-a,1],[E,E],'color','b')
        text(-a-0.3, E,sprintf('%1.3f',E),'VerticalAlignment','bottom', 
'HorizontalAlignment','right')
   end
    for E=r2
        line([-a,b],[E,E],'color','b')
        text(-a-0.3, E,sprintf('%1.3f',E),'VerticalAlignment','bottom', 
'HorizontalAlignment','right')
    end
    axis off
    xlabel('')
    ylabel('E')
    title('Niveles de energía')
    function r = raices(f, x)
        y=f(x);
        indices=find(y(1:end-1).*y(2:end)<0);
        r=zeros(1,length(indices));
        for s=1:length(indices)
            r(s)=fzero(f, [x(indices(s)), x(indices(s)+1)]);
        end
    end
end 
         	
0.9487 3.7809 8.4439 14.7763 20.8357 22.3363 24.9302 29.2372
Funciones de onda
Vamos a representar las funciones de onda correspondientes a los niveles de energía en cada uno de los dos casos, E<V0 y E>V0. Para ello, tenemos que relacionar los coeficientes B, C y D con el coeficiente A. El coeficiente A se calcula de modo que
Correspondientes a los niveles de energía, E<V0
Calculamos la integral
Expresamos los coeficientes B, C y D en términos de A
El resultado es
Representamos las funciones de onda correspondientes a los tres primeros niveles de energía, E<V0
function caja_asimetrica_1
    V0=20; %altura
    a=3; %dimesiones
    b=3;
    q=@(E) sqrt(V0-E);
    k=@(E) sqrt(E);
    f=@(E) exp(q(E)*b).*(k(E).*cos(k(E)*a)+q(E).*sin(k(E)*a))+
exp(-q(E)*b).*(-k(E).*cos(k(E)*a)+q(E).*sin(k(E)*a));
    x=linspace(0,V0, 50);
    r1=raices(f,x);
    hold on
    for E=r1(1:3)
        q=sqrt(V0-E);
        k=sqrt(E);
        A=1/sqrt(2*a-sin(2*k*a)/k+(1-cos(2*k*a)*(4*q*b+exp(-2*b*q*b)-exp(2*q*b))
/(q*(1-exp(2*q*b))*(1-exp(-2*q*b)))));
        B=-A*exp(-2*1i*k*a);
        f1=@(x) real(A*exp(1i*k*x)+B*exp(-1i*k*x));
        fplot(f1,[-a,0])
        C=(1-exp(-2*1i*k*a))*A/(1-exp(2*q*b));
        D=(1-exp(-2*1i*k*a))*A/(1-exp(-2*q*b));
        f2=@(x) real(C*exp(q*x)+D*exp(-q*x));
        fplot(f2,[0,b])  
    end
    hold off
    grid on
    xlabel('x')
    ylabel('\Psi(x)')
    title('Funciones de onda')
    function r = raices(f, x)
        y=f(x);
        indices=find(y(1:end-1).*y(2:end)<0);
        r=zeros(1,length(indices));
        for s=1:length(indices)
            r(s)=fzero(f, [x(indices(s)), x(indices(s)+1)]);
        end
    end
end
                	
Correspondientes a los niveles de energía, E>V0
Calculamos la integral
Expresamos los coeficientes B, C y D en términos de A
El resultado es
Representamos las funciones de onda correspondientes a los dos primeros niveles de energía, E>V0
function caja_asimetrica_2
    V0=20; %altura
    a=3; %dimesiones
    b=3;
    k=@(E) sqrt(E);
    q=@(E) sqrt(E-V0);
    f=@(E) q(E).*(sin(k(E)*a).*cos(q(E)*b))+k(E).*(sin(q(E)*b).*cos(k(E)*a));
    x=linspace(V0, 30,20);
    r2=raices(f,x);
    hold on
    for E=r2(1:2)
        q=sqrt(E-V0);
        k=sqrt(E);
        A=1/sqrt(2*a-sin(2*k*a)/k-(1-cos(2*k*a)*sin(2*q*b)/(q*(1-cos(2*q*b)))));
        B=-A*exp(-2*1i*k*a);
        f1=@(x) real(A*exp(1i*k*x)+B*exp(-1i*k*x));
        fplot(f1,[-a,0])
        C=(1-exp(-2*1i*k*a))*A/(1-exp(2*1i*q*b));
        D=(1-exp(-2*1i*k*a))*A/(1-exp(-2*1i*q*b));
        f2=@(x) real(C*exp(1i*q*x)+D*exp(-1i*q*x));
        fplot(f2,[0,b])  
    end
    hold off
    grid on
    xlabel('x')
    ylabel('\Psi(x)')
    title('Funciones de onda')
    function r = raices(f, x)
        y=f(x);
        indices=find(y(1:end-1).*y(2:end)<0);
        r=zeros(1,length(indices));
        for s=1:length(indices)
            r(s)=fzero(f, [x(indices(s)), x(indices(s)+1)]);
        end
    end
                      	
Pozo de potencial doble

El pozo de potencial doble consta de una pozo de potencial de altura infinita y de anchura 2a con una barrera de potencial de anchura 2b y altura V0 situada en medio, descrito por la función V(x)
Estudiamos las soluciones de la la ecuación de Schrödinger independiente del tiempo
primero para E<V0 y a continuación, para E>V0
Energía, E<V0
En la región I
En la región II
En la región III
Niveles de energía
Las funciones de onda pueden ser
-  
Simétricas
 -  
Antisimétricas
 
En x=a, el potencial es infinito,
La función de onda es continua en x=b y también su derivada primera
La ecuación transcendente que nos proporciona los niveles de energía correspondiente a las funciones de onda simétricas, es
En x=a, el potencial es infinito,
La función de onda es continua en x=b y también su derivada primera
La ecuación transcendente que nos proporciona los niveles de energía correspondiente a las funciones de onda simétricas, es
Energía, E>V0
En la región I
En la región II
En la región III
Niveles de energía
Las funciones de onda pueden ser
-  
Simétricas
 -  
Antisimétricas
 
En x=a, el potencial es infinito,
La función de onda es continua en x=b y también su derivada primera
En vez de volver a realizar el cálculo completo, basta sustituir en la correspondeinte ecuación transcencente
La ecuación ecuación transcendente, para los niveles de energía E>V0, es
La ecuación ecuación transcendente, para los niveles de energía E>V0, es
Cálculo de los niveles de energía
Establecemos un sistema de unidades tal que ℏ=m=1.
Representamos los primeros niveles de energía de un pozo infinito de potencial de anchura 2a=π con el fin de apreciar el efecto de la barrera de potencial
a=pi/2; %mitad de la anchura del pozo infinito
Emax=15;
hold on
xx=[-a-0.1, -a, -a,a,a, a+0.1, a+0.1, -a-0.1, -a-0.1];
yy=[Emax, Emax, 0, 0, Emax, Emax, -1, -1, Emax ];
fill(xx,yy, [0.5 0.5 0.5])
for n=1:5
    E=n^2*pi^2/(8*a^2);
    text(a, E,num2str(E),'VerticalAlignment','bottom', 'HorizontalAlignment',
'right')
    line([-a,a],[E,E],'color','b')
end
hold off
ylim([-1,Emax])
xlabel('')
ylabel('E')
title('Niveles de energía')
       	
Introducimos en el pozo infinito de potencial de anchura 2a=π una barrera de altura V0=10 y de anchura 2b=0.75. Utilizamos la función 
function semi_3
    V0=10; %altura barrera
    a=pi/2; %mitad anchura del pozo
    b=0.75/2; %mitad de la anchura de la barrera
    Emax=30;
    %niveles de energía
    %E<V0
    fi=@(E) (sqrt(2*V0-2*E).*cosh(sqrt(2*V0-2*E)*b)).*sin(sqrt(2*E)*(a-b))
+(sqrt(2*E).*sinh(sqrt(2*V0-2*E)*b)).*cos(sqrt(2*E)*(a-b));
    fp=@(E) (sqrt(2*V0-2*E).*sinh(sqrt(2*V0-2*E)*b)).*sin(sqrt(2*E)*(a-b))+
(sqrt(2*E).*cosh(sqrt(2*V0-2*E)*b)).*cos(sqrt(2*E)*(a-b));
    x=linspace(0,V0, 40);
    impar_1=raices(fi,x);
    par_1=raices(fp,x);
    % E>V0
    ffi=@(E) sqrt(2*E-2*V0).*cos(sqrt(2*E-2*V0)*b).*sin(sqrt(2*E)*(a-b))+
sqrt(2*E).*sin(sqrt(2*E-2*V0)*b).*cos(sqrt(2*E)*(a-b));
    ffp=@(E) sqrt(2*E-2*V0).*sin(sqrt(2*E-2*V0)*b).*sin(sqrt(2*E)*(a-b))-
sqrt(2*E).*cos(sqrt(2*E-2*V0)*b).*cos(sqrt(2*E)*(a-b));
    x=linspace(V0, Emax, 40);
    par_2=raices(ffp,x);
    impar_2=raices(ffi,x);
    niveles=sort([par_1, impar_1, par_2, impar_2]);
    hold on
    xx=[-a-0.1, -a, -a,-b,-b, b, b,a,a,a+0.1, a+0.1,-a-0.1, -a-0.1];
    yy=[Emax, Emax, 0, 0, V0, V0,0,0,Emax, Emax,-1, -1, Emax];
    fill(xx,yy, [0.5 0.5 0.5])
    i=1;
    for E=niveles
        line([-a,a],[E,E],'color','b')
        if rem(i,2)==0
            text(a, E,num2str(E),'VerticalAlignment','bottom', 
'HorizontalAlignment','right')
        else
            text(-a, E,num2str(E),'VerticalAlignment','bottom', 
'HorizontalAlignment','left')
        end
        i=i+1;
    end
    hold off
    ylim([-1,Emax])
    xlabel('')
    ylabel('E')
    title('Niveles de energía')
    function r = raices(f, x)
        y=f(x);
        indices=find(y(1:end-1).*y(2:end)<0);
        r=zeros(1,length(indices));
        for k=1:length(indices)
            r(k)=fzero(f, [x(indices(k)), x(indices(k)+1)]);
        end
    end
end   
      	
A la izquierda, la energía de los niveles correspondientes a funciones de onda simétricas y a la derecha, antisimétricas
Funciones de onda
Vamos a representar las funciones de onda correspondientes a los niveles de energía en cada uno de los cuatro casos. Para ello, tenemos que relacionar los coeficientes B y C con el coeficiente A. El coeficiente A se calcula de modo que
El resultado 1/2 se debe a razones de simetría de la función de onda. El segundo término no cambia
En el extremo x=a, la relación entre los coeficientes A y B es
El resultado de la integral es
Las funciones de onda para E<V0 y E>V0 son
E<V0
Simétricas
Antisimétricas
E>V0
Simétricas
Antisimétricas
El primer término vale
Las relaciones entre los coeficientes C y B con A son
El resultado es
El primer término vale
Las relaciones entre los coeficientes C y B con A son
El resultado es
El primer término vale
Las relaciones entre los coeficientes C y B con A son
El resultado es
El primer término vale
Las relaciones entre los coeficientes C y B con A son
El resultado es
Representamos las funciones de onda de de un pozo infinito de potencial de anchura 2a=π con una barrera de altura V0=10 y de anchura 2b=0.75.
A continuación, el código que calcula los niveles de energía y los guarda en un vector
- E<V0
 - Simétricas, 
par_1  - Antisimétricas, 
impar_1  - E>V0
 - Simétricas, 
par_2  - Antisimétricas, 
impar_2  
function semi_5
    V0=10;
    a=pi/2;
    b=0.75/2;
    Emax=30;
    %Niveles de energía
    %E<V0
    fi=@(E) (sqrt(2*V0-2*E).*cosh(sqrt(2*V0-2*E)*b)).*sin(sqrt(2*E)*(a-b))
+(sqrt(2*E).*sinh(sqrt(2*V0-2*E)*b)).*cos(sqrt(2*E)*(a-b));
    fp=@(E) (sqrt(2*V0-2*E).*sinh(sqrt(2*V0-2*E)*b)).*sin(sqrt(2*E)*(a-b))
+(sqrt(2*E).*cosh(sqrt(2*V0-2*E)*b)).*cos(sqrt(2*E)*(a-b));
    x=linspace(0,V0, 40);
    impar_1=raices(fi,x);
    par_1=raices(fp,x);
    % E>V0
    ffi=@(E) sqrt(2*E-2*V0).*cos(sqrt(2*E-2*V0)*b).*sin(sqrt(2*E)*(a-b))
+sqrt(2*E).*sin(sqrt(2*E-2*V0)*b).*cos(sqrt(2*E)*(a-b));
    ffp=@(E) sqrt(2*E-2*V0).*sin(sqrt(2*E-2*V0)*b).*sin(sqrt(2*E)*(a-b))
-sqrt(2*E).*cos(sqrt(2*E-2*V0)*b).*cos(sqrt(2*E)*(a-b));
    x=linspace(V0, Emax, 40);
    par_2=raices(ffp,x);
    impar_2=raices(ffi,x);
    hold on
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    %Situar aquí el código que representa las funciones de onda
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    hold off
    grid on
    xlabel('x')
    ylabel('\Phi(x)')
    title('Funciones de onda')
    function r = raices(f, x)
        y=f(x);
        indices=find(y(1:end-1).*y(2:end)<0);
        r=zeros(1,length(indices));
        for k=1:length(indices)
            r(k)=fzero(f, [x(indices(k)), x(indices(k)+1)]);
        end
    end
end 
  El código para representar las funciones de onda se introduce en el lugar señalado
- E<V0
 - Simétricas
 
...
 for E=par_1 
      k=sqrt(2*E);
      q=sqrt(2*V0-2*E);
      suma=2*(a-b)-sin(2*k*(a-b))/k+sin(k*(a-b))^2*(sinh(2*q*b)/q+2*b)
/cosh(q*b)^2;
      A=1/sqrt(2*suma);
      B=-A*exp(-1i*2*k*a);
      C=(B*exp(1i*k*b)+A*exp(-1i*k*b))/(2*cosh(q*b));
      fplot(@(x) real(C*(exp(q*x)+exp(-q*x))),[-b,b])
      fplot(@(x) real(B*exp(1i*k*x)+A*exp(-1i*k*x)),[b,a])
      fplot(@(x) real(A*exp(1i*k*x)+B*exp(-1i*k*x)),[-a,-b])
  end
  disp(par_1)
...
           	
2.3452 8.5402
...
    for E=impar_1 
      k=sqrt(2*E);
      q=sqrt(2*V0-2*E);
      suma=2*(a-b)-sin(2*k*(a-b))/k+sin(k*(a-b))^2*(sinh(2*q*b)/q-2*b)
/sinh(q*b)^2;
      A=1/sqrt(2*suma);
      B=-A*exp(-1i*2*k*a);
      C=(B*exp(1i*k*b)+A*exp(-1i*k*b))/(2*sinh(q*b));
      fplot(@(x) real(C*(exp(q*x)-exp(-q*x))),[-b,b])
      fplot(@(x) real(B*exp(1i*k*x)+A*exp(-1i*k*x)),[b,a])
      fplot(@(x) real(-A*exp(1i*k*x)-B*exp(-1i*k*x)),[-a,-b])
    end
    disp(impar_1)
...
          	
2.4847 9.7064
- Simétricas
 
...
    for E=par_2 %E>V0
      k=sqrt(2*E);
      q=sqrt(2*E-2*V0);
      suma=2*(a-b)-sin(2*k*(a-b))/k+sin(k*(a-b))^2*(sin(2*q*b)/q+2*b)
/cos(q*b)^2;
      A=1/sqrt(2*suma);
      B=-A*exp(-1i*2*k*a);
      C=(B*exp(1i*k*b)+A*exp(-1i*k*b))/(exp(1i*q*b)+exp(-1i*q*b));
      fplot(@(x) real(C*(exp(1i*q*x)+exp(-1i*q*x))),[-b,b])
      fplot(@(x) real(B*exp(1i*k*x)+A*exp(-1i*k*x)),[b,a])
      fplot(@(x) real(A*exp(1i*k*x)+B*exp(-1i*k*x)),[-a,-b])
    end
    disp(par_2)
    ...
           	
15.8611 26.5993
...
    for E=impar_2 %E>V0
      k=sqrt(2*E);
      q=sqrt(2*E-2*V0);
      suma=2*(a-b)-sin(2*k*(a-b))/k+sin(k*(a-b))^2*(-sin(2*q*b)/q+2*b)
/sin(q*b)^2;
      A=1/sqrt(2*suma);
      B=-A*exp(-1i*2*k*a);
      C=(B*exp(1i*k*b)+A*exp(-1i*k*b))/(exp(1i*q*b)-exp(-1i*q*b));
      fplot(@(x) real(C*(exp(1i*q*x)-exp(-1i*q*x))),[-b,b])
      fplot(@(x) real(B*exp(1i*k*x)+A*exp(-1i*k*x)),[b,a])
      fplot(@(x) real(-A*exp(1i*k*x)-B*exp(-1i*k*x)),[-a,-b])
    end
    disp(impar_2)
            ...
          	
20.8679
Una variante del pozo de potencial de profundidad infinita
En esta sección, vamos a calcular los niveles de energía y las correspondientes funciones de onda del siguiente pozo de potencial de profundidad infinita.
Para crear parte de la figura se ha utilizado el código
x=[0,0,2,2,5,5,7,7,10,10,12,12,14,14];
y=[25,0,0,-20,-20,5,5,16,16,-8,-8,2,2,25];
plot(x,y,'k','lineWidth',1.5)
xlim([-1,15])
ylim([-21,25])
xlabel('x')
ylabel('E_p(x)')
title('Potencial')
          
 
Donde la energía potencial se mide en eV (1.6021·10-19 J) y la posición x en ángstrom Å (10-10 m). El potencial V(x) es infinito en x=0 y x=14 Å y consta de N=6 intervalos de potencial constante
La ecuación de Schrödinger es
Dividimos ambos miembros por Vm, el máximo potencial no infinito y distinto de cero, en este ejemplo, Vm=16 eV. Definimos
la energía adimensional e=E/Vm
el potencial adimensional en cada intervalo vi=V(x)/Vm, con i=1, 2, 3, ...N.
la distancia adimensional ξ
La ecuación de Schrödinger se transforma en otra más simple y apropiada para el cálculo numérico
 
La solución de esta ecuación diferencial en un intervalo i de potencial constante vi comprendido entre ξi-1 y ξi es
| fi | gi | f'i | g'i | ||
|---|---|---|---|---|---|
| e<vi | |||||
| e>vi | |||||
| e=vi | ξ | 1 | 1 | 0 | 
Las dos últimas columnas, corresponden a las derivadas de fi(ξ) y gi(ξ) respecto de ξ
- La solución exponencial, corresponde a una partícula que penetra a través de una barrera e<vi
 - la solución trigonométrica, a una barrera cuya altura es menor que la energía de la partícula e>vi.
 - El tercer caso e=vi es posible, pero muy improbable
 
Niveles de energía
Con N intervalos, hay 2N coeficientes Ai y Bi que tenemos que determinar
En los extremos el potencial es infinito, la función de onda es nula, Ψ(0)=0, Ψ(ξN)=0
En las posiciones ξ1, ξ2, ...ξN-1, la función de onda deberá ser continua y también su derivada primera
Estas dos condiciones generan el sistema de ecuaciones
Tenemos un sistema homogéneo de 2N ecuaciones con 2N incógnitas, en forma matricial se escribe
El determinante de los coeficientes deberá ser cero, lo que determina los niveles de energía
function pozo_potencial
    Vm=16;  %máximo
    K=sqrt(2*9.1091e-31*Vm*1.6021e-19)*1e-10/1.0545e-34;
    x=[2,5,7,10,12,14]*K;
    v=[0,-20,5,16,-8,2]/Vm;
    N=length(v);
    C=zeros(2*N);
    
%niveles de energía
    xb=buscar_intervalos(@energia,-20/Vm, 25/Vm,50);
    nb=size(xb);
    nivel=zeros(1,nb(1));
    disp('niveles de energia')
    for m=1:nb(1)
        nivel(m)=fzero(@energia,[xb(m,1),xb(m,2)]);
    end
    disp(nivel')
    
    xx=[0,0,x(1),x(1),x(2),x(2),x(3),x(3),x(4),x(4),x(5),x(5),x(6),x(6)];
    yy=[2,v(1),v(1),v(2),v(2),v(3),v(3),v(4),v(4),v(5),v(5),v(6),v(6),2];
    plot(xx,yy,'k','lineWidth',1.5)
    for m=1:nb(1)
        line([0,x(6)],[nivel(m), nivel(m)],'color','r')
    end
    grid on
    xlabel('\xi')
    ylabel('E_p(\xi)')
    title('Niveles de energía')  
    
    
    function res = energia(e)
        if v(1)>e
            C(1,1)=1; C(1,2)=1;
        else
            C(1,1)=0; C(1,2)=1;
        end
        for i=1:N-1
            if v(i)>e
                k=sqrt(v(i)-e);
                C(2*i,2*i-1)=exp(k*x(i)); C(2*i,2*i)=exp(-k*x(i));
                C(2*i+1,2*i-1)=k*exp(k*x(i)); C(2*i+1,2*i)=-k*exp(-k*x(i));
            elseif v(i)<e
                k=sqrt(e-v(i));
                C(2*i,2*i-1)=sin(k*x(i)); C(2*i,2*i)=cos(k*x(i));
                C(2*i+1,2*i-1)=k*cos(k*x(i)); C(2*i+1,2*i)=-k*sin(k*x(i));
            else
                C(2*i,2*i-1)=x(i); C(2*i,2*i)=1;
                C(2*i+1,2*i-1)=1; C(2*i+1,2*i)=0;
            end
            if v(i+1)>e
                k=sqrt(v(i+1)-e);
                C(2*i,2*i+1)=-exp(k*x(i)); C(2*i,2*i+2)=-exp(-k*x(i));
                C(2*i+1,2*i+1)=-k*exp(k*x(i)); C(2*i+1,2*i+2)=k*exp(-k*x(i));
            elseif v(i+1)<e
                k=sqrt(e-v(i+1));
                C(2*i,2*i+1)=-sin(k*x(i)); C(2*i,2*i+2)=-cos(k*x(i));
                C(2*i+1,2*i+1)=-k*cos(k*x(i)); C(2*i+1,2*i+2)=k*sin(k*x(i));
            else
                C(2*i,2*i+1)=-x(i); C(2*i,2*i+2)=-1;
                C(2*i+1,2*i+1)=-1; C(2*i+1,2*i+2)=0;
            end
        end
        if v(N)>e
            k=sqrt(v(N)-e);
            C(2*N,2*N-1)=exp(k*x(N)); C(2*N,2*N)=exp(-k*x(N));
        elseif v(N)<e
            k=sqrt(e-v(N));
            C(2*N,2*N-1)=sin(k*x(N)); C(2*N,2*N)=cos(k*x(N));
        else
            C(2*N,2*N-1)=x(N); C(2*N,2*N)=1;
        end
        res=det(C);
        C=zeros(2*N);
    end
        
    function xb = buscar_intervalos(f,a,b,n)
        z = linspace(a,b,n);
        j = 0; 
        y1=f(z(1));
        for m = 1:length(z)-1
            y2=f(z(m+1));
            if sign(y1) ~= sign(y2) 
                j = j + 1;
                xb(j,1) = z(m);
                xb(j,2) = z(m+1);
            end
            y1=y2;
        end
        if isempty(xb) 
            disp('no se han encontrado cambios de signo')
        else
        disp(['número de intervalos:' int2str(j)]) 
        end
    end 
end 
    Representamos la energía potencial Ep(ξ) en función de la variable adimensional ξ, las líneas rojas horizontales corresponden a los niveles de energía adimensionales e=E/Vm
 
    Los niveles de energía en eV son
  -17.4546
  -10.1369
   -4.0159
    0.3012
    5.2654
    7.7995
   11.0232
   13.0925
   17.4024
   20.1808
   24.4298
    Funciones de onda
Dado un nivel de energía e, calculamos los coeficientes B1, A2, B2, A3, B3....AN-1, BN-1, AN, BN en función de A1 que sirve de factor de escala
La primera ecuación nos da B1
Las dos ecuaciones siguientes, A2 y B2
y así, con el resto de los coeficientes. Los dos últimas proporcionan AN y BN
Primero, calculamos el coeficiente B1 para cada uno de los posibles casos
Calculamos c1 y c2 para cada uno de los tres posibles casos
Las expresiones de los coeficientes A2 y B2 son
y así, el resto de los coeficientes
Normalización
El coeficiente A1 se calcula teniendo en cuenta que
donde ξi-1=0. Para cada uno de los tres posibles casos, la expresión de la integral es
Utilizamos estas dos relaciones trigonométricas para efectuar las integrales de la segunda fila, e>vi. Las otras son inmediatas
El resultado es
Representamos la función de onda correspondiente al nivel n=9. Se proporciona también el dato de su energía e. Para convertirla en eV se ha de multiplicar por Vm=16
function pozo_potencial_1
    Vm=16;  %máximo
    K=sqrt(2*9.1091e-31*Vm*1.6021e-19)*1e-10/1.0545e-34;
    x=[2,5,7,10,12,14]*K;
    v=[0,-20,5,16,-8,2]/Vm;
%matriz de los coeficientes
    N=length(v);
    C=zeros(2*N);
    
%niveles de energía
    xb=buscar_intervalos(@energia,-20/Vm, 25/Vm,50);
    nb=size(xb);
    nivel=zeros(1,nb(1));
    disp('niveles de energia')
    for m=1:nb(1)
        nivel(m)=fzero(@energia,[xb(m,1),xb(m,2)]);
    end
 %función de onda  correspondiente a un nivel de energía
    e=nivel(9); %energía del nivel, cambiar el número de nivel
    A=zeros(1,N);
    B=zeros(1,N);
    A(1)=1;
    if(v(1)>e)
        B(1)=-1;
    else
        B(1)=0;
    end
    for i=1:N-1
        if v(i)>e
            k=sqrt(v(i)-e);
            c1=A(i)*exp(k*x(i))+B(i)*exp(-k*x(i));
            c2=A(i)*k*exp(k*x(i))-B(i)*k*exp(-k*x(i));
       elseif v(i)<e
            k=sqrt(e-v(i));
            c1=A(i)*sin(k*x(i))+B(i)*cos(k*x(i));
            c2=A(i)*k*cos(k*x(i))-B(i)*k*sin(k*x(i));
      else
            c1=A(i)*x(i)+B(i);
            c2=A(i);
      end       
     if v(i+1)>e
            k=sqrt(v(i+1)-e);
            A(i+1)=(c1*k+c2)*exp(-k*x(i))/(2*k);
            B(i+1)=(c1*k-c2)*exp(k*x(i))/(2*k);
       elseif v(i+1)<e
            k=sqrt(e-v(i+1));
            A(i+1)=(c1*k*sin(k*x(i))+c2*cos(k*x(i)))/k;
            B(i+1)=(c1*k*cos(k*x(i))-c2*sin(k*x(i)))/k;
       else
            A(i+1)=c2;
            B(i+1)=c1-c2*x(i);
       end
    end 
%comprobación
%     if v(N)>e
%             k=sqrt(v(N)-e);
%             disp(A(N)*exp(k*x(N))+B(N)*exp(-k*x(N)))
%        elseif v(N)<e
%             k=sqrt(e-v(N));
%             disp(A(N)*sin(k*x(N))+B(N)*cos(k*x(N)))
%        else
%             disp(A(N)*x(N)+B(N)) %próximo a cero
%        end
 %normalización
    suma=0;
    if v(1)>e
        k=sqrt(v(1)-e);
        suma=suma+A(1)^2*(exp(2*k*x(1))-1)/(2*k)-B(1)^2*(exp(-2*k*x(1))-1)
/(2*k)+2*A(1)*B(1)*x(1);
    elseif v(1)<e
        k=sqrt(e-v(1));
        suma=suma+x(1)*(A(1)^2+B(1)^2)/2+(A(1)^2-B(1)^2)*sin(2*k*x(1))
/(2*k)-A(1)*B(1)*(cos(2*k*x(1))-1)/(2*k);
    else
        suma=suma+A(1)^2*x(1)^3/3+B(1)^2*x(1)+A(1)*B(1)*x(1)^2;
    end
    for i=2:N
        if v(i)>e
            k=sqrt(v(i)-e);
            suma=suma+A(i)^2*(exp(2*k*x(i))-exp(2*k*x(i-1)))/(2*k)-B(i)^2*
(exp(-2*k*x(i))-exp(-2*k*x(i-1)))/(2*k)+2*A(i)*B(i)*(x(i)-x(i-1));
        elseif v(i)<e
            k=sqrt(e-v(i));
            suma=suma+(x(i)-x(i-1))*(A(i)^2+B(i)^2)/2+(A(i)^2-B(i)^2)*
(sin(2*k*x(i))-sin(2*k*x(i-1)))/(2*k)-A(i)*B(i)*(cos(2*k*x(i))-
cos(2*k*x(i-1)))/(2*k);
        else
            suma=suma+A(i)^2*(x(i)^3-x(i-1)^3)/3+B(i)^2*(x(i)-x(i-1))+
A(i)*B(i)*(x(i)^2-x(i-1)^2);
        end
            
    end 
    for i=1:N
        A(i)=A(i)/sqrt(suma);
        B(i)=B(i)/sqrt(suma);
    end
    hold on
 %representación gráfica
    if v(1)>e
        k=sqrt(v(1)-e);
        f=@(x) A(1)*exp(k*x)+B(1)*exp(-k*x);
        fplot(f,[0, x(1)])
   elseif v(1)<e
        k=sqrt(e-v(1));
        f=@(x) A(1)*sin(k*x)+B(1)*cos(k*x);
        fplot(f,[0, x(1)])
   else
        f=@(x) A(1)*x+B(1);
        fplot(f,[0, x(1)])
   end
   for i=2:N
       if v(i)>e
            k=sqrt(v(i)-e);
            f=@(x) A(i)*exp(k*x)+B(i)*exp(-k*x);
            fplot(f,[x(i-1), x(i)])
       elseif v(i)<e
            k=sqrt(e-v(i));
            f=@(x) A(i)*sin(k*x)+B(i)*cos(k*x);
            fplot(f,[x(i-1), x(i)])
       else
            f=@(x) A(i)*x+B(i);
            fplot(f,[x(i-1), x(i)])
       end    
  end 
  text(0.5, 0, num2str(e),'VerticalAlignment','top')
 hold off
 grid on
 xlabel('\xi')
 ylabel('\Phi(\xi)')
 title('Función de onda')  
    
    function res = energia(e)
        if v(1)>e
            C(1,1)=1; C(1,2)=1;
        else
            C(1,1)=0; C(1,2)=1;
        end
        for i=1:N-1
            if v(i)>e
                k=sqrt(v(i)-e);
                C(2*i,2*i-1)=exp(k*x(i)); C(2*i,2*i)=exp(-k*x(i));
                C(2*i+1,2*i-1)=k*exp(k*x(i)); C(2*i+1,2*i)=-k*exp(-k*x(i));
            elseif v(i)<e
                k=sqrt(e-v(i));
                C(2*i,2*i-1)=sin(k*x(i)); C(2*i,2*i)=cos(k*x(i));
                C(2*i+1,2*i-1)=k*cos(k*x(i)); C(2*i+1,2*i)=-k*sin(k*x(i));
            else
                C(2*i,2*i-1)=x(i); C(2*i,2*i)=1;
                C(2*i+1,2*i-1)=1; C(2*i+1,2*i)=0;
            end
            if v(i+1)>e
                k=sqrt(v(i+1)-e);
                C(2*i,2*i+1)=-exp(k*x(i)); C(2*i,2*i+2)=-exp(-k*x(i));
                C(2*i+1,2*i+1)=-k*exp(k*x(i)); C(2*i+1,2*i+2)=k*exp(-k*x(i));
            elseif v(i+1)<e
                k=sqrt(e-v(i+1));
                C(2*i,2*i+1)=-sin(k*x(i)); C(2*i,2*i+2)=-cos(k*x(i));
                C(2*i+1,2*i+1)=-k*cos(k*x(i)); C(2*i+1,2*i+2)=k*sin(k*x(i));
            else
                C(2*i,2*i+1)=-x(i); C(2*i,2*i+2)=-1;
                C(2*i+1,2*i+1)=-1; C(2*i+1,2*i+2)=0;
            end
        end
        if v(N)>e
            k=sqrt(v(N)-e);
            C(2*N,2*N-1)=exp(k*x(N)); C(2*N,2*N)=exp(-k*x(N));
        elseif v(N)<e
            k=sqrt(e-v(N));
            C(2*N,2*N-1)=sin(k*x(N)); C(2*N,2*N)=cos(k*x(N));
        else
            C(2*N,2*N-1)=x(N); C(2*N,2*N)=1;
        end
        res=det(C);
        C=zeros(2*N);
    end
        
    function xb = buscar_intervalos(f,a,b,n)
        z = linspace(a,b,n);
        j = 0; 
        y1=f(z(1));
        for m = 1:length(z)-1
            y2=f(z(m+1));
            if sign(y1) ~= sign(y2) 
                j = j + 1;
                xb(j,1) = z(m);
                xb(j,2) = z(m+1);
            end
            y1=y2;
        end
        if isempty(xb) 
            disp('no se han encontrado cambios de signo')
        else
        disp(['número de intervalos:' int2str(j)]) 
        end
    end 
end
         
 
  Comprobamos que Ψ(ξN)≈0, quitando los comentarios % delante de la porción de código titulada, 
Tomando como referencia este ejemplo, se pueden estudiar otros pozos de potencial V(x) de profundidad infinita, V(0)=∞ y V(xN)=∞
Referencias
M. A. Doncheski, R. W. Robinett. Comparing classical and quantum probability distributions for an asymmetric infinite well. (1999)
B Cameron Reed. Classroom-suitable matrix method for one-dimensional stepped quantum potentials. Eur. J. Phys. 42 (2021) 065404