【问题标题】:How to tell gnuplot to ignore non-converging fits如何告诉 gnuplot 忽略非收敛拟合
【发布时间】:2020-06-20 19:09:56
【问题描述】:

我在为无法正常运行的拟合找到良好的初始条件时遇到了一些问题。 所以我想通过将它插入一个循环中来蛮力它,告诉 gnuplot 继续拟合,直到他得到小于 100% 的相对偏差,同时在每次他重新运行循环时随机更改初始值,我写了类似的东西那:

while(abs(m_err/m) > 1){
    m = rand(0)*0.3
    k = rand(0)
    x_0 = 15 + rand(0)*10 
    fit logi(x) 'data.csv' u 1:8 via m,k,x_0
}   

我乘以 rand 函数,这样我得到的值接近我期望适合拟合的值。

这种方法显然会导致很多不收敛和停止脚本中间循环的拟合。如果拟合不收敛或给出奇异矩阵,我如何告诉 gnuplot 简单地忽略这一点并重新运行随机化和拟合循环?

【问题讨论】:

    标签: gnuplot curve-fitting data-fitting function-fitting


    【解决方案1】:

    了解您使用的 gnuplot 版本可能会有所帮助。据我所知,不收敛并不是当前 gnuplot 中的致命错误。它会打印一条错误消息,但无论如何都应该继续。如果不是这种情况,您可以尝试设置最大迭代次数,然后在拟合恢复时自行测试收敛性。例如

    set fit maxiter 100   # no limit by default
    set fit limit 1.e-5   # this is the default convergence criterion
    do for [i=1:100] {
      a = something + i*0.01
      b = something_else
      fit f(x) 'datafile' using 1:2 via a, b
      if (FIT_ITER < 100) break;   # It converged!
    }
    if (FIT_ITER >= 100) {
      print "No starting point led to convergence."
      exit
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-13
      • 2016-03-30
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 2019-09-20
      • 2011-12-17
      相关资源
      最近更新 更多