我的f(x)的for循环有问题吗?

问题描述 投票:0回答:1

我试图编写一个函数,返回 f(x) 如下图所示

enter image description here

然而,当我插入输入 Nx我一直得到错误的答案。

我怀疑这可能与我在函数中的求和有关,但我不确定具体在哪里。我试着用 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)
python
1个回答
2
投票

Python 2 vs 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

来源:

© www.soinside.com 2019 - 2024. All rights reserved.