python - 如何在没有 SymPy 的情况下计算给定函数的积分?
问题描述
我很难创建一个简单的 for 循环代码来集成给定的函数而不使用SymPy
. 我正在考虑使用某种黎曼近似,但我不知道如何准确地做到这一点。我到目前为止的代码是:
def xsquared(x):
n = 2
return x**n
def integral(fun, xmin, xmax):
total = 0
for a in range(xmin, xmax):
x = a
total += fun(x*1.235)
return total
print(integral(xsquared, 0, 4))
输出给出21.3
但我如何在不输入引用该"fun(x*1.235)"
部分的数字的情况下执行此操作?
任何帮助,将不胜感激。
解决方案
通过黎曼计算积分意味着您正在通过使分区内部(维基百科)来计算黎曼和的限制。
为此,您的函数可能有一个新参数interval: dx
,或者您可以通过将整个范围分成N
相等大小的间隔来猜测间隔。dx
这是一个作为参数询问的示例。
那么,你的功能应该是:
def riemann(fun, xmin, xmax, dx):
total = 0
a = xmin
while a < xmax:
total += fun(a + dx/2)*dx
a += dx
return total
示例输出
print(riemann(xsquared, 0, 4, 0.1))
> 21.330000000000013
print(riemann(xsquared, 0, 4, 0.25))
> 21.3125
print(riemann(xsquared, 0, 4, 0.5))
> 21.25
分析分辨率给出:64/3 ~ 21.33333
你通过计算矩形的面积来近似积分:
- height : 区间中点的函数值
fun(a + dx/2)
- width : 区间长度 (
dx
)
注意:如果xmax < xmin
,您应该验证dx < 0
。