Files
CalWay_Python/120-4.py
2025-06-10 14:29:12 +08:00

27 lines
525 B
Python

def fx(x):
return 1/x
# 逐次分半梯形递推公式
def SplitTrapezoidal(a,b,err):
t1 = (b-a)*(fx(a)+fx(b))/2
k = 1
while True:
tmp = 0
for i in range(1, 2**(k-1)+1):
tmp += fx(a + (b-a)*(2*i-1)/(2**k))
t2 = t1/2+(b-a)*tmp/(2**k)
if abs(t2-t1) < err:
break
t1 = t2
k += 1
return t2,k
if __name__ == "__main__":
a = 1
b = 3
err = 1e-2
result,k = SplitTrapezoidal(a, b, err)
print(f"Result: {result},k={k}")