使用lsqcurvefit在MATLAB中拟合曲线

时间:2014-04-28 20:31:47

标签: matlab signal-processing curve-fitting

我试图使用lsqcurvefit函数使用MATLAB拟合数据,但我遇到了一些麻烦。 MATLAB给了我以下信息。

Local minimum possible.

lsqcurvefit stopped because the size of the current step is less than
the selected value of the step size tolerance.

<stopping criteria details>

Optimization stopped because the norm of the current step, 5.578610e-021,
is less than options.TolX = 1.000000e-020.

Optimization Metric                                 Options
norm(step) =  5.58e-021                      TolX =  1e-020 (selected)

我尝试过改变TolX和TolFun,但唯一改变的是,该程序现在需要很长时间才能完成。

我试图适应的功能是:

function P = dIdV(delta, E, T)

%delta in eV
%E in eV
%T in K

gamma = 0.00001;

%IV curve
arr = zeros(size(E));
A = -E(length(E))*10:E(length(E))/750:E(length(E))*10;

for i=1:length(E)
    arr(i) = trapz(A, (FermiDirac(-E(i)+A, T) - FermiDirac(A,T)) .* SCDOS(-E(i)+A, delta, gamma));
end

%derivative
B = zeros(size(E));
points = 49;
for i=1:length(E)-points
    p = polyfit(E(i:i+points), arr(i:i+points), 1);
    B(floor(points/2)+i-1) = p(1);
end

%vector size back to original
for k=0:ceil(points/2)
    B(k+1) = B(floor(points/2));
    B(length(E)-k) = B(length(E)-ceil(points/2)-1);
end

P = B

FermiDirac是

function P=FermiDirac(E,T)

%E in eV
%T in Kelvin

kb=8.617343*10^(-5);

P=1./(1+exp(E./(kb.*T)));

SCDOS

function N=SCDOS(E,delta,gamma)

%E in eV
%delta in eV
%gamma undefined

N=abs(real((E-1i*gamma)./sqrt((E-1i*gamma).^2-delta^2)));

我计算的是在某个温度T下超导体的dI / dV曲线。我应该通过拟合获得能隙(delta)的值。

我会在这里发布我的数据,但它长达10000点,所以我不确定如何发布。我已经尝试过滤我的数据以平滑曲线,但无济于事。我也试过使用不同的间隔。

欢迎任何关于如何开展这项工作的建议。也欢迎更好的健身方式。

编辑:Here's a graph数据。蓝线是在上面函数中计算的数据的导数,红线是过滤数据,绿线是理论曲线。我试图将红色的那个装到绿色的那个。

0 个答案:

没有答案