Кусочно-линейная функция: пересечение базовой линии и тангенса точки перегиба
Я пытаюсь найти пересечение линейного соответствия с базовой линией и касательной через точку перегиба в данном наборе данных. Я могу получить значение y для второй производной, но я не знаю, как получить соответствующее значение x и как разделить функцию на две части. Я очень ценю вашу помощь!
from scipy import optimize
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
x=[ 25.257 25.887 26.565 27.223 27.892 28.56 29.238 29.896 30.555
31.233 31.911 32.579 33.238 33.916 34.584 35.243 35.911 36.551
37.228 37.906 38.546 39.214 39.863 40.531 41.2 41.878 42.536
43.205 43.873 44.522 45.19 45.83 46.508 47.176 47.835 48.503
49.171 49.82 50.479 51.138 51.816 52.484 53.143 53.811 54.479
55.147 55.816 56.474 57.143 57.801 58.479 59.128 59.806 60.474
61.143 61.821 62.47 63.128 63.797 64.475]
y=[7009.2 6920.9 6898.5 7067.2 3647.9 6973.4 6601.8
6862. 6697.8 6673.1 6537.8 6427.1 6888.3 6768.3
6578.8 6678.7 6543.4 6794.5 6558.5 6952.2 6741.4
6577.4 6728.1 6740.1 6618.8 6580.1 6801.5 6498.6
6417.2 6503.3 6386.5 5991.4 6271.2 5630.6 6001.3
6196.2 6381. 5783.4 5721.8 6024. 6015.6 6133.7
5987. 5607.4 6129.7 6211.1 7037.3 8266.7 11961.
17120. 21857. 29003. 36856. 47164. 58358. 65570.
77873. 88707. 109440. 129630.]
tck = interpolate.splrep(x, y, k=2, s=0)
xnew = np.linspace(25, 65)
fig, axes = plt.subplots(3)
axes[0].plot(x, y, 'x', label = 'data')
axes[0].plot(xnew, interpolate.splev(xnew, tck, der=0), label = 'Fit')
axes[1].plot(x, interpolate.splev(x, tck, der=1), label = '1st dev')
dev_2 = interpolate.splev(x, tck, der=2)
axes[2].plot(x, dev_2, label = '2st dev')
turning_point_mask = dev_2 == np.amax(dev_2)
axes[2].plot(x[turning_point_mask], dev_2[turning_point_mask],'rx',
label = 'Turning point')
for ax in axes:
ax.legend(loc = 'best')
plt.show()