Gnuplot数据与日志函数匹配
我想用函数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脚本的和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)= (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为常数。