梯形公式的数值积分的Python程序 | 您所在的位置:网站首页 › 采用梯形法计算函数 › 梯形公式的数值积分的Python程序 |
代码 例子 下面的代码的意图是改变积分区域的梯形块数,得到不同精度的积分值。 以对函数f(t) = 2000×ln(140000/(140000-2100×t))-9.8×t 进行积分为例,积分区域为[8,30] from sympy import * def f(t): f = 2000*log(140000/(140000-2100*t))-9.8*t return f x = symbols('x') truth = integrate(f(x),(x,8,30)).evalf() print(truth) #真值 n = 10 #步长,就是将(a,b)区间分为多少个块 a = 8 b = 30 h = (b-a)/n tra_result = 0 for i in range(n): tra_result += 1/2*h*(f(a+i*h)+f(a+(i+1)*h)) #梯形积分算法 print(tra_result) #梯形积分值结果: 11061.3355350810 11069.5835420617下面来探讨,积分区域内,需要划分多少块,梯形积分算法计算出来的积分值才能与真值之间的截断误差小于0.1。 from sympy import * def f(t): f = 2000*log(140000/(140000-2100*t))-9.8*t return f x = symbols('x') truth = integrate(f(x),(x,8,30)).evalf() #真值 a = 8 b = 30 n = 0 #步长,就是将(a,b)区间分为多少个块 while True: n += 1 h = (b-a)/n tra_result = 0 for i in range(n): tra_result += 1/2*h*(f(a+i*h)+f(a+(i+1)*h)) #梯形积分算法 R = abs(truth - tra_result) if R |
CopyRight 2018-2019 实验室设备网 版权所有 |