我在创建简单的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)"
部分的数字的情况下做到这一点?
任何帮助将不胜感激。
答案 0 :(得分:1)
通过黎曼计算积分意味着您正在通过使分区成为inner(Wikipedia)来计算黎曼和的极限。
为此,您的函数可以具有一个新参数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
您正在通过计算具有以下条件的矩形的面积来近似积分:
fun(a + dx/2)
dx
)注意:如果为xmax < xmin
,则应验证dx < 0
。