% Deteccion de discontinuidades mediante el LEMA de detección propuesto por
% CHAN i ZHOU, para DB4  (y bajo algunas modificaciones)
%    capdetwavedet_u(x,f,a,bmayor)
%    Entradas:
%         x       = nodos iniciales
%         f       = f(x)
%         a       = condicion para localizar las discontinuidades.
%                   (|B_{j,i}|>=a|B_{j,i-1}|)
%         bmayor  = condicion para localizar las discontinuidades.
%                   (B_{j,i}>bmayor)
%     Salidas:
%         plot de la funcion original y de las discontinuidades detectadas (lineas verticales)
%
%         Si epsilon y bmajor no se definen,
%         se toma por defecto a=2 y bmayor= 0.001
% Autor: José Jaime Noguera   +INFO: www.uv.es/anims/noguera

function [errinf,errn2]=capdetwavedet_u(x,f,a,bmayor)
hold on
if nargin == 2
   a=2;
   bmayor=0.001;
end
pasos=1;
m=length(x);
num=m;

alfa(pasos+1,:)=f(:)';

c(1)=(1+sqrt(3))/(4*sqrt(2));
c(2)=(3+sqrt(3))/(4*sqrt(2));
c(3)=(3-sqrt(3))/(4*sqrt(2));
c(4)=(1-sqrt(3))/(4*sqrt(2));
h(1)=c(4); h(2)=-c(3); h(3)=c(2); h(4)=-c(1);

v=zeros(pasos+1,num);
hold on

for j=pasos:-1:1
    m=round(m/2)-1;
    i=1;
    while(i<=m)     
         beta(j,i)=h(1)*alfa(j+1,2*i-1)+h(2)*alfa(j+1,2*i)+h(3)*alfa(j+1,2*i+1)+h(4)*alfa(j+1,2*i+2);
         if (i<m-1)          
            beta(j,i+1)=h(1)*alfa(j+1,2*i+1)+h(2)*alfa(j+1,2*i+2)+h(3)*alfa(j+1,2*i+3)+h(4)*alfa(j+1,2*i+4);
            beta(j,i+2)=h(1)*alfa(j+1,2*i+3)+h(2)*alfa(j+1,2*i+4)+h(3)*alfa(j+1,2*i+5)+h(4)*alfa(j+1,2*i+6);
         end

         if(i>2 && i<m-1 && abs(beta(j,i))>bmayor && (abs(beta(j,i-1))<=a*abs(beta(j,i-2)) || (beta(j,i-2)==0 && beta(j,i-1)<bmayor))&& abs(beta(j,i))>a*abs(beta(j,i-1)) && (abs(beta(j,i+1))<=a*abs(beta(j,i+2)) || (beta(j,i+2)==0 && beta(j,i+1)>bmayor) ))     
            disp('discontinuidad detectada')
            p1=plot([x(2*i+1),x(2*i+1)],[0.4,0.6],'-k^','LineWidth',3);   
         end
         
         if( i>2 && i<m-1 && abs(beta(j,i))>bmayor && (abs(beta(j,i-1))<=a*abs(beta(j,i-2)) || beta(j,i-2)==0) && abs(beta(j,i))>a*abs(beta(j,i-1)) && abs(beta(j,i+1))>a*abs(beta(j,i+2)))     
             disp('discontinuidad detectada entre dos stencils')
             p1=plot([x(2*i+2),x(2*i+2)],[0.4,0.6],'-k^','LineWidth',3);
         end     
       i=i+1;       
     end   
end   

plot(x, f,'k.','LineWidth',5,'MarkerSize',5)               

axis([0 1 -0.1 1.1 ]);
set(gca,'Xtick',[0 .5 1], 'FontSize',15)
set(gca,'Ytick',[0 .5 1], 'FontSize',15)
box
hold off
