2015-09-12 3 views
2

Я использую scipy.integrate.quad(f, a, b, args=(c,)) интегрировать функцию f между a и b, добавив еще один параметр c. Вы можете думать о том, как fVectorize scipy.integrate.quad

f = lambda x, y: x*y 

Как я понимаю, функция требует a, b, c быть значения с плавающей точкой. Тем не менее, у меня есть много интегралов для решения, все с той же функцией, только над векторами a, b и c. Итерация по всем векторам весьма неэффективна. Есть ли способ ускорить/векторизовать эту операцию?

+0

Различные 'a' и' b' означает оценку 'f' в разных диапазонах и разное количество интервалов. Это делает невозможным векторизация (думаю, 2d сетка). – hpaulj

+0

@hpaulj при определенных условиях гладкости, по крайней мере, с 'c' в качестве вектора должно быть« легко »выполнимо. – FooBar

+0

'quad' вызывает код FORTRAN, поэтому для того, что он делает, он, вероятно, так же эффективен, как может быть. Так или вы называете это меньше раз более разумным способом. Или вы пишете свой собственный интегратор (или найдите другой), который использует параллелизм (скорее всего, линейность) в вашей проблеме. – hpaulj

ответ

0

Если я хорошо понял проблему, я бы просто запустил функцию по массиву из a,b,c параметров. Так, например, установить массив из двух наборов a,b,c как:

a = np.array([[0.1,0.2,0.3], [0.9,0.8,0.3]]) 

затем установить пустой список для хранения результатов:

L = [] 

и цикл через массив:

for a,b,c in a: 

    b = integrate.quad(f, a, b, args=(c,)) 
    L.append(b) 

результатом является список кортежей:

[(0.004500000000000001, 4.996003610813206e-17), (-0.025499999999999995, 2.8310687127941485e-16)] 

Возможно, есть более элегантный способ, но надеюсь, что это поможет.

+1

Я знаю об этом решении, но он очень неэффективен. Я ищу альтернативу этому. – FooBar

2

Увы, это не поддерживается integrate.quad.

Вы мог найти лучшее везение с помощью гауссовых квадратур себя: scipy.integra.fixed_quad дросселей на array_like входа, но подпрограммы нижнего уровня, которые вычисляют корни и вес должны работы. См. «Корни и веса для ортогональных полиномов», раздел here. YMMV хотя.

Смежные вопросы