gpt4 book ai didi

function - gnuplot 忽略多分支拟合中的第二个分支

转载 作者:行者123 更新时间:2023-12-02 00:17:02 25 4
gpt4 key购买 nike

我想用 gnuplot 做一个多分支拟合。我定义了两个函数 z1(x) 和 z2(x),我希望 z1(x) 适合第 49 行之前的所有数据,并且从第 50 行开始它应该适合 z2(x)。这是我在拟合部分所做的:

z(x,y) = (y < 50) ? z1(x) : z2(x)

fit z(x,y) 'data.txt' using 1:-1:2 via a, b

但是 gnuplot 完全忽略了 z2(x) 部分。我什至可以注释掉 z2(x) 的定义,它甚至没有给出错误或警告。它永远不会达到 y >= 50 的情况,但是 data.txt 文件有 100 行。

此外,如果我之后绘制 z1(x) 和 z2(x),它们只是常数零 (z1 = z2 = 0),但拟合参数 a 和 b 大致(不完全,因为第二个分支被忽略) 以正确的顺序。

我是不是做错了什么?是否有一个很好的例子(官方 gnuplot fit 演示没有帮助)?

最佳答案

如果你在 'data.txt' 文件中的行号是你的函数 z(x)x 变量,你可以让它更简单(这是这是工作所必需的,实际上!!!)。您的函数 z(x,y) 实际上只是在两个区间上分别定义的单变量函数 z(x)。我用示例数据文件重新创建了您的问题,其中 z1(x)z2(x) 的范围在我的数据文件的第 10 个点中断(您那里想要 49 或 50)。

下面的代码做你想做的;为前 10 个数据点和其余数据点定义不同的函数 z(x)(这是 x 必须等于行号的地方),

z1(x) = a*x + b
a = 1.2
b = 1.2
z2(x) = a + b
z(x) = x < 10 ? z1(x) : z2(x)

然后使用数据点行号 (column(0)) 作为 x 和相应行 (1) 上的值作为 y 来拟合数据文件,变化参数 ab

 fit z(x) 'data.txt' using (column(0)):1 via a,b

并计划看看我们如何做

 plot 'data.txt' using (column(0)):1, z(x)

如果这不起作用,您可以查看用于绘制数据文件的 index 选项。这将需要用一个空行(或两个,不记得了)分隔数据文件中的数据范围(前 50 个点),并相应地修改脚本。

关于function - gnuplot 忽略多分支拟合中的第二个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12652438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com