lambda=max_incr_pend_Lcurva(r,Lx,lambdas) Esta función determina el punto de maxima variacion en el angulo que forma la pendiente en los puntos de la L-curva
0001 function regu=max_incr_pend_Lcurva(x,y,lambdas) 0002 0003 % lambda=max_incr_pend_Lcurva(r,Lx,lambdas) 0004 % 0005 % Esta función determina el punto de maxima variacion en el angulo 0006 % que forma la pendiente en los puntos de la L-curva 0007 0008 0009 if (size(x,1)<size(x,2)) 0010 x=x'; 0011 y=y'; 0012 end 0013 0014 0015 xx=linspace(min(x),max(x),25000); 0016 0017 0018 % Este es el incremento de x 0019 0020 h= xx(2)-xx(1); 0021 0022 % Interpolamos los valores de y en los puntos xx 0023 0024 0025 0026 yy = interp1(x,y,xx,'cubic'); 0027 0028 0029 % Calculamos la primera derivada (pendiente de la curva en cada punto) 0030 0031 pendientes = diff(yy)/h; 0032 0033 % El angulo en grados es 0034 0035 angulos = atan(pendientes)*180/pi; 0036 0037 angulos = (angulos<=-(85))*(-85) + (angulos>=(-10))*(-10) + angulos.*(angulos>(-85) & angulos<(-10)); 0038 0039 % Buscamos la diferencia en grados 0040 0041 a=diff(angulos); 0042 0043 % Buscamos donde se produce la maxima variacion 0044 0045 %a = diff(pendientes); 0046 0047 mc=find(a==max(max(a))); 0048 0049 0050 regu = interp1(x,lambdas',xx(mc),'cubic'); 0051 0052 0053 %figure(2),subplot(2,2,1);plot(xx,yy,'.');hold on,plot(xx(mc),yy(mc),'ks'),hold off 0054 %subplot(2,2,2);plot(angulos,'.-');hold off 0055 %subplot(2,2,3);plot(a,'.-');hold off 0056 %distancias = abs(lambdas-regu); 0057 %pos = find(distancias==min(distancias)); 0058 %pos = pos(1); 0059 %subplot(2,2,4);plot(x,y,'.'),hold on,plot(x(pos),y(pos),'ro');hold off 0060 %pause(0.2); 0061 0062 %val = input('Parar (1/0)'); 0063 % 0064 %if (val==1) 0065 % keyboard; 0066 %end