我正在使用matlab的lsqcurvefit
函数来通过'函数来计算计算值。观察数据并优化'功能的两个参数。在运行代码之后,我获得了参数的优化值,但是在计算/模拟曲线和观察到的曲线之间的拟合非常明显,如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')
数据文件'信号1'可以从here
获得