Как взять производную трилинейной интерполированной функции? - PullRequest
0 голосов
/ 04 февраля 2019

Я новый пользователь python.У меня есть данные трехмерной регулярной сетки в формате h5.Я могу интерполировать (трилинейную интерполяцию) мои данные с помощью RegularGridInterpolator.Но я не знаю, как взять производную от моей интерполированной функции.

(Моя проблема похожа на Как получить специальную производную от интерполированной функции , но там, похоже, не было правильного решения, поэтому я решил спросить еще раз.)

На самом деле, я пытаюсь использовать тот же код этого вопроса ( Как получить специальную производную от интерполированной функции ) для моего файла h5.Мой файл h5 можно скачать по этой ссылке (https://drive.google.com/open?id=1cpnZBGDgbijAH0kJchcecTM5lKasiflp).

Ожидается помощь экспертов.

Мой код:

import numpy as np   
import h5py
import matplotlib.pyplot as plt
from scipy.interpolate import RegularGridInterpolator
f = h5py.File('k.h5', 'r') 
list(f.keys())
dset = f[u'data']
dset.shape
dset.value.shape
dset[0:64,0:64,0:64]
x = np.linspace(-160, 160, 64) 
y = np.linspace(-160, 160, 64)
z = np.linspace(-160, 160, 64)
my_interpolating_function = RegularGridInterpolator((x, y, z), dset.value)
pts = np.array([4.5, 15.3, 18.8]) 
my_interpolating_function(pts)

1 Ответ

0 голосов
/ 04 февраля 2019

Вызов интерполированной функции f (x, y, z) , если вы хотите найти частичное df / dx при (x, y, z) , это просто f (floor (x + 1), y, z) - f (floor (x), y, z) .Производная на самом деле не определена для целочисленных значений x , поскольку она изменяется в этих точках.

Предполагается, что сетка имеет интервал между единицами.

Частицы по другим осяманалогичны.

...