我为辛普森的规则整合编写了以下代码来近似犯罪。等式在attachment中。我为偶数和奇数术语编写了单独的循环,因为它们显示在附件中。
import math
x1=0
x2=math.pi
N=6
delta_x=(x2-x1)/N
f=math.sin
sum=f(0)
#odd summation
for i in range (1,N+1):
sum=sum+f(x1+(2*i+1)*delta_x)
sum=4*sum
print(sum)
#even summation
for i in range(2,N+1):
sumeven=0
sumeven=sumeven+f(x1+(2*i)*delta_x)
sumeven=2*sumeven
sumeven=sumeven+f(N)
print(sumeven)
integral=(delta_x/3)*(sum+sumeven)
print(integral)
但是当我打印这些值时,它给出了非常小的负数。
任何人都可以看到我的代码出了什么问题吗?
答案 0 :(得分:1)
首先,学习一些基本的调试。对于此代码,您只完成了两条简单的$('.product_tile .addtocartbutton').each(function(){
$(this).prop('disabled') ? $(this).css('background','#ccc') : $(this).css('background','#EEDED1');
});
行,这两行都没有跟踪更详细的问题。查看这个可爱的debug博客以获取帮助。我添加了一些工具,清理了一些样式,然后再次运行代码,更好地跟踪逻辑和数据流。诊断如下。
print
输出:
sum_odd = f(0)
# odd summation
for i in range (1, N+1):
x_val = x1 + (2*i+1)*delta_x
sum_odd = sum_odd + f(x_val)
print (x_val/math.pi, "pi", f(x_val), sum_odd)
sum_odd = 4*sum_odd
print(sum_odd)
# even summation
for i in range(2, N+1):
sum_even = 0
x_val = x1 + (2*i)*delta_x
sum_even = sum_even + f(x_val)
print (x_val/math.pi, "pi", f(x_val), sum_even)
<强>诊断强>
你有两个直接的问题:
修复初始化,修复限制,你应该看到好的结果,更像是这样:
0.5 pi 1.0 1.0
0.8333333333333333 pi 0.5000000000000003 1.5000000000000004
1.1666666666666665 pi -0.4999999999999997 1.0000000000000007
1.5 pi -1.0 6.661338147750939e-16
1.8333333333333333 pi -0.5000000000000004 -0.4999999999999998
2.1666666666666665 pi 0.4999999999999993 -4.996003610813204e-16
-1.9984014443252818e-15
0.6666666666666666 pi 0.8660254037844387 0.8660254037844387
1.0 pi 1.2246467991473532e-16 1.2246467991473532e-16
1.3333333333333333 pi -0.8660254037844384 -0.8660254037844384
1.6666666666666665 pi -0.866025403784439 -0.866025403784439
2.0 pi -2.4492935982947064e-16 -2.4492935982947064e-16
-0.27941549819892636
-0.04876720424671586
另外,我强烈建议你学习有关调试和编码风格的教程;这些将在未来的工作中帮助您。我从经验中知道。 : - )