首页 > 解决方案 > 如何使用gnuplot在拟合()中的多项式曲线中的系数始终具有正值?

问题描述

我正在尝试对以下函数进行多项式拟合。我希望系数“p003”始终为正值。是否有任何选项可用于在 gnuplot 中对 p003 设置该约束?

我尝试设置 p003 >= 0,但这会导致语法错误。

h1(x,y,t) = 1/(p000+p100*x+p010*y+p001*t+p200*x*x+p020*y*y+p002*t*t+p110*x*y+p011*y*t+p101*x*t+p003**2*t*t*t);
fit h1(x,y,t) "data.txt" u 1:2:3:5:(1) via p000,p100,p010,p001,p200,p020,p002,p110,p011,p101,p003;

@Ethan 发表评论后的编辑版本。

h1(x,y,t) = 1/(p000+p100*x+p010*y+p001*t+p200*x*x+p020*y*y+p002*t*t+p110*x*y+p011*y*t+p101*x*t+s3**2*t*t*t);
fit h1(x,y,t) "result_mutual_-1_-1_0.15_0.25_0.2_0.85_0.2_-1_0.098_0.098_0.098_JBE_JW.txt" u 1:2:3:5:(1) via p000,p100,p010,p001,p200,p020,p002,p110,p011,p101,s3;
p003 = sqrt(s3);

编辑:描述问题

在等式中,x 和 y 被设置为特定值。因此 h1(x,y,t) 变为 h1(constant1, constant2, t)。然后我们绘制随着 t 变化的 h1 的值。这里的't'是距离,并且t>0。

标签: gnuplotcurve-fitting

解决方案


定义您的函数并根据虚拟参数 ( s3**2) 进行拟合,然后设置 p003 = s3**2

澄清:

h1(x,y,t) = 1/(p000+p100*x+p010*y+p001*t+p200*x*x+p020*y*y+p002*t*t+p110*x*y+p011*y*t+p101*x*t+ (s3**2) *t*t*t)
fit h1(x,y,t) "result_mutual_-1_-1_0.15_0.25_0.2_0.85_0.2_-1_0.098_0.098_0.098_JBE_JW.txt" u 1:2:3:5:(1) via p000,p100,p010,p001,p200,p020,p002,p110,p011,p101,s3
p003 = s3**2

这样做的缺点是必须对 s3 报告的协方差和误差估计进行适当的校正才能适用于 p003 本身。


推荐阅读