我有以下功能
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
但这引发了错误。有谁知道这是否可以做到?
如果没有示例数据,我无法检查这一点,但是,我认为您正在指定一个自变量 = 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。