如何在不使用SymPy的情况下计算给定函数的积分?

时间:2018-11-12 23:56:21

标签: python python-3.x math

我在创建简单的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)"部分的数字的情况下做到这一点?

任何帮助将不胜感激。

1 个答案:

答案 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