gpt4 book ai didi

python - 使用 for 循环的辛普森规则(数值积分)

转载 作者:行者123 更新时间:2023-12-01 00:26:01 26 4
gpt4 key购买 nike

我正在尝试使用 for 循环在 python 中编写辛普森规则,但我不断收到断言错误,但无法找出原因。

def integrate_numeric(xmin, xmax, N):
xsum = 0
msum = 0
h = (xmax-xmin)//N

for i in range(0, N):
xsum += f(xmin + i*h)
print (xsum)

for i in range(0,N-1):
msum += f(xmin + (h/2) + i*h)
print (msum)

I = (h/6) * (f(xmin) + 4*(msum) + 2*(xsum) + f(xmax))
return I

f:

def f(x):
return (x**2) * numpy.sin(x)

示例:

assert numpy.isclose(integrate_numeric(xmin=0, xmax=4, N=50), 1.096591)

最佳答案

这是代码的固定版本:

import numpy

def integrate_numeric(xmin, xmax, N):
'''
Numerical integral of f from xmin to xmax using Simpson's rule with
N panels.
'''
xsum = 0
msum = 0
h = (xmax-xmin)/N

for i in range(1, N):
xsum += f(xmin + i*h)
print(xsum)

for i in range(0, N):
msum += f(xmin + (h/2) + i*h)
print(msum)

I = (h/6) * (f(xmin) + 4*msum + 2*xsum + f(xmax))
return I


def f(x):
'''Function equivalent to x^2 sin(x).'''
return (x**2) * numpy.sin(x)


assert numpy.isclose(integrate_numeric(xmin=0, xmax=4, N=50), 1.096591)

注释:

  • 两个 for 循环中的范围已更改:我们希望第一个 for 循环从 xmin + h 变为 >xmin + (N-1)*hh 为步长(因此 N-1 总计值),第二个 for 循环从 xmin + h/2xmin + (N-1)*h + h/2,步长为 h (N总计值)。
  • 在最终计算中,无需将 f 应用于 msumxsum:这些值已经是 f 的总和值。我们仍然需要计算 f 的唯一位置是 xminxmax。 (注意:这已经在问题的编辑中得到修复。)
  • h = (xmax-xmin)//N 需要为h = (xmax-xmin)/N。你只想要这里的常规划分,而不是楼层划分。这可能是您最初得到零的原因:h 本来就是 ​​0

关于python - 使用 for 循环的辛普森规则(数值积分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58582711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com