如何在python中使用simpsons规则解决集成问题?

如何在python中使用simpsons规则解决集成问题?,python,integration,Python,Integration,我有如下赋值:Si(x)=sin(t)/t的0到x的积分。编写一个python代码,该代码接受参数x并返回该x的正弦积分。 我不知道如何继续使用我的代码使其工作。有人能帮我吗 我得到这个错误: Traceback (most recent call last): File "C:\Users\krist_000\Desktop\integration_simpson.py", line 37, in <module> print(simpsons_rule( f_of_t

我有如下赋值:Si(x)=sin(t)/t的0到x的积分。编写一个python代码,该代码接受参数x并返回该x的正弦积分。 我不知道如何继续使用我的代码使其工作。有人能帮我吗

我得到这个错误:

Traceback (most recent call last):
  File "C:\Users\krist_000\Desktop\integration_simpson.py", line 37, in <module>
    print(simpsons_rule( f_of_t, 2, b, N))
  File "C:\Users\krist_000\Desktop\integration_simpson.py", line 18, in simpsons_rule
    I += f(t) + (2.0*f(t+h) )
UnboundLocalError: local variable 't' referenced before assignment
[Finished in 0.1s with exit code 1]

PyCharm发现您的代码存在一些问题。您的代码现在可以编译并运行了。我得到了正确的答案,根据:

看看这是否对你更有效。你最好研究一下我所做的改变,并理解我为什么做出这些改变:

def simpsons_rule(f, a, b, n):
    """
    Implements simpsons_rule 
    :param f: function to integrate
    :param a: start point
    :param b: end point 
    :param n:  number of intervals, must be even.
    :return: integral of the function
    """

    if n & 1:
        print ("Error: n is not a even number.")
        return 0.0

    h = float(b - a) / n
    integral = 0.0

    x = float(a)
    for i in range(0, n / 2):
        integral += f(x) + (2.0 * f(x + h))
        x += 2 * h

    integral = (2.0 * integral) - f(a) + f(b)
    integral = h * integral / 3.0
    return integral


import math


def f_of_t(t):
    # Note: guard against singular behavior at t = 0.  
    # L'Hospital says value should be 1.0.  NAN if you don't check.
    if x == 0:
        return 1.0
    else: 
        return (math.sin(t)) / t


n = 10000
a = 0
b = 2

print(simpsons_rule(f_of_t, a, b, n))

“不工作”是什么样子的?发生了什么(或没有发生)?发布结果或错误。现在已添加错误消息。顺便说一句:我是python编程新手哇,是的!但我得到的答案是-1.6。。。。。。在我的作业中,它说它应该是+1.6。。。。你知道怎么解决吗?是的,我知道x必须有一个变量,但是b必须是零,赋值说它必须对xNope的每个变量都有效,你不明白a和b是什么。这就是一体化的局限性。下限不能为零。在了解了你在做什么之后,我改变了它。下限a现在接近于零;b是2。您在变量命名和赋值方面做了一些不好的事情,这使得它更难查看。好的,我现在明白了,非常感谢您花时间帮助我:)b是上限。将其更改为您想要的任何值。你确定辛普森定律编程正确吗?看起来不对。
F:\Tools\python-2.7.3\python.exe F:/Projects/Python/udacity/udacity/simpsons.py
1.6054029768

Process finished with exit code 0
def simpsons_rule(f, a, b, n):
    """
    Implements simpsons_rule 
    :param f: function to integrate
    :param a: start point
    :param b: end point 
    :param n:  number of intervals, must be even.
    :return: integral of the function
    """

    if n & 1:
        print ("Error: n is not a even number.")
        return 0.0

    h = float(b - a) / n
    integral = 0.0

    x = float(a)
    for i in range(0, n / 2):
        integral += f(x) + (2.0 * f(x + h))
        x += 2 * h

    integral = (2.0 * integral) - f(a) + f(b)
    integral = h * integral / 3.0
    return integral


import math


def f_of_t(t):
    # Note: guard against singular behavior at t = 0.  
    # L'Hospital says value should be 1.0.  NAN if you don't check.
    if x == 0:
        return 1.0
    else: 
        return (math.sin(t)) / t


n = 10000
a = 0
b = 2

print(simpsons_rule(f_of_t, a, b, n))