Интеграция с использованием квадратуры - PullRequest
3 голосов
/ 22 февраля 2012

У меня были некоторые проблемы с использованием квадратурной функции в Python 2.7 (часть модуля scipy.integrate).Уравнение, которое я пытаюсь интегрировать, просто:

x/(d^2) - (x^2)

Интеграция между пределами a и b.Однако мне нужно выполнить интегрирование при 40 различных значениях d, и я не уверен, как передать второй аргумент, чтобы зациклить интеграцию по значениям d.Любая помощь будет высоко ценится и квадратура лучший способ оценить эту проблему.

Ответы [ 3 ]

3 голосов
/ 22 февраля 2012
In [9]: from scipy.integrate import quad

In [10]: a = 0

In [11]: b = 1

In [12]: [quad(lambda x, d: x/(d**2)-x**2, a, b, args=d) for d in range(2, 5)]
Out[12]: 
[(-0.20833333333333334, 2.3717550132075781e-15),
 (-0.27777777777777773, 3.0886887822595405e-15),
 (-0.30208333333333337, 3.3546344203581545e-15)]

Измените for d in range(2, 5) при необходимости.

2 голосов
/ 22 февраля 2012
from numpy import arange
from scipy.integrate import quad
beg = 0.
end = 4.
res = []
for d in arange(1., 40.):
    res.append(quad(lambda x: x/(d**2.)-(x**2.), beg, end))

Затем вы можете получить доступ к результатам по

print res[0]

или даже

print res
0 голосов
/ 07 ноября 2016

Если вы хотите точную символьную интеграцию, вам нужно обратиться к SymPy . Попробуйте

import sympy

x = sympy.Symbol('x')
a = sympy.Symbol('a')
b = sympy.Symbol('b')
d = sympy.Symbol('d')

res = sympy.integrate(x / (d**2 - x**2), (x, a, b))
print(res)

Возвращает

log(a**2 - d**2)/2 - log(b**2 - d**2)/2

, который вы можете наиболее легко использовать для оценки ваших данных.

...