我正在做一个物理课程,目前我仍然坚持这一部分。 我试过但我无法做对。 真的需要帮助。
关于梯形规则, 问题:方程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
答案 0 :(得分:2)
您对f
的定义是假的。这就是你需要写的所有内容:
def f(x):
return x**4 * (1 - x)**4 / (1 + x**2)
只要您使用trap0
和a
的浮点参数调用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
答案 1 :(得分:0)
from math import *
执行导入时被视为不正确。这只是一个十分钟的奇迹,这种类型的导入是不受欢迎的,因为它们会混淆命名空间并覆盖局部变量,如果它们也在模块或源中分配。
考虑到你使用**而不是pow()意味着你实际上并不需要数学导入。但如果您使用的是python 2.x,则可能需要使用。
from __future__ import division
Gareth有正确的答案,虽然我只是抱怨风格问题