0

我正在使用lsqcurvefitmatlab的函数通过“函数”将计算值拟合到观察数据并优化“函数”的两个参数。运行代码后,我得到了优化的参数值,但计算/模拟曲线和观察曲线之间的拟合非常糟糕,如这里所示。我曾尝试使用 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”可以从这里获得

4

0 回答 0