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

Python 计算直线和插值之间的交点,python,Python,我想计算直线和插值函数之间的交点。我可以绘制插值以及图中的线条: 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 median

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

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')

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

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

您可以执行以下操作

  • 使用splev和friends在每个子域上重建样条多项式,这样就得到了样条曲线系数==>多项式系数
  • 使用每个子域上的多项式,您可以将问题重新表述为每个子域上的多项式二阶(或您为插值选择的阶数)的交点,并为此使用标准的根查找器(或使用解析解)
  • 检查根是否在子域内。如果是,您已找到一个十字路口

  • 所以对于低阶样条曲线,这应该是直截了当的。

    谢谢你的回答!我将在将来使用该解决方案。 最后,我通过寻找接近插值线的值来解决它:

    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])
    
    index=[]
    对于范围内的位置(0,len(新的_x_阵列)-1):
    如果(mediana>f(新数组[pos])和(medianaf(新数组[pos+1]):
    追加索引(新的数组[pos])
    
    索引数组的位置靠近直线