首页 > 解决方案 > 如何在没有 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)"部分的数字的情况下执行此操作?

任何帮助,将不胜感激。

标签: pythonpython-3.xmath

解决方案


通过黎曼计算积分意味着您正在通过使分区内部(维基百科)来计算黎曼和的限制。

为此,您的函数可能有一个新参数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


推荐阅读