如何使用GNUplot获得更好的指数拟合?

问题描述 投票:2回答:3

我正在努力使我的数据符合这条曲线:

f(x) = b + n*exp(-x/u)
fit f(x) "data1" using 2:3 via b,n,u

我认为这与理论不相符:

image of bad automatic fit

然后我使用理论中的初始参数,而不重新计算拟合,我得到了更好的结果。

如果我重新计算拟合,它会在第一次迭代后忽略我的初始参数并返回第一个结果。

我尝试了几件事。我将FIT_LIMIT降低了20个数量级,但它没有改变任何东西。我也偏差数据有错误,所以我把更多的重量放在前几个数据点,然后我得到一个更好的适合,但它仍然是坏的。

这是输出:

image of output of values

问题:

  1. 我不清楚这个问题是否是数学问题,或者GNUplot是否只是通过停在某个局部最小值或达到某种限制或某些此类事情而做错了。我已经忘记了卡方式的合适性。
  2. 是否有某种方法可以获得更好的自动匹配,理想情况是在解决以包含数据中的错误之前?
math gnuplot curve-fitting data-fitting chi-squared
3个回答
3
投票

两个想法:

  1. 你似乎有大量的数据点(0,0),看起来像工件,可能会影响你的健康。
  2. 尝试拟合对数域,即: f(x) = b + n*exp(-x/u) fit log(f(x)) "data1" using 2:(log($3)) via b,n,u 如果大值主导拟合,这种技巧通常有效 - 因为它们与拟合曲线的偏差在对数域中的权重较小。对于您来说,情况似乎并非如此,但可能在您解决第1点之后。

2
投票

你认为合适的基础是什么?您需要的不仅仅是视觉,主观印象。

这是你的假设功能:

y = b + n*exp(-x/u)

尝试拟合此功能:

z = y-b = n*exp(-x/u)

采取双方的自然对数:

ln(z) = ln(n*exp(-x/u)) = ln(n) - x/u

这是一个简单的线性回归,具有因变量x,自变量ln(z),截距ln(n)和斜率-1/u

问题是你的数据在x = 0处似乎是渐近的,这表明1/x形式的函数对我来说。也许不合适与功能的选择有关。

你说“理论”。数据代表什么现象?


1
投票

来一个。 Gnuplot能够进行非常好的非线性拟合。

我不推荐线性化方法:在计算机之前使用的纸笔方法,其中只有毫米纸上的对数点的线图通过标尺制作并且从纸上读取系数。我们不需要做旧事,因为老教师只知道这种方法。让我们利用计算机的力量。

让我们用一些系数的初始猜测来建议非线性回归。

f(x) = b + n*exp(-x/u)
b = -5
n = 1.5
u = 15
fit log(f(x)) "data1" using 2:3 via b,n,u
plot "data1" using 2:3 with points, f(x) with line

根据置信区间和协方差矩阵的猜测,将常数调整为数据中的常数并享受直接结果。

© www.soinside.com 2019 - 2024. All rights reserved.