Python:评估数组的积分

问题描述:

import numpy 

import matplotlib.pyplot as plt 

from scipy import integrate 

def f(x,y): 
    return x*y + x**2 

def integral(x,y): 
    I = integrate.quad(f, 0, x, args=(y,))[0] 
    return I 

def gau(x,y): 
    return (1+x)*integral(x,y) 


xlist = numpy.linspace(-3.0, 3.0, 100) 
ylist = numpy.linspace(-3.0, 3.0, 100) 
X, Y = numpy.meshgrid(xlist, ylist) 
Z = gau(2, Y) 

print(Z) 

我一直收到错误消息“提供的函数不返回有效的浮点数。”,我认为问题是我尝试将数组传递给四元函数。我想过用类似的方式评估阵列的每个条目的积分:Python:评估数组的积分

yi=numpy.linspace(-3.0,3.0,100) 
for i, item in enumerate(yi): 
    return integral[i]=integrate.quad(f,0,x,args=(yi,))[0] 

它不起作用,但它是正确的方式?任何其他/更好的建议?

您可以使用通用函数(请参见https://docs.scipy.org/doc/numpy/reference/ufuncs.html),该函数按元素逐个操作数组。您可以使用frompyfunc函数从任何函数创建这些通用函数(https://docs.scipy.org/doc/numpy/reference/generated/numpy.frompyfunc.html):

ugau = numpy.frompyfunc(gau,2,1) 
Z=ugau(X,Y) 
+0

适用于此问题,谢谢! – user7248647

如果你的f()在传递一个数组时不提供有效的float,而不是scipy.integral本身;

你为什么要传递数组到你的f()?