我正在使用matlab的 lsqcurvefit 函数将'function'的计算值拟合到观测数据并优化'function'的两个参数 . 在运行代码之后,我获得了参数的优化值,但是在计算/模拟曲线和观察到的曲线之间的拟合非常明显,如可以看到here . 我尝试过使用Marquardt Levenberg算法以及反射区域,并尝试降低功能容差,但无济于事 . 我可以做些什么来使模拟曲线看起来更接近观察曲线,或者是否有一个用于曲线拟合GUI的软件,以便我可以手动更改模拟曲线,使其看起来与观察曲线相似?
我正在使用的代码是

function wtfinal = fst(para,tes)
x = 45; k = para(1);  b = 2;   S = para(2); D = k*2/S; tes = 1:998;
g_vecrow = (xlsread('signaal 1.xlsx','signal','D2:D999'))';
g_vec = g_vecrow-g_vecrow(1) ;
t_vec = tes.*5;
for i = 2:998
    t = t_vec(i);
    g = g_vec(i);
tow = 0:5:t-1;
f = g.*(t - tow).^(-3/2).*exp(-x^2./(4*D*(t - tow)));
wt(i) = ((1/D)^(1/2)* x)/(2 * sqrt(pi))* trapz(tow,f);   
end
wtfinal = wt + 147.902;
end

并使用此功能

clear all; close all; clc;
ydata = (xlsread('signaal 1.xlsx','signal','C2:C999'))';
tes = 1:998;
x0 = [0.0327 0.00172];
  lb = [];
  ub = [];
opts = optimset('Algorithm', 'levenberg-marquardt');
[newpara,resnorm,~,exitflag,output]=lsqcurvefit(@fst,x0,tes,ydata,lb,ub,opts)
figure
plot(tes,ydata)
hold on
simulated=fst(newpara,tes);
plot(tes,simulated,'r')

数据文件'signaal 1'可以从here获得