Linux gnuplot与非线性函数的拟合问题

Linux gnuplot与非线性函数的拟合问题,linux,gnuplot,curve-fitting,Linux,Gnuplot,Curve Fitting,我有一组数据想要使用函数f(x)=exp(A+B/(x-x0))与gnuplot配合,其中A,B和x0是我要配合的参数集 # x f(x) 0.382 8.29023731095968 0.509 6.36124122026352 0.637 4.66938977764103 0.764 3.3194714217965 0.891 2.15140777817893 1.019 1.15428884806615 1.146 0.262232461832655 我已经试过了 fit

我有一组数据想要使用函数
f(x)=exp(A+B/(x-x0))
与gnuplot配合,其中
A
B
x0
是我要配合的参数集

# x   f(x)
0.382 8.29023731095968 
0.509 6.36124122026352 
0.637 4.66938977764103 
0.764 3.3194714217965
0.891 2.15140777817893
1.019 1.15428884806615 
1.146 0.262232461832655 
我已经试过了

fit log(f(x)) 'data.dat' using 1:(log($2)) via A, B, x0
还将函数定义为
f(x)=A+B/(x-x0)
,并用

fit f(x) 'data.dat' using 1:(log($2)) via A, B, x0
然后
plot exp(f(x))


代码可以工作,但拟合参数不好,因为当我将曲线和点一起绘制时,没有意义。对于gnuplot来说,这种拟合是否太复杂?

如果您有一个不合适的函数,或者如果您有可能使拟合过程难以收敛的起始值,拟合可能会失败。 在你的例子中,我想
x0
是一个重要的参数。您应该稍微帮助gnuplot拟合算法,以便有机会找到合理的值。在这里,我想
x0=1.5
是一个合理的起始值。如果这还不够,如果您的模型允许,您可能希望添加额外的变量或术语以获得更好的拟合

代码:

### fitting with appropriate starting values
reset session

$Data <<EOD
0.382 8.29023731095968
0.509 6.36124122026352
0.637 4.66938977764103
0.764 3.3194714217965
0.891 2.15140777817893
1.019 1.15428884806615
1.146 0.262232461832655
EOD

A = 1
B = 1
x0 = 1.5
f(x) = exp(A + B/(x-x0))
set fit nolog

fit f(x) $Data u 1:2 via A,B,x0

plot $Data u 1:2 w lp pt 7 ti "Data",\
     f(x) w l lc rgb "red" ti "Fit"
### end of code
Final set of parameters            Asymptotic Standard Error
=======================            ==========================
A               = 4.61445          +/- 0.3907       (8.466%)
B               = 3.57094          +/- 0.8876       (24.86%)
x0              = 1.80616          +/- 0.1371       (7.593%)