我试图编写一个函数,返回 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)
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