在 Gnuplot 中处理数组和拟合函数

计算科学 曲线拟合 gnuplot
2021-11-29 10:29:58

我想评估不同体积的 Birch-Murnaghan 状态方程 (BM-EOS)。
我尝试声明一个一维数组A,其中每个元素都是 BM-EOS 对不同卷的答案。

B0P = 4; B0 = 30
V0 = 36; E0 = -535; R4  = -535
array A[400]
do for [i=1:400] {
A[i] = E0+(9/8*B0*V0)*((V0/((((i/100)**3)/100)**3))**(2/3)-1)**2\
         + 9/16*B0*(B0P-4)*V0*((V0/((i/100)**3))**(2/3)-1)**3\
         + R4*((V0/((i/100)**3))**(2/3)-1)**4
}   

我收到错误消息undefined value谁能告诉这个 Gnuplot 代码有什么问题?
稍后我将使用stats命令A来找到最小值。此外,还有其他更好的方法来找出 Gnuplot 中拟合函数的最小值吗?这个答案没有多大帮助:Gnuplot:如何确定 gnuplot 中拟合函数的最大值?

1个回答

您必须在所有应该是浮点数的数字上加上一个点,以便在进行除法时正确。在 gnuplot 中

2/3 = 0

2.0/3.0 = 0.66666..7

在您的示例中,您正遭受被零除的困扰,但 gnuplot 没有给出好的错误消息。

这是运行没有任何错误的更正版本

B0P = 4.0; B0 = 30.0
V0 = 36.0; E0 = -535.0; R4  = -535.0
array A[400]
do for [i=1:400] {
   A[i] = E0+(9.0/8.0*B0*V0)*((V0/((((i/100.0)**3)/100.0)**3))**(2.0/3.0)-1.0)**2\
     + 9.0/16.0*B0*(B0P-4.0)*V0*((V0/((i/100.0)**3))**(2.0/3.0)-1.0)**3\
     + R4*((V0/((i/100.0)**3))**(2.0/3.0)-1.0)**4
} 

我每天都使用 Gnuplot,并且非常喜欢它来绘图。但它并不是真正为计算而设计的。你为什么不为此使用python?