繁体   English   中英

计算直线和插值之间的交点

[英]Calculate intersection between a line and a interpolation

我想计算直线和插值函数之间的交点。 我可以绘制插值以及图中的线:

import matplotlib.pyplot as plt
import numpy as np
import scipy.interpolate as scp

y = [ 815.97,  815.95,  815.98,  ...,  815.9] #60 elements
x = [405383892, 405383894, 405383895, ..., 405383896] #60 elements

mediana = np.median(x)
f = scp.interp1d(x,y,bounds_error=False,fill_value=0.,kind='cubic')
new_x_array = np.arange(min(x),max(x),0.01)
plt.figure()    
plt.plot(new_x_array,f(new_x_array),'r-')
plt.plot([x[0],x[59]], [mediana,mediana], 'g-')
plt.plot(x, y, 'mo')

数字

但是,我没有找到计算红色功能和绿线之间的交叉点的方法。 找到两者之间的交叉点的常用方法是什么?

interp1d在数据点之间进行样条插值。 据我所知,scipy中没有一种方法可以为你提供所有这个插值的域,但是因为它的样条插值可以解决这个问题。

您可以执行以下操作。

  1. 使用splev和friends重建每个子域上的样条多项式,因此您可以使用样条系数==>多项式系数。
  2. 使用每个子域上的多项式,您可以将问题重新表述为每个子域上的多项式二阶(或者您选择插值的顺序)的交集,并使用标准的根查找器(或使用分析解决方案)。
  3. 检查根是否在子域内。 如果是,你找到了一个十字路口。

因此,对于低样条顺序,这应该是直截了当的。

感谢您的回答! 我将来会使用该解决方案。 最后我解决了它寻找接近插值线的值:

index=[]
for pos in range(0,len(new_x_array)-1):
    if (mediana > f(new_x_array[pos])) & (mediana < f(new_x_array[pos+1])):
        index.append(new_x_array[pos])
    if (mediana < f(new_x_array[pos])) & (mediana > f(new_x_array[pos+1])):
        index.append(new_x_array[pos])

索引数组的位置靠近该行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM