Gnuplot数据与日志函数匹配

Gnuplot数据与日志函数匹配,plot,gnuplot,curve-fitting,Plot,Gnuplot,Curve Fitting,我想用函数f(x)拟合数据,其中f(x)=(K)(xlog(x)+(1-x)log(1-x))+Ax*(1-x)+B*(x)*2(1-x)**2,K,a,B是拟合常数。这就是我到目前为止所得到的,其中绿色实线是拟合曲线。下面是我的gnuplot脚本的和 f(x)= (K)*(x*log(x) + (1-x)*log(1-x)) + A*x*(1-x) + B*(x)**2*(1-x)**2 pl '1417.dat' u 1:2 fit f(x) '1417.dat' u 1:2 via K,A

我想用函数f(x)拟合数据,其中f(x)=(K)(xlog(x)+(1-x)log(1-x))+Ax*(1-x)+B*(x)*2(1-x)**2,K,a,B是拟合常数。这就是我到目前为止所得到的,其中绿色实线是拟合曲线。下面是我的gnuplot脚本的和

f(x)= (K)*(x*log(x) + (1-x)*log(1-x)) + A*x*(1-x) + B*(x)**2*(1-x)**2
pl '1417.dat' u 1:2
fit f(x) '1417.dat' u 1:2 via K,A,B
获得的K=8116.63,A=2.20,B=43692

我需要准确地拟合极小值区域,有人能建议如何拟合偏差较小的区域吗。

我猜您的函数/模型(或数据)一定“出了问题”。 如果
k(x)
a(x)
b(x)
都是
x=0.5
的对称函数,
f(x)
。 3个对称函数之和如何给出一个非对称函数

代码:

### impossible fitting
reset session

FILE = "SO/1417.dat"

k(x) = K*(x*log(x) + (1-x)*log(1-x))
a(x) = A*x*(1-x)
b(x) = B*x**2*(1-x)**2

f(x)= k(x) + a(x) + b(x)

set fit nolog
fit f(x) FILE u 1:2 via K,A,B

plot FILE u 1:2, k(x), a(x), b(x), f(x) lw 2 lc "red"
### end of code
结果:

### impossible fitting
reset session

FILE = "SO/1417.dat"

k(x) = K*(x*log(x) + (1-x)*log(1-x))
a(x) = A*x*(1-x)
b(x) = B*x**2*(1-x)**2

f(x)= k(x) + a(x) + b(x)

set fit nolog
fit f(x) FILE u 1:2 via K,A,B

plot FILE u 1:2, k(x), a(x), b(x), f(x) lw 2 lc "red"
### end of code

我想您的功能/模型(或数据)一定“出了问题”。 如果
k(x)
a(x)
b(x)
都是
x=0.5
的对称函数,
f(x)
。 3个对称函数之和如何给出一个非对称函数

代码:

### impossible fitting
reset session

FILE = "SO/1417.dat"

k(x) = K*(x*log(x) + (1-x)*log(1-x))
a(x) = A*x*(1-x)
b(x) = B*x**2*(1-x)**2

f(x)= k(x) + a(x) + b(x)

set fit nolog
fit f(x) FILE u 1:2 via K,A,B

plot FILE u 1:2, k(x), a(x), b(x), f(x) lw 2 lc "red"
### end of code
结果:

### impossible fitting
reset session

FILE = "SO/1417.dat"

k(x) = K*(x*log(x) + (1-x)*log(1-x))
a(x) = A*x*(1-x)
b(x) = B*x**2*(1-x)**2

f(x)= k(x) + a(x) + b(x)

set fit nolog
fit f(x) FILE u 1:2 via K,A,B

plot FILE u 1:2, k(x), a(x), b(x), f(x) lw 2 lc "red"
### end of code

例如,下面稍微不同的功能允许更好的拟合:


请注意,ln(x)ln(1-x)在x=0和x=1时正好等于零。

例如,下面稍微不同的函数允许更好的拟合:


请注意,ln(x)ln(1-x)在x=0和x=1时正好等于零。

请添加数据和gnuplot脚本。fit函数在[0,1]区域内是对称的。如果将
x
替换为
1-x
everywhere=>您的函数将不会更改,则可以看到这一点。相反,数据是不对称的。因此,拟合函数基本上与数据不匹配。您应该检查数据的物理背景。也许线性项(
+C+D*x
)会有所帮助?@maij我已经添加了数据和脚本请添加您的数据和gnuplot脚本。您的拟合函数在[0,1]区域内是对称的。如果将
x
替换为
1-x
everywhere=>您的函数将不会更改,则可以看到这一点。相反,数据是不对称的。因此,拟合函数基本上与数据不匹配。您应该检查数据的物理背景。也许一个线性项(
+C+D*x
)会有帮助吗?@maij我已经添加了数据和脚本谢谢你的ans。是的,你是对的,我相信我需要添加线性函数,如G1*x+G2*(1-x),其中G1和G2是常数。谢谢你的ans。是的,你是对的,我相信我需要添加线性函数,如G1*x+G2*(1-x),其中G1和G2为常数。