ZZH95927 2022-03-10 13:38 采纳率: 50%
浏览 238
已结题

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

img

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

  • 写回答

2条回答 默认 最新

  • 技术专家团-Joel 2022-03-10 15:34
    关注

    比方说你有两列数据储存在变量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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 赞助了问题酬金10元 3月10日
  • 创建了问题 3月10日

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)