我目前正在尝试使用gnuplot来使用under命令来拟合一个简单的数据集,但是尽管包含了很好的初步猜测,但我没有运气。
命令:
gnuplot> f(x) = 1/(2*pi) * 1/m1 * 1/(b + x**2)**(-3/2)
gnuplot> m1 = 150
gnuplot> m2 = 17
gnuplot> fit f(x) "data.txt" using 1:2 via m1, m2
数据(x:y):
2 1.2643E-05
3 7.90515E-06
4 5.67976E-06
5 4.70381E-06
6 3.65957E-06
7 2.69824E-06
8 2.06054E-06
9 1.52311E-06
10 1.0627E-06
11 7.88733E-07
12 5.89984E-07
13 4.70111E-07
14 3.62744E-07
15 2.48113E-07
16 1.84463E-07
17 1.28446E-07
18 1.09519E-07
19 9.40524E-08
20 8.20673E-08
然而,gnuplot返回m1 = 2.45e14和m2 = 3.64e9,与(大致正确的)初始值相比,这是错误的和巨大的
我尝试在KaleidaGraph(演示版)中使用完全相同的数据集和拟合函数,其中确实返回正确的结果(如下图所示),如果gnuplot不起作用,可以使用此功能,但是我更喜欢使用gnuplot,因为我可以自动化许多数据文件的过程,因为我不相信KaleidaGraphs有一个命令行终端。
有谁知道为什么gnuplot会返回如此狂野的值?
(如果它有助于我使用Windows 8.1 x64)
非常感谢所有人的帮助, 詹姆斯
答案 0 :(得分:3)
两件事:Gnuplot进行整数除法,因此必须使用3/2.0
来获得正确的指数。
其次,gnuplot中的函数与KaleidaGraph中使用的函数不同:指数必须为正(3/2.0)
,并且必须使用m2
b
:
f(x) = 1/(2*pi) * 1/m1 * 1/(m2 + x**2)**(3/2.0)
m1 = 150
m2 = 17
fit f(x) "data.txt" using 1:2 via m1,m2
这给出了:
...
Final set of parameters Asymptotic Standard Error
======================= ==========================
m1 = 127.11 +/- 11.31 (8.898%)
m2 = 18.1347 +/- 1.54 (8.492%)