Вычисление второй производной интерполированных данных - PullRequest
0 голосов
/ 18 октября 2019

У меня есть 1-D данные из 100 (x,y) пар. Давайте назовем массив x как data_x и массив y как data_y.

Чтобы получить f(x):

import numpy as np
from scipy.interpolate import interp1d
f = interp1d(data_x, data_y, bounds_error=False, fill_value=np.nan)

Чтобы получить f'(x):

def fp(x):
    return (f(x+eps) - f(x))/eps

# where eps is a very small number, for example 1e-3

Чтобы получить f''(x):

def fpp(x):
    return (fp(x+eps) - fp(x))/eps

Для построения графика я использовал следующие команды построения:

numpoints = 100
plot_x = np.linspace(-5, 0, numpoints)
plt.plot(plot_x, f(plot_x))
plt.plot(plot_x, fp(plot_x))
plt.plot(plot_x, fpp(plot_x))

Когда я отображал эти 3 функцииЯ получаю проблемную неровную линию для второй производной. Как мне избавиться от них?

enter image description here

1 Ответ

1 голос
/ 18 октября 2019

Требуется дважды дифференцируемый интерполятор, используйте, например, CubicSpline: CubicSpline(x_data, y_data).derivative(2) - это вызываемый объект, представляющий 2-ю производную. Или, если вы хотите, чтобы производный на месте, используйте CubicSpline(x_data, y_data)(xnew, 2)

...