【问题标题】:Numerical Integration with Riemann Sum (Python)使用黎曼和 (Python) 进行数值积分
【发布时间】:2013-07-15 07:06:03
【问题描述】:

我有以下代码,但是当它运行时,它给出了0.0 它应该返回一个值2,因为我试图将sin(x) 整合到区间[0, pi] 中。 请指教。

from math import sin, pi

def Rsum(a,b):
    for i in range(1001):
        s = 0
        delx = float((b-a)/1000)
        g = i*delx
        h = (i+1)*delx

        y_i = float(sin(a+g))
        y_ii = float(sin(a+h))
        s += 1/2 * (y_i + y_ii) * delx

    return s

print Rsum(0,pi)

【问题讨论】:

    标签: python return integration


    【解决方案1】:

    试试这个:

    from math import sin, pi
    
    def Rsum(a,b):
    
        for i in range(1001):
            s = 0.0
            delx = float(b-a)/1000.0
            g = i*delx
            h = (i+1.0)*delx
    
            y_i = float(sin(a+g))
            y_ii = float(sin(a+h))
            s += 1.0/2.0 * (y_i + y_ii) * delx
            #s += 1/2 * (sin(a+i*delx) + sin(a+(i+1)*delx)) * delx
    
        return s
    
    print Rsum(0,pi)
    

    您应该小心在浮点方程中使用整数值,如果您有整数,请使用float() 进行转换。如果您的代码中有一个常量,例如10,则将其设为十进制...10.0

    【讨论】:

    • 谢谢。当然,菜鸟的错误。 :) 使用它,我得到了答案(-4.93479408312e-06)。然而,这不是预期的。该函数应该使用梯形规则来计算曲线下的面积,在这种情况下是 sin(x)。有什么建议吗?
    【解决方案2】:

    1/2 在 python 2.x 中是 0。它正在执行整数除法和向下舍入。您可以改用0.51.0/2 来获得您想要的。

    【讨论】:

    • 谢谢。当然,菜鸟的错误。 :) 使用它,我得到了答案(-4.93479408312e-06)。然而,这不是预期的。该函数应该使用梯形规则来计算曲线下的面积,在这种情况下是 sin(x)。有什么建议吗?
    • 尝试将s = 0移到循环之外。
    • 感谢递归!这现在有效。 :) 我得到 1.99999342027 但是,这到底有什么帮助?在前一种情况下,每次运行循环时是否都重新定义了“s”(重置为 0)?
    • @user2589188:是的,没错。
    猜你喜欢
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    相关资源
    最近更新 更多