#python #numpy #curve-fitting #spline
#python #numpy #подгонка кривой #сплайн
Вопрос:
Я пытаюсь подогнать кривую, используя LSQUnivariateSpline.
from scipy.interpolate import LSQUnivariateSpline, UnivariateSpline
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 50)
y = np.exp(-x**2) 0.1 * np.random.randn(50)
t = [-2, -1, 0, 1, 2]
spl = LSQUnivariateSpline(x, y, t, k=4 )
xs = np.linspace(-3, 3, 1000)
plt.plot(x, y, 'ro', ms=5)
plt.plot(xs, spl(xs), 'g-', lw=3)
plt.show()
Этот код приводит к приведенному ниже графику.
Я хочу объявить граничные условия, такие как dy / dx = 0 или d2x / dy = 0. Есть ли способ или другая функция подгонки кривой с граничными условиями?
Комментарии:
1. Вы пытаетесь создать кусочную функцию, в которой вы используете LSQUnivariateSpline в середине графика и меняете на какую-то линейную функцию в концах?
2. @Jack Moody Да, вы правы. Я хочу добавить ограничение в начале и в конце. В конце я хочу получить кусочный многочлен с применяемыми граничными условиями. x’ = 0 или x» = 0.
3. Лично я бы подогнал данные к уравнению, используя curve_fit() scipy, у вас есть какая-то особая причина для использования сплайна?
4. @Джеймс Филипс Я создаю тестовые данные для сравнения результатов системы, которая создает кусочные полиномы в качестве выходных данных.
5. Теоретически все сплайны должны иметь дело с граничными условиями тем или иным способом. Однако в случае
scipy.interpolate
у вас есть базовые подпрограммы FORTRAN. Чтобы выяснить, как это делается, вам, вероятно, придется покопаться в них. С другой стороны, если ваш случай не слишком общий, вы могли бы попробовать запрограммировать некоторую подгонку сплайнов для себя. Это не слишком сложно.