diff --git a/fid.m b/fid.m index cb4600d693af73f54b06416fcc4185a8d05d722a..572ebcc400c2fa453b0e04c052aa18bb17a9adfe 100644 --- a/fid.m +++ b/fid.m @@ -36,6 +36,7 @@ function [rX, rY, f2] = fid(X, Y, cutoff, plotToggle) Y1(2:end) = (Y(2:end,1)-y1)./(X(2:end,1)-x1); Y1(1) = Y1(2); + Y1 = Y1/max(abs(Y1)); if plotT figure, plot(X,Y1,'LineWidth',2); diff --git a/fid.py b/fid.py index 03ca8aed8a2868afb876ea94c201db7bc156d08d..218440a76a410035abfaf92017cb14b000159283 100644 --- a/fid.py +++ b/fid.py @@ -43,27 +43,25 @@ def fid(X,Y,cutoff = 0.01): Boolean indexing array, the feature selection result. """ - try: - def f(x,a,b,c,d): - return -a/(b*x+c)+d - - x0 = X[0]; y0 = Y[0] - Y1 = np.zeros(len(Y)) - for i in range(1,len(X)): - Y1[i] = (Y[i]-y0)/(X[i]-x0) - Y1[0] = Y1[1] - - - popt, pcov = sp.optimize.curve_fit(f,X,Y1,p0=[1,10,10,0], - bounds=([0,-np.inf,-np.inf,-np.inf],[np.inf,np.inf,np.inf,np.inf])) - Y2 = f(X,*popt) - - dY2 = Y2[-1]-Y2[0] - f2 = Y2 < Y2[-1] - dY2*cutoff - - rX = X[f2] - rY = Y[f2] - - return rX, rY, f2 - except RuntimeError as e: - raise e + def f(x,a,b,c,d): + return -a/(b*x+c)+d + + x0 = X[0]; y0 = Y[0] + Y1 = np.zeros(len(Y)) + for i in range(1,len(X)): + Y1[i] = (Y[i]-y0)/(X[i]-x0) + Y1[0] = Y1[1] + Y1 = Y1/np.max(np.abs(Y1)) + + + popt, pcov = sp.optimize.curve_fit(f,X,Y1,p0=[1,10,10,0], + bounds=([0,-np.inf,-np.inf,-np.inf],[np.inf,np.inf,np.inf,np.inf])) + Y2 = f(X,*popt) + + dY2 = Y2[-1]-Y2[0] + f2 = Y2 < Y2[-1] - dY2*cutoff + + rX = X[f2] + rY = Y[f2] + + return rX, rY, f2