Как найти точку перегиба в кривой

Я хочу найти точки перегиба в кривой с помощью python. Пытался найти точки перегиба с помощью сглаживания кривой и второй производной, но что то не получается. В чем собственно загвоздка, у меня есть график и я не знаю как его выразить через одну переменную, чтобы поставить его в фильтр гаусса. Пример кода:

import pandas as pd
import numpy as np
from scipy.ndimage import gaussian_filter
import matplotlib.pyplot as plt

df = pd.read_excel('данные FZI.xlsx') #напиши имя твоего эксель файла с данными
df['porosity*'] = df['пористость']/(1 - df['пористость']) # под кавычками имена столбцов
df['корень'] = (df['проницаемость']/df['пористость'])**0.5 
df['RQI'] = 0.0314 * df['корень']
df['FZI'] = df['RQI']/df['porosity*']
df['log(FZI)'] = np.log(df['FZI'])#тут будет разница между экселевским логарифмом, но это несущественно.

df.sort_values(by='log(FZI)', ascending=True)#сортировка данных по возрастанию
print(df) 
df.to_excel('автоматизация расчет.xlsx') #функция сохранения в эксель

x = df['log(FZI)']
y = df['probability']
fig, ax = plt.subplots()
ax.set_xlabel('log(FZI')
ax.set_ylabel('probability')

smooth = gaussian_filter1d(#тут по идее должен быть график, выраженный одной переменной, 100)

smooth_d2 = np.gradient(np.gradient(smooth))

infls = np.where(#черт его знает что писать)

plt.plot(#переменная выражающая график, label = 'raw data')
plt.plot(smooth, label='Smoothed Data')
plt.plot(smooth_d2 / np.max(smooth_d2), label='Second Derivative (scaled)')

for i, infl in enumerate(infls, 1):
    plt.axvline(x=infl, color='k', label=f'Inflection Point {i}')
plt.legend(bbox_to_anchor=(1.55, 1.0)) 

Пример графика:

Пример графика


Ответы (0 шт):