Python中的积分函数(x,y)
我有一个这样的函数:
(np.sqrt((X)**2 + (Y)**2))/(np.sqrt((X)**2 + (Y)**2 + d**2))
我写了一个程序,用级数来计算积分:
for i in range (num): # for X
print i
Y=(-distance)
for j in range(num): # for Y
f=(np.sqrt((X)**2 + (Y)**2))/(np.sqrt((X)**2 + (Y)**2 + d**2))
Y=Y+delta
sum+=(f*(delta**2))/((2*distance)**2)
X=X+delta
print sum
这个程序对我来说运行得很好……但是对于一些复杂的函数,它的运行时间太长了。
有没有什么Python模块可以用来在 -2.0 < X
和 Y < 2.0
的情况下进行积分?(或者其他的解决办法)
2 个回答
0
有一个库可以用来做这个,叫做 scipy.integrate
。
这应该很简单就能搞定:
func = lambda y: (np.sqrt((X)**2 + (Y)**2))/(np.sqrt((X)**2 + (Y)**2 + d**2)) and a == -2 and b == 2
from scipy import integrate
integrate.quad(func, a b)
这样就可以了。如果需要更多信息,可以查看SciPy的文档。
补充:如果遇到问题,确保你使用的是浮点数,而不是整数。
1
我想你是想在 x
从 a
到 b
,以及 y
从 c
到 d
的范围内进行 fun
的积分。要做到这一点,你需要做的是:
import numpy as np
# Define 'd' to whatever value you need
d = 1.
# Function to integrate
fun = lambda x, y: np.sqrt(x**2. + y**2.) / np.sqrt(x**2. + y**2. + d**2.)
# Limits of integration
a, b = -2., 2.
c, d = -2., 2.
gfun = lambda x: c
hfun = lambda x: d
# Perform integration
from scipy.integrate import dblquad
int, err = dblquad(fun, a, b, gfun, hfun)
如果你需要更复杂的积分范围,只需要修改 gfun
和 hfun
。如果你对更高级的功能感兴趣,可以查看 dblquad
的文档:http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.dblquad.html#scipy.integrate.dblquad