python - 四元组.错误 : Supplied function does not return a valid float in python

标签 python numpy

我想对 (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.

请有人告诉我如何修复此错误,并提前谢谢您。

最佳答案

正如错误所示,您的 fun 函数应该返回一个 float 但返回的是一个 2D 数组:

[[ 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

关于python - 四元组.错误 : Supplied function does not return a valid float in python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22729857/

相关文章:

python - 在 cython 中向量化具有两个数组作为输入的类的函数

python - CMake - 安装问题以制作包

python - Python2.6有新式版本 `UserDict`吗?

python - 访问 Pandas 中的最后 X 行应用

python - 在 numpy 或 pandas 中处理巨大的数字

python - 如何延长 pandas 数据框中的日期

python - 如何混合一种热编码和词袋

python - PIL 和使用 asyncio 的阻塞调用

python - 在antlr4 python目标中重用词法分析器对象

python - 多个置信区间