如何使用 `scipy.integrate.quad` 计算依赖于另一个函数积分的函数的积分
How to use `scipy.integrate.quad` to compute integral of a function which depends on the integral of another function
计算此积分的任何帮助,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
查看 scipy.integrate.quad
的 return 值:
Returns:
y
: float
The integral of func from a to b.
abserr
: float
An estimate of the absolute error in the result.
...
所以有多个 return 值(一个元组),这就是您收到 TypeError: must be real number, not tuple
消息的原因。
我想,您只是对整数值 quad(...)[0]
感兴趣,所以这就是您的 F
应该 return:
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)
看待问题的另一种方式是意识到您正在对点 [0, 0]
、[5, 0]
和 [=14] 所跨越的三角形积分函数 a**2 * y
=].然后,您可以使用 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)
这应该比嵌套四边形方法需要更少的函数评估。
计算此积分的任何帮助,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
查看 scipy.integrate.quad
的 return 值:
Returns:
y
:float
The integral of func from a to b.
abserr
:float
An estimate of the absolute error in the result....
所以有多个 return 值(一个元组),这就是您收到 TypeError: must be real number, not tuple
消息的原因。
我想,您只是对整数值 quad(...)[0]
感兴趣,所以这就是您的 F
应该 return:
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)
看待问题的另一种方式是意识到您正在对点 [0, 0]
、[5, 0]
和 [=14] 所跨越的三角形积分函数 a**2 * y
=].然后,您可以使用 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)
这应该比嵌套四边形方法需要更少的函数评估。