quadpack.error:提供的函数没有返回有效的浮点数

2 投票
1 回答
3959 浏览
提问于 2025-04-18 00:25

我想要对一个函数进行积分,积分的变量是(z),而(x)和(y)是作为参数传入的。我的目标是得到在不同位置(x,y)的积分结果。在这种情况下,我应该能得到16个积分值,分别对应于(x1,y1)、(x1,y2)……(x2,y1)……等等。

这是我的代码:

 import numpy as np
 import math
 import scipy.integrate

 a = 5
 b = 6
 xn=np.linspace(0,3,4)
 yn=np.linspace(3,6,4)

 x,y=np.ix_(xn,yn)


 def fun(z,x,y):
     model=(x**2/a**2+y**2/b**2+z**2/a**2)**0.5
     #print(model)
     return model

 def int(x,y):
     int=scipy.integrate.quad(fun,0,10,args=(x,y,))[0]
     print (int)
     return int
 integral = int(x,y)
 print (integral)

但是我收到了这个错误信息:

 ....
 int=scipy.integrate.quad(model,0,10,args=(x,y,))[0]
 File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-  
 packages/scipy/integrate/quadpack.py", line 254, in quad
 retval = _quad(func,a,b,args,full_output,epsabs,epsrel,limit,points)
 File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site- 
 packages/scipy/integrate/quadpack.py", line 319, in _quad
 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
 quadpack.error: Supplied function does not return a valid float.

请问有没有人能告诉我怎么解决这个错误,提前谢谢大家。

1 个回答

3

根据错误提示,你的 fun 函数应该返回一个 float(也就是一个小数),但现在却返回了一个二维数组:

[[ 1.11803399  1.20185043  1.30170828  1.41421356]
 [ 1.13578167  1.21837779  1.31698308  1.42828569]
 [ 1.18743421  1.26666667  1.36177988  1.46969385]
 [ 1.26885775  1.34329611  1.43333333  1.53622915]]

你正在使用的这个函数应该在某个参数范围内计算出一个单一的数字。

如果你想做的是N维积分,建议你看看 scipy.integrate.nquad 这个工具。

撰写回答