用gnuplot拟合指数

用gnuplot拟合指数,gnuplot,exponent,Gnuplot,Exponent,我正在尝试将下面的数据与表单相匹配——我最感兴趣的是“c”(我知道c)≈ 1/8,b≈ 3) 但我想从数据中提取所有这些值 公式: y = a*(x-b)**c Values.txt: # "values.txt" 2.000000e+00 6.058411e-04 2.200000e+00 5.335520e-04 2.400000e+00 3.509583e-03 2.600000e+00 1.655943e-03 2.800000e+00 1.995418

我正在尝试将下面的数据与表单相匹配——我最感兴趣的是“c”(我知道c)≈ 1/8,b≈ 3) 但我想从数据中提取所有这些值

公式:

y = a*(x-b)**c
Values.txt:

# "values.txt"
2.000000e+00    6.058411e-04
2.200000e+00    5.335520e-04 
2.400000e+00    3.509583e-03
2.600000e+00    1.655943e-03
2.800000e+00    1.995418e-03
3.000000e+00    9.437851e-04
3.200000e+00    5.516159e-04
3.400000e+00    6.765981e-04
3.600000e+00    3.860859e-04
3.800000e+00    2.942881e-04
4.000000e+00    5.039975e-04
4.200000e+00    3.962199e-04
4.400000e+00    4.659717e-04
4.600000e+00    2.892683e-04
4.800000e+00    2.248839e-04
5.000000e+00    2.536980e-04
我已经尝试在gnuplot中使用以下命令,但是没有得到有意义的结果

f(x) = a*(x-b)**c
b = 3
c = 1/8
fit f(x) "values.txt" via a,b,c
有人知道提取这些值的最佳方法吗?如果可能的话,我不想对“b”和“c”进行初步猜测

谢谢,
J

拟合函数的主要问题是查找
b
。您可以在
log(x-b)
中将方程表示为线性函数,然后拟合即可:

b = 3
f(x) = c0 + c1 * x
fit f(x) "values.txt" using (log($1-b)):(log($2)) via c0, c1
a = exp(c0)
c = c1
如您所见,您需要提供
b
,但不需要对其他参数进行初始猜测,因为这是一个简单的线性拟合


现在,我建议您提供一系列
b
值,并检查每个值的拟合效果。gnuplot提供拟合参数中的错误。然后,您可以将总体误差(
error\u c0+error\u c1
)绘制为
b
的函数,并计算出哪个
b
的误差最小。关于最佳
b
曲线
error\u c0+error\u c1
vs
b
应为二次曲线,且在
b\u opt
处最小。然后使用此
b=b_opt
运行上述代码中的拟合,并获得
a
c

对于指数函数拟合,最好使用对数刻度,如果有多个参数,最好进行初步猜测。