Ваша проблема в том, что ваши входные x-координаты находятся в порядке убывания .UnivariateSpline
ожидает, что они будут в возрастающем порядке.
Ниже приведена более компактная версия вашего кода, которая воспроизводит проблемы, с которыми вы столкнулись.(Ожидается, что данные, которые вы имели в своем вопросе, будут в файле с именем data.txt
).
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
data = np.loadtxt('data.txt')
x = data[:,0]
y = data[:,1]
spline = UnivariateSpline(x, y, s=0)
xi = np.linspace(x.min(), x.max(), 1000)
yi = spline(xi)
p1 = plt.plot(x, y, 'bo', label='Original Points')
p2 = plt.plot(xi, yi, 'g', label='Interpolated Points')
plt.legend()
plt.show()
Очевидно, что это не сработало.
Однако, если вы посмотрите на свои входные данные, ваши координаты "x" будут в порядке убывания.Если мы просто поменяем местами входные данные "x" и "y", это прекрасно работает.
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
data = np.loadtxt('data.txt')
x = data[:,0][::-1] # Reversing the input data...
y = data[:,1][::-1]
spline = UnivariateSpline(x, y, s=0)
xi = np.linspace(x.min(), x.max(), 1000)
yi = spline(xi)
p1 = plt.plot(x, y, 'bo', label='Original Points')
p2 = plt.plot(xi, yi, 'g', label='Interpolated Points')
plt.legend()
plt.show()