1

我正在尝试编写一个返回f(x)如下图所示的函数

在此处输入图像描述

但是,当我插入输入N和时x,我不断得到错误的答案。

我怀疑这可能与我在函数中的求和有关,但我不确定具体在哪里。我尝试使用import math.fsum来缩短函数的长度,也许这会影响答案。

任何建议将不胜感激。这是我的代码f(x),其衍生代码f(x)包含在函数中:

from math import sin, cos, pi, fsum

def f(x, N):
    for i in range(1, N):

        h = (x/N) + pi/(2*N)
        p = (-pi/2) + i*h     
        y = (h/2)*(df(-pi/2) + df(x)) + h*fsum([df(p) for i in range(1, N)])  

        return(y)


def df(x): 

    d = (3*cos(x)) / ((2 + sin(x))**2)

    return(d)
4

1 回答 1

2

Python 2 与 Python 3?如果您运行不同的解释器,您可能刚刚用除法切断了数字的浮点部分。将除法中的每个除数重写为float.

而且由于除了公式中的总和之外我没有看到任何循环,我相信您需要for完全删除循环并只保留fsum(...)部分以保持总和和公式的完整:

def f(x, N):
    h = (x / float(N)) + pi / float(2 * N)
    p = (-pi / 2.0) + i * h
    y = (h / 2.0) * (df(-pi / 2.0) + df(x)) + h * fsum([df(p) for i in range(1, N)])  
    return y

正如@jasonharper 在评论中提到的那样,循环无论如何都不会做任何事情,因为你只会得到第一次迭代,就像我的重写一样。

除了对浮点标准中的math.fsum()值求和之外,什么都不做:IEEE-754

>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
0.9999999999999999
>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
1.0

资源

于 2020-06-16T16:36:43.627 回答