我有一个定期系统,我想将这个系统的一些数据拟合到一个函数,但我想约束到一个范围。通常,如果您的范围是从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。怎么办呢?
答案 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]
(不工作)这样的东西会更合适。