我正在努力使我的数据符合这条曲线:
f(x) = b + n*exp(-x/u)
fit f(x) "data1" using 2:3 via b,n,u
我认为这与理论不相符:
然后我使用理论中的初始参数,而不重新计算拟合,我得到了更好的结果。
如果我重新计算拟合,它会在第一次迭代后忽略我的初始参数并返回第一个结果。
我尝试了几件事。我将FIT_LIMIT降低了20个数量级,但它没有改变任何东西。我也偏差数据有错误,所以我把更多的重量放在前几个数据点,然后我得到一个更好的适合,但它仍然是坏的。
这是输出:
问题:
两个想法:
f(x) = b + n*exp(-x/u)
fit log(f(x)) "data1" using 2:(log($3)) via b,n,u
如果大值主导拟合,这种技巧通常有效 - 因为它们与拟合曲线的偏差在对数域中的权重较小。对于您来说,情况似乎并非如此,但可能在您解决第1点之后。你认为合适的基础是什么?您需要的不仅仅是视觉,主观印象。
这是你的假设功能:
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
形式的函数对我来说。也许不合适与功能的选择有关。
你说“理论”。数据代表什么现象?
来一个。 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
根据置信区间和协方差矩阵的猜测,将常数调整为数据中的常数并享受直接结果。