使用列的对数拟合 gnuplot

问题描述 投票:0回答:1

我在拟合数据集来计算温度计的响应时间时遇到一些麻烦。所以我的数据集的形式为

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))

谢谢!

plot gnuplot curve-fitting
1个回答
1
投票

我认为

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}

这真的是你想要的吗?

© www.soinside.com 2019 - 2024. All rights reserved.