我在拟合数据集来计算温度计的响应时间时遇到一些麻烦。所以我的数据集的形式为
Time (s) - Temperature (K)
0.4820 295.0772
0.4840 295.0772
0.4860 295.1651
0.4880 295.1651
0.4900 295.1651
0.4920 295.2531
0.4940 295.2091
0.4960 295.2531
0.4980 295.2972
0.5000 295.3412
0.5020 295.2972
0.5040 295.3853
0.5060 295.3412
我只想通过执行操作来线性化第二列
y = log($2 - 325.6)
所以我这样写了我的 .gp 文件
f(x) = a*x+b
fit f(x) 'termom_COST_SCALED.txt' via a, b u 1:(log($2 - 325.6))
p 'termom_COST_SCALED.txt' u 1:(log($2 - 325.6)) title 'T(t)',
f(x) title "Linear fit"
但不知何故不起作用,即使我绘制的图表没有拟合
p 'termom_COST_SCALED.txt' u 1:(log($2 - 325.6))
结果是所需的图表,我想从中进行拟合。是不是fit的语法错了?
via a, b u 1:(log($2 - 325.6))
谢谢!
我认为
using
应该出现在 via
之前,并且您应该使用 every ::1
: 忽略数据文件中的标头
f(x) = a*x+b
fit f(x) 'termom_COST_SCALED.txt' u 1:(log($2 - 325.6)) every ::1 via a,b
p 'termom_COST_SCALED.txt' u 1:(log($2 - 325.6)) every ::1 title 'T(t)',\
f(x) title "Linear fit"
pause mouse
语法现在正确了。
你的第二列接近295,这意味着
$2-325.6
接近-31,并且它的日志会很复杂:
gnuplot> print log(-31)
{3.43398720448515, 3.14159265358979}
这真的是你想要的吗?