首页 > 解决方案 > 在 GNUPLOT 中拟合指数函数

问题描述

我在拟合指数函数时遇到问题 f(x)= A exp(-b x) sin(2 pi*x/T + phi) + S

数据

它一直是一条直线,然后我尝试给它一些 A、b、T、phi、S 的值,它变得更接近数据但仍然很糟糕

标签: gnuplotexponentialdata-fitting

解决方案


多维拟合非常重要,算法通常在这一点上失败。尝试通过给出更好的初始猜测来帮助算法。您还可以尝试将变量 1 与 1 进行拟合,例如,S首先是平均值,然后是周期长度,然后是这 2 个,等等。

还请提供您如何尝试适应该功能以及您使用的 Gnuplot 版本。如果第 3 列包含 0,并且您将其作为错误值提供给 Gnuplot v4 中的 fit,则 fit 完全失败。

这组给定的数据上,使用错误的猜测,拟合失败。但更好的猜测可能会成功:

f(x)=A*exp(-b*x)*sin(2.*pi*x/T+phi)+S

    A = 40.
    b = 1/500.
    T = 400.
    phi = 1.
    S = 170.

f_bad_guess(x) = 40. * exp(-x/500.) * sin(2.*pi*x/150+3.) + 170.
f_good_guess(x) = 40. * exp(-x/500.) * sin(2.*pi*x/400+1.) + 170.

fit f(x) "data.txt" via A,b,T,phi,S

p "data.txt" t "data", f(x) t "fitted function", f_good_guess(x) t "good initial guess set manually", f_bad_guess(x) t "bad initial guess set manually"

在此处输入图像描述


推荐阅读