100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 复化梯形公式和复化Simpson公式的python实现

复化梯形公式和复化Simpson公式的python实现

时间:2018-11-22 12:52:18

相关推荐

复化梯形公式和复化Simpson公式的python实现

复化求积的思想:

将区间[a,b]分作n等分,步长h = (b-a) / n,等分点x(k) = a + kh,k = 0,1,2,3,…,n,先在每个子区间[x(k),x(k+1)]上采用低阶的数值求积公式求得近似积分值I(k),再将它们累加并以和作为积分I的近似值。

用复化梯形公式和复化Simpson公式计算:

I=∫0πexcosxdxI = \int_0^\pi e^xcosxdx\ I=∫0π​excosxdx

精确值是:I = -12.0703463164

(1)复化梯形公式:

python代码:

import matha, b = 0, math.pi # 区间端点I = -12.0703463164 # 精确解F_a = math.e ** a * math.cos(a)F_b = math.e ** math.pi * math.cos(b)ls = [1] # 存放E_nfor i in range(1,10):n = 2 ** ih = (b-a) / nm = 0# 计算复化求积公式中的和式for j in range(1,n):m += math.e ** (j*b/n) * math.cos(j*b/n)T_n = h / 2 * (F_a + 2*m + F_b)E_n = I - T_nls.append(str(E_n))print('Tn={:.10f} En={:.2E} En/E2n={:.2f}'.format(T_n, E_n, float(ls[i-1])/float(ls[i])), '\t','n={}'.format(n))

运行结果:

结论:

当n加倍(步长h减半)时,误差E(n)按因子4递减,误差确是O(h^2);当n增大时,复化梯形公式的误差越来越小,近似解也越来越收敛于精确解;但是,当n相对较小时,求解效果并不是太好,误差相对较大。

(2)复化Simpson公式:

python代码:

import matha, b = 0, math.pi # 区间端点I = -12.0703463164 # 精确解F_a = math.e ** a * math.cos(a)F_b = math.e ** math.pi * math.cos(b)ls = [-1] # 存放E_nfor i in range(1,9):n = 2 ** ih = (b-a) / np = q = 0# 计算复化求积公式中的和式for j in range(1, 2*n, 2):p += math.e ** (j*b/(2*n)) * math.cos(j*b/(2*n))for k in range(2, 2*n, 2):q += math.e ** (k*b/(2*n)) * math.cos(k*b/(2*n))S_n = h / 6 * (F_a + 4*p + 2*q + F_b)E_n = I - S_nls.append(str(E_n))print('Sn={:.10f} En={:.2E} En/E2n={:.2f}'.format(S_n, E_n, float(ls[i-1])/float(ls[i])), '\t','n={}'.format(n))

运行结果:

结论:

当n加倍(步长h减半)时,误差E(n)按因子16递减,误差确是O(h^4);当n增大时,复化Simpson公式的误差越来越小,近似解也越来越收敛于精确解;复化Simpson公式总体上近似效果较好,要比复化梯形公式优越的多。

如有错误或者不足之处,欢迎大家留言指正!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。