使用 gnuplot 进行 3D 拟合

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

我有以下功能

s(x,y,z) = e0 + t*(cos(x)*cos(y) + cos(y)*cos(z) + cos(z)*cos(x))

将三个数据点

x,y,z
映射到单个能量上(这是紧束缚近似中面心立方晶体的色散)。问题是这样的:我有一个数据文件“test.dat”,其格式如下

x1 y1 z1 E1
x2 y2 z2 E2
...

等等。

x1,y1,z1,...
s(x,y,z)
的输入;
E1,...
是已知能量。我想将我的函数
s(x,y,z)
拟合到
E1,...
,使用数据文件中的行号作为自变量,并将
e0,t
作为拟合的参数。我试过了

s(x,y,z) = e0 + t*(cos(x)*cos(y) + cos(y)*cos(z) + cos(z)*cos(x))
e0 = 14.5
t = -5.7

fit s(x,y,z) "test.dat" 0:(s($1,$2,$3)-$4) via e0,t

plot 'test.dat' u 0:(s($1,$2,$3)) w l , 'test.dat' u 0:4 w p

但这引发了错误。有谁知道这是否可以做到?

gnuplot
1个回答
0
投票

如果没有示例数据,我无法检查这一点,但是,我认为您正在指定一个自变量 = 0。来自帮助:

例如,生成自变量 x 作为第 2 列和第 3 列之和,同时从第 6 列获取 z 并要求相等的权重:

fit ... using ($2+$3):6

您正在使用

fit s(x,y,z) "test.dat" 0:(s($1,$2,$3)-$4)

使用数据行号作为 x 将是 ($0) 或列(0)。另外,我认为您想使用第 4 列作为拟合的 z。

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