У меня есть функция H (t), возвращающая поплавок. Затем я хочу численно вычислить несколько интегралов, связанных с этой функцией. Однако один из интегралов в основном вызывает предыдущий интеграл, например.Сохранение значений функции для будущей интеграции
from scipy.integrate import quad
def H(t):
return t
def G1(t):
return quad(lambda x: H(x)*H(t-x),0,1)[0]
def G2(t):
return quad(lambda x: G1(x)*H(t-x),0,1)[0]
res = quad(G1,0,1) + quad(G2,0,1)
мне нужно будет сделать это для большого числа функций (то есть по-прежнему, как это с G3, G4 ... Gn), и мой конечный результат будет зависеть от всех из них. Поскольку я должен вычислить G1 для многих значений t в любом случае для выполнения quad (G1,0,1), можно ли сохранить эти вычисленные значения и использовать их при вычислении квадранта (G2,0,1)? Я мог бы попытаться написать мою собственную упрощенную интеграционную функцию, но как бы я мог хранить и повторно использовать эти значения?
Существует 'lru_cache' в стандартной библиотеке ([смотрите здесь] (https://docs.python.org/3.4/library/functools.html#functools.lru_cache)) но я не уверен, что это лучший способ решить эту проблему. Можно ли изменить формулу для того, что вы пытаетесь вычислить, то есть напишите формулу на бумаге и попробуйте манипулировать ею, пока вам не нужно только один раз оценить G1? – syntonym
@syntonym К сожалению, пока (пока). Я в основном пишу эту программу, потому что мы еще не знаем, как ее переписать и анализировать, и хотим увидеть некоторые числовые результаты. – Shinja
Тогда я думаю, что lru_cache стоит попробовать. Я не уверен, как именно scipy интегрируется, но он кэширует вызовы функции. Возможно, вам нужно немного настроить размер кеша, чтобы действительно кэшировать все, что захотите. – syntonym