只考虑splrep的高点吗?

时间:2018-09-30 14:35:22

标签: python numpy scipy

我有在不同时间和略有不同的位置获取的数据,因此高点和低点形成了一个“通道”。我正在尝试找到这些点的平均线,所以基本上在“通道”中间是什么

使用简单的5阶多项式拟合(numpy.polyfit(x,y,5)),我得到以下结果,其中拟合恰好位于由两个数据点组成的“通道”的中间(因此,红线很ack在蓝点中间。 Polyfit attempt

唯一的问题是,我排除了这个多边形拟合中相当关键的数据点,因为它弄乱了一切(这是半径= 1的管道中的流体流动。我不包括no-slip point,就是(1,0),并且确实弄糟了。)

要对此进行排序,我尝试使用样条拟合(scipy.interpolate.splrep)。但是,在玩了一段时间之后,似乎只关心“通道”的上限值,直到x = 0.8为止: spline fit 1

^这没有任何设置更改(所以只有splrep(x,y)spline fit 2

^这是一些结(splrep(x,y,t=knotsspline fit 3

^这是指定平滑度(splrep(x,y,s=5)

在数据中添加“防滑点”确实可以达到预期的效果(即,将高速数据映射为相同,但仍将边界层映射到墙),但是仍然存在其他问题: spline fit with no-slip point

样条曲线表示功能是否正常?如何兼顾高低点数据?

注意:图中的“文件点”仅是在特定点处评估的样条线。随意忽略它。

1 个答案:

答案 0 :(得分:1)

弄清楚了。我没有按最低顺序->最高顺序排列数据。 splrep函数仅考虑一半的数据,这是由于从csv导入数据时的顺序。

因此数据的组织方式为:

          r          V
0   0.92429  131.53931
1   0.88794  138.36454
2   0.83497  143.48595
3   0.75709  145.97411
4   0.69744  147.68532
5   0.63446  149.08677
6   0.56649  149.71351
7   0.51182  152.04439
8   0.45214  152.98041
9   0.38584  153.91706
10  0.25822  156.72013
11  0.13891  160.14254
12  0.01124  160.30995
13  0.11973  161.09784
14  0.26564  160.64686
15  0.36184  158.64068
16  0.42159  155.70073
17  0.49953  154.93309
18  0.55924  153.54353
19  0.61233  151.99828
20  0.67537  149.98889
21  0.74504  148.13517
22  0.80649  142.71477
23  0.88122  136.05535
0   1.00000    0.00000

因此,它仅考虑了数据点0-> 12。一旦我更改了它,然后将所得的样条线应用于所有数据:

enter image description here

拟合仍然很粗糙,但是现在我至少有一个起点。

编辑:这是经过一些平滑处理后的结果。注意,样条函数现在实际上在点之间传递:

Smoothed spline