使用列表评估积分梯形规则

Evaluate integrals trapezoid rule using lists

我正在尝试从头开始编写梯形规则的公式。我对 python 还不是很熟悉,所以我有点吃力。我有一个我想整合的表达式,我把它写成一个名为 square 的列表。

我已经在写积分了:

square = []                        #Create empty list
for i in range(0, len(dos)):
     square.append(dos[i]*dist[i]) #Multiplication from inside the integral

s1 = 0
s2 = 0
for i in square[i] != square[1] and square[-1]:
    s1 += s1 + 0.01 * square[i]
else:
    s2 += s2 + 0.01 * 0.5 * square[i]
        
print(s1,s2)

我收到以下错误:

for i in square[i] != square[1] and square[-1]:

TypeError: 'float' object is not iterable

有人知道代码有什么问题吗?

提前致谢!

你需要 for 循环 if 语句然后,你还使用了 += 所以你不需要添加s1 在右操作数中,因为这会将它加两次

# equivalent
s1 += square[i]
s1 = s1 + square[i]
s1 = 0
s2 = 0
for i in range(len(square)):
    if square[i] != square[0] and square[i] != square[-1]:
        s1 += 0.01 * square[i]
    else:
        s2 += 0.01 * 0.5 * square[i]

使用一些技巧来获得更简洁的代码

  • zip 创建 square 列表,迭代 dosdist 列表
  • 迭代 square 的元素而不是它的索引
  • 使用in代替双重条件
square = [do * di for do, di in zip(dos, dist)]

s1 = 0
s2 = 0
for elt in square:
    if elt not in (square[0], square[-1]):
        s1 += 0.01 * elt
    else:
        s2 += 0.01 * 0.5 * elt