在gnuplot的综合xrange

时间:2014-04-16 11:11:50

标签: gnuplot

我有一个定期系统,我想将这个系统的一些数据拟合到一个函数,但我想约束到一个范围。通常,如果您的范围是从x_min到x_max,则可以使用fit [x_min:x_max] f(x) "data" via a,b,c,...来实现。但是,因为我的系统是周期性的,所以我想约束到一个范围,该范围包含x值数组末尾的段以及开头。也就是说,如果在区间[0:L]内给出x值,我想在fit 中包含 [0:x_max][x_min:L],在这种情况下x_max&lt ; x_min。怎么办呢?

2 个答案:

答案 0 :(得分:1)

这个怎么样?

fit [min1:max2] f(x) "data" u 1:($1 <= max1 || $1 >= min2 ? $2 : 1/0) via a,b,c,...

也就是说,将[:]用于外部范围。

我不确定它更好但是它有点短。

或者,您可以通过以下方式使用set table

set table 'newdata'
p [0:x_max] 'data'
p [x_min:L] 'data'
unset table

fit f(x) 'newdata' via a,b,c,...

基本上,这会写入一个仅包含两个范围之间数据的新文件。可以说更好,绝对不会更短!

答案 1 :(得分:0)

我认为这是一种丑陋的方式,但如果有人想出一个更好的方法,我会接受这个答案。

想象一下,您希望拟合(或绘制)数据的两个范围由[min1:max1][min2:max2]给出,然后使用条件拟合和“忽略”函数1/0您可以做到以下几点:

fit f(x) "data" u 1:( ($1 >= min1 && $1 <= max1) || ($1 >= min2 && $1 <= max2) ? $2 : 1/0) via a,b,c,...

也就是说,如果x在第一个区间或第二个区间内,则使用y作为拟合的值,否则忽略这些数据点。

这种方法也适用于情节,但我认为像复合范围运算符[min1:max1 && min2:max2]工作)这样的东西会更合适。