32 lines
742 B
Python
32 lines
742 B
Python
#把函数改成题干的####################
|
||
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}")
|