在两条直线/恒定线之间的曲线上找到两个点/导数

问题描述 投票:0回答:1

我正在绘制x和y点。这将导致一条曲线,该线先弯曲,然后在直线上弯曲一点,一段时间后再次弯曲。我想检索这两点。尽管x是线性的,并且y是相对于x绘制的,但是y并不线性依赖于x。

[我尝试使用matplotlib进行绘图和numpy多项式函数,并且目前正在研究样条线,但是似乎这些y需要直接依赖于x

“

python matplotlib spline
1个回答
0
投票

您的数据很嘈杂,因此您不能使用简单的数值导数。相反,您可能已经发现,应该用样条线拟合它,然后检查样条线的曲率。

禁用this answer,您可以拟合样条曲线并像这样计算二阶导数(曲率):

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline

x = file['n']
y = file['Ds/2']

y_spline = UnivariateSpline(x, y)
x_range = np.linspace(x[0], x[-1], 1000)
y_spline_deriv = y_spl.derivative(n=2)
curvature = y_spline_deriv(x_range)

然后您可以找到直线区域的起点和终点,如下所示:

straight_points = np.where(curvature.abs() <= 0.1)[0]  # pick your threshold
start_idx = straight_points[0]
end_idx = straight_points[-1]
start_x = x_range[start_idx]
end_x = x_range[end_idx]

或者,如果您主要对查找曲线的flattest部分感兴趣(如图所示),则可以尝试计算一阶导数,然后查找斜率在数据中任何地方的最小斜率。在这种情况下,只需在上面的代码中替换y_spline_deriv = y_spl.derivative(n=1)

© www.soinside.com 2019 - 2024. All rights reserved.