Gnuplot-将函数拟合到某个值,数据文件的最后(第一)行出现问题

Gnuplot-将函数拟合到某个值,数据文件的最后(第一)行出现问题,gnuplot,Gnuplot,最近,在一些简单的策划过程中,我遇到了两个问题 我正在尝试绘制几个函数(我想它的语法可以简单得多),其中每个函数只适合一行数据 数据文件: 11[V] 2.92 4.64 0.04 0.04 0.031[mA] 9[V] 3.32 4.72 0.04 0.04 0.025[mA] 8[V] 3.52 4.76 0.04 0.04 0.022[mA] 7[V] 3.72 4.80 0.04 0.04 0.019[mA] 6[V] 3.92 4.88 0.04 0.04 0.016[mA] 4[V]

最近,在一些简单的策划过程中,我遇到了两个问题

我正在尝试绘制几个函数(我想它的语法可以简单得多),其中每个函数只适合一行数据

数据文件:

11[V] 2.92 4.64 0.04 0.04 0.031[mA]
9[V] 3.32 4.72 0.04 0.04 0.025[mA]
8[V] 3.52 4.76 0.04 0.04 0.022[mA]
7[V] 3.72 4.80 0.04 0.04 0.019[mA]
6[V] 3.92 4.88 0.04 0.04 0.016[mA]
4[V] 4.32 4.92 0.04 0.04 0.010[mA]
Gnuplot命令:

set terminal epscairo color enhanced
set encoding utf8
set xrange[2.8:4.6]
set key left top
set grid
set xlabel 'Napięcie na złączu kolektor-emiter [V]'
set ylabel 'Prąd płynący przez złącze kolektor-emiter [mA]'
set output "dat1_2.eps"
f1(x)=a1*tanh(x)
fit f1(x) "dat1_2.dat" every ::::1 u 2:(($3-0.65)/0.25) via a1
f2(x)=a2*tanh(x)
fit f2(x) "dat1_2.dat" every ::1::2 u 2:(($3-0.65)/0.25) via a2
f3(x)=a3*tanh(x)
fit f3(x) "dat1_2.dat" every ::2::3 u 2:(($3-0.65)/0.25) via a3
f4(x)=a4*tanh(x)
fit f4(x) "dat1_2.dat" every ::3::4 u 2:(($3-0.65)/0.25) via a4
f5(x)=a5*tanh(x)
fit f5(x) "dat1_2.dat" every ::4::5 u 2:(($3-0.65)/0.25) via a5
f6(x)=a6*tanh(x)
fit f6(x) "dat1_2.dat" every ::5 u 2:(($3-0.65)/0.25) via a6
#there is a long plotting line below
plot "dat1_2.dat" using 2:(($3-0.65)/0.25):4:($5/0.25) with xyerrorbar title "Zależność zmierzona", "dat1_2.dat" u ($2+0.07):(($3-0.65)/0.25-0.05):6 with labels notitle font 'Verdana,7.5', f1(x) notitle lt rgb "blue", f2(x) notitle lt rgb "blue", f3(x) notitle lt rgb "blue", f4(x) notitle lt rgb "blue", f5(x) notitle lt rgb "blue", f6(x) notitle lt rgb "blue"
其结果是:

[...]
variance of residuals (reduced chisquare) = WSSR/ndf   : 0.0116479
Final set of parameters            Asymptotic Standard Error
=======================            ==========================
a5              = 17.0097          +/- 0.07636      (0.4489%)
         Read 1 points
         line 0: No data to fit

         line 0: undefined variable: a6
我几乎不知道如何让gnuplot使用最后一行(第一行?)。做一个简单的把戏,将数据文件的最后一行加倍,会产生预期的结果,但对我来说太糟糕了,我想了解这里发生了什么

第二个问题是,如何使gnuplot适合函数通过某个点。让我来说明我的意思:


如您所见,拟合函数不会“通过”计算值(忽略误差条)。这对我来说是相当令人惊讶的,因为只有一个点适合我,我希望gnuplot做我提到的事情。什么命令可以以这种期望的方式安装f函数?

使用
每个:::0或
每个::1::2
您选择两个点,通过这两个点gnuplot可以安装,但是
每个::5
只选择一个gnuplot无法安装的点

然而,根据你的解释,我得出结论,你只需要在给定一个点的情况下计算正确的比例因子。如果单行中的值是
x0
y0
,则通过这一点的函数是

f0(x) = (y0 - 0.65)/(0.25 * tanh(x0)) * tanh(x)
为了获得正确的计算点,我首先绘制单个点,同时将坐标保存在两个变量中,随后用于绘制相应的函数:

y(ydat) = (ydat - 0.65)/0.25
plot "dat1_2.dat" using (x0=$2):(y0=y($3)):4:($5/0.25) every ::::0 with xyerrorbars title "first",\
 y0/tanh(x0) * tanh(x) lc rgb "blue" notitle
使用自gnuplot 5.2以来可用的
数组
,可以在所有行上以循环的方式很好地绘制:

y(ydat) = (ydat - 0.65)/0.25
set xrange [2.8:4.6]
N = 6
array X[6]
array Y[6]
array Labels[6] = [ "first", "second", "third", "fourth", "fifth", "sixth" ]
plot for [i=1:N] "dat1_2.dat" using (X[i]=$2):(Y[i]=y($3)):4:($5/0.25) every ::(i-1)::(i-1) with xyerrorbars title Labels[i],\
     for [i=1:N] Y[i]/tanh(X[i]) * tanh(x) lc rgb "blue" notitle