我试图将下面的数据放到表格中 - 我最感兴趣的是'c'(我知道c≈1/ 8,b≈3)但是想从数据中提取所有这些值。 / p>
公式:
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'和amp;的初步猜测。 'c'如果可能的话。
谢谢, Ĵ
答案 0 :(得分:3)
拟合功能的主要问题是找到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_c0 + error_c1
)绘制为b
的函数,并找出错误最小的b
。关于最佳b
曲线error_c0 + error_c1
与b
应该是二次的,并且最小值为b_opt
。然后使用此b = b_opt
运行上面代码中的拟合,并获取a
和c
。