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

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

Figure

但是,我找不到计算红色函数和绿线之间交点的方法。找到两者之间的交集的通常方法是什么?

最佳答案

interp1d在数据点之间进行样条插值。 据我所知,scipy 中没有任何方法可以为您提供此插值域上的所有根,但因为它的样条插值可以解决此问题。

您可以执行以下操作。

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

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

关于python - 计算直线和插值之间的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34930713/

相关文章:

python - if 和 else 用于列表理解

php - 在 Web 服务器上处理长时间运行任务的最佳方式

python - 使用 Stanford NLP(StanfordNERTagger 和 StanfordPOSTagger)为西类牙语设置 NLTK

python - 每次特定列的字符串内容发生变化时从 0 重新启动索引

python - 如何添加关于夏令时时区的每周时间增量

python - 根据另一列的三个条件设置一列的值

python - NumPy 中可以使用分层广播吗?

javascript - 如何显示有多少人在我的网站上注册?

python - pandas 数据框中前几行的累积计数

用于手 Action 业提交 Maya 到截止日期的 Python 命令(包括提交 maya 场景文件)