请问怎么在MATLAB对现有数据进行双曲正割拟合?

img

如图所示,通过测量我测到了激光脉冲的自相关数据并且已经归一化处理,请问应该怎么用MATLAB对其进行双曲正割拟合?本人没有MATLAB基础,实在是搞不明白……

比方说你有两列数据储存在变量xy中,那么可以这么做

% 双曲正割函数拟合
% y = a*sech(b*(x+c))+d;
% 这是原始数据【两列】
xy = [
  15.037593984962406   0.000000000000202
  15.639097744360901   0.000000000000672
  16.240601503759400   0.000000000002238
  16.842105263157894   0.000000000007451
  17.443609022556391   0.000000000024813
  18.045112781954888   0.000000000082632
  18.646616541353385   0.000000000275173
  19.248120300751879   0.000000000916360
  19.849624060150376   0.000000003051585
  20.451127819548873   0.000000010162136
  21.052631578947370   0.000000033841105
  21.654135338345863   0.000000112694847
  22.255639097744361   0.000000375287055
  22.857142857142858   0.000001249749902
  23.458646616541355   0.000004161813728
  24.060150375939848   0.000013859327759
  24.661654135338345   0.000046153186662
  25.263157894736842   0.000153695523022
  25.864661654135340   0.000511824084635
  26.466165413533833   0.001704433095836
  27.067669172932330   0.005675920491111
  27.669172932330827   0.018899944966938
  28.270676691729324   0.062882369219706
  28.872180451127818   0.207335621729432
  29.473684210526315   0.622238964880578
  30.075187969924812   0.988799097677492
  30.676691729323309   0.484394775568900
  31.278195488721803   0.154240058732708
  31.879699248120300   0.046570222065566
  32.481203007518801   0.013991464997031
  33.082706766917291   0.004201680280833
  33.684210526315788   0.001261726484585
  34.285714285714285   0.000378883636868
  34.887218045112782   0.000113774867015
  35.488721804511279   0.000034165423682
  36.090225563909776   0.000010259525701
  36.691729323308273   0.000003080830156
  37.293233082706770   0.000000925141642
  37.894736842105260   0.000000277810530
  38.496240601503757   0.000000083423648
  39.097744360902254   0.000000025051264
  39.699248120300751   0.000000007522637
  40.300751879699249   0.000000002258971
  40.902255639097746   0.000000000678346
  41.503759398496243   0.000000000203700
  42.105263157894740   0.000000000061169
  42.706766917293230   0.000000000018368
  43.308270676691727   0.000000000005516
  43.909774436090224   0.000000000001656
  44.511278195488721   0.000000000000497
  45.112781954887218   0.000000000000149  
];
x = xy(:,1);
y = xy(:,2);
plot(x,y, 'ro')
hold on
% 这是模型函数
% beta(1)对应a
% beta(2)对应b
% beta(3)对应c
% beta(4)对应d
modelFun = @(beta, x) beta(1)*sech(beta(2)*(x+beta(3)))+beta(4);
beta = nlinfit(x,y,modelFun, [1, 1, -30, 1]);
yfit = modelFun(beta, x);
plot(x, yfit, 'b-')
legend('原数据','拟合')

效果:

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632