#把函数改成题干的#################### def fx(x): return 1/x # 逐次分半梯形递推公式 def SplitTrapezoidal(a,b,err): count = 1 t1 = (b-a)*(fx(a)+fx(b))/2 print(f"t{count}={t1}") 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) count *= 2 print(f"t{count}={t2}") if abs(t2-t1) < err: break t1 = t2 k += 1 return t2,k #把范围ab换成题干的范围,err换成题干的精度要求############ if __name__ == "__main__": a = 1 b = 3 err = 1e-2 result,k = SplitTrapezoidal(a, b, err) print(f"Result: {result},k={k}")