任何有助于计算此积分的方法,都使用F
函数定义f
函数,该函数涉及第一次积分,最后积分F
。
from scipy.integrate import quad
f = lambda x,a : a**2*x
def F(s,a):
return quad(f,0,s,args=(a,))
quad(F,0,5,args=(4,))
得到错误:
2 def F(s,a):
3 return quad(f,0,s,args=(a,))
----> 4 quad(F,0,5,args=(4,))
5
446 if points is None:
447 if infbounds == 0:
--> 448 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
449 else:
450 return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit)
TypeError: must be real number, not tuple
答案 0 :(得分:1)
看看scipy.integrate.quad
的返回值:
返回:
y
:float
函数从a到b的积分。
abserr
:float
对结果中绝对误差的估计。...
所以有多个返回值(一个元组),这就是为什么您收到TypeError: must be real number, not tuple
消息的原因。
我想,您只是对整数值quad(...)[0]
感兴趣,因此您的F
应该返回:
from scipy.integrate import quad
f = lambda x, a: a**2 * x
F = lambda x, a: quad(f, 0, x, args=(a,))[0]
I = quad(F, 0, 5, args=(4,))
print(I)
哪些印刷品:
(333.33333333333337, 3.700743415417189e-12)
答案 1 :(得分:0)
解决问题的另一种方法是认识到,您正在将函数a**2 * y
集成到由点[0, 0]
,[5, 0]
和[5, 5]
跨越的三角形上。然后,您可以使用quadpy(我的项目之一)中的三角积分来计算值:
import quadpy
a = 4.0
def g(x):
return a ** 2 * x[1]
scheme = quadpy.triangle.dunavant_05()
val = scheme.integrate(g, [[0.0, 0.0], [5.0, 0.0], [5.0, 5.0]])
print(val)
与嵌套四元方法相比,这需要更少的功能评估。