Проблема: Я хочу, чтобы численно интегрировать функцию f(t,N)
, которая может быть записана в виде линейной комбинации N других известных функций g_1(t), ..., g_N(t)
.Линейная комбинация функции объектов в Python
Мое решение I: Я знаю функции g_i
, а также коэффициенты, так что моя первоначальная идея состояла в том, чтобы создать вектор-строку коэффициентов и вектор-столбец, содержащий лямбда-функции g_i
, а затем использовать np.dot
для внутреннего продукта получить объект функции, который я хочу. К сожалению, вы не можете просто добавить два объекта функции и не умножать объект функции на скаляр.
My Solution II: Конечно, я могу сделать что-то подобное (в основном определение точечно, что я хочу):
def f(t,N,a,g):
"""
a = numpy array of coefficients
g = numpy array of lambda functions corresponding to functions g_i
"""
res = 0
for i in xrange(N):
res += a[i] * g[i](t)
return res
Но петля for
, конечно, не очень велика, особенно когда:
- мне нужно запустить эту функцию в много много шагов по времени т
- я прохожу эту функцию п в числовую интеграции рутину, как scipy.integrate.quad.
Если ваш 'g [i]' - полиномы, то вы можете легко их комбинировать заранее, используя класс полиномов. Но если это не так, я думаю, вы застряли, называя их в цикле для каждого 't'. –
как насчет использования numexpr, cython, anano или sympy? –
@ PM2Ring: они являются синусами и косинусами и образуют усеченный базис L^2 [0,1]. Таким образом, не существует способа сразу вызвать массив лямбда-функций? – sbm