如何在下限和上限之间对 f(x) 进行数值积分?

How to numerically integrate f(x) between a lower and an upper bound?

我被告知要修改之前的代码以在下限 a 和上限之间进行积分 b.This 通过添加另一个参数 width 来完成。然后可以通过将许多面积为 (width*f(x)) 的矩形相加来计算积分。下面显示了我需要计算的示例

Calculate the integrals of f(x)=x from 0 to 100.

我要修改的代码是这个,这个是用来计算乘积的,如何修改这个来计算积分?

def product(f, a, b):
    total = 1
    for i in range(a, b+1):
        total *= f(i)
    return total

已编辑:

假设您的函数 f(x) 计算 x 处的函数值,您可以这样做:

def f(x): # define this according to your function.
    return x*x

def integrate(func, a, b, width):
    total = 0
    i = a
    while i <= b:
        total += func(i)
        i += width
    return total * width

width = 0.01
integral = integrate(f, 0, 100, width)
print(integral)

输出:

333283.3350000302

积分的真值为333333.333333,所以结果比较准确

编辑:

要使用其他一些函数,如 sincos,您可以使用内置函数,在函数 f(x) 内,像这样:

def f(x):
    return math.sin(x)

然后从 0 积分到 pi,使用这个:

width = 0.01
integral = integrate(f, 0, math.pi, width)
print(integral)

记得使用 import math.

导入数学

如果您的 width 需要像 0.001 这样的值,您将不得不使用 range 以外的值,因为它无法处理浮点值。

尝试 while 循环:

def integral(f, a, b, width):
    total = 0
    i = a
    while i <= b:
        total += f(i)
        i += width
    return total*width

编辑: 你可以这样使用它:

def foo(x):
    return x
a = 0
b = 1
width = 0.001

integrated = integrate(foo, a, b, width)
print(integrated)

请注意,您不必将 abwidth 声明为变量;直接传入即可。