0

我正在学习物理课程,目前我被困在这一部分。我已经尝试过,但我无法做到正确。这里真的需要帮助。

关于梯形规则,问题:方程 f(x)=x4*(1-x)44/(1+x^2) 中的积分值是多少

这是我尝试过的代码,但我无法得到答案

from math import *

def f(x):
    f(x)=x**4*(1-x)**4/(1+x**2)
    return f(x)

def trap0 (f,a,b,n):
    h= float (b-a)/n
    s =0.5*( f(a)+f(b))
    for i in range (1,n):
        s=s+f(a+i*h)
    return s*h
4

2 回答 2

2

你的定义f是假的。这就是您需要编写的全部内容:

def f(x):
    return x**4 * (1 - x)**4 / (1 + x**2)

你的其余代码对我来说看起来不错,只要你trap0用浮点参数调用aand b

>>> trap0(math.cos, 0.0, math.pi/2, 100)
0.99997943823960744

如果你想用整数调用它,a那么b事情可能会出错,因为f最终会进行整数除法而不是浮点除法:

>>> f(4.0)
1219.7647058823529
>>> f(4)
1219

最简单的解决方法是将除法强制为浮点数,可能像这样:

def g(x):
    return x**4 * (1 - x)**4 / (1.0 + x**2)

>>> g(4.0) == g(4)
True
于 2010-11-22T16:18:29.627 回答
0
from math import *

在进行导入时被认为是不正确的。诚然,这只是一个十分钟的奇迹,但这种导入风格会令人不悦,因为它们会混淆命名空间并覆盖局部变量(如果它们也在模块或您的源代码中分配)。

考虑到您使用 ** over pow() 意味着您实际上不需要数学导入。但是如果你在 python 2.x 上你可能想要使用。

from __future__ import division

Gareth 对这个功能有正确的答案,尽管我只是在抱怨风格问题

于 2010-11-22T16:51:21.817 回答