«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как найти точные нулевые и ненулевые точки пересечения на графиках с помощью линейной интерполяции в Python?

Как найти точные нулевые и ненулевые точки пересечения на графиках с помощью линейной интерполяции в Python?

Опубликовано 4 ноября 2024 г.
Просматривать:621

How to Find Exact Zero and Non-Zero Intercepts on Plots Using Linear Interpolation in Python?

Нахождение пересечений кривой с нулем

В Python получение точных значений оси Y из графика может оказаться сложной задачей, если значение не является целое число. В этой статье рассматривается эта проблема и представлено решение, основанное на линейной интерполяции.

Для двух массивов (vertical_data и градиент(temperature_data)), график создается с помощью plt.plot. Однако на графике отображается значение y, близкое к нулю, но не совсем равное нулю.

Линейная интерполяция для оценки корня

Чтобы оценить точный корень массива numpy , можно использовать простой метод линейной интерполяции. Следующий код демонстрирует, как найти нулевые значения произвольной кривой:

import numpy as np

def find_roots(x, y):
    s = np.abs(np.diff(np.sign(y))).astype(bool)
    return x[:-1][s]   np.diff(x)[s]/(np.abs(y[1:][s]/y[:-1][s]) 1)

x = .4 np.sort(np.random.rand(750))*3.5
y = (x-4)*np.cos(x*9.)*np.cos(x*6 0.05) 0.1

z = find_roots(x,y)

plt.plot(x,y)
plt.plot(z, np.zeros(len(z)), marker="o", ls="", ms=4)

Этот код определяет корни кривой и отображает их в виде кругов при точном нулевом значении y.

Ненулевые точки пересечения

Тот же подход можно использовать для поиска пересечения кривой с любым ненулевым значением y -value (y0), изменив строку, которая находит корни:

z = find_roots(x,y-y0)

Два пересечения кривых

Метод линейной интерполяции также можно использовать для поиска пересечения двух кривых. Найдя корни разности между двумя кривыми, мы можем оценить точку их пересечения:

y2 = (x - 2) * np.cos(x * 8.) * np.cos(x * 5   0.03)   0.3

z = find_roots(x,y2-y1)

plt.plot(x,y1)
plt.plot(x,y2, color="C2")
plt.plot(z, np.interp(z, x, y1), marker="o", ls="", ms=4, color="C1")
Заявление о выпуске Эта статья перепечатана по адресу: 1729465881. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3