如图所示,通过测量我测到了激光脉冲的自相关数据并且已经归一化处理,请问应该怎么用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('原数据','拟合')
效果: