在Uni的一个实验课上,我的代码的一个版本失败了,而另一个版本通过了,我希望有人可以解释为什么这些代码有什么不同?
失败的版本是:
import scipy as sc
def trapez(f, a, b, n)
h = (b - a) / n
c = list(range(1, n))
return (h / 2) * (f(a) + f(b) + 2 * sum(f(a + i * h) for i in c))
def finderror(n)
def f(x):
return x ** 2
l = sc.integrate.quad(f, -1, 2)
return l[0] - trapez(f, -1, 2, n)
通过的版本是:
import scipy.integrate as sc
def trapez(f, a, b, n):
h = (b - a) / n
c = list(range(1, n))
return (h / 2) * (f(a) + f(b) + 2 * sum(f(a + i * h) for i in c))
def finderror(n):
def f(x):
return x ** 2
l = sc.quad(f, -1, 2)
return l[0] - trapez(f, -1, 2, n)
这两个都返回了完全相同的答案,因此我对其中一个“失败”感到困惑。
提前感谢您的任何建议! (我已经完成了这个,所以这不是我试图得到答案)
答案 0 :(得分:2)
如果您只是import scipy as sc
,则不会加载scipy.integrate
子模块。您需要明确import scipy.integrate
。
如果第一个代码段在您尝试时似乎有效,那是因为您没有单独测试它。您在其他导入已加载scipy.integrate
的环境中尝试过它。