目的与要求
(一)目的通过设计、编制、调试2~3个数值积分与微分算法的程序,加深对其数值计算方法及有关的基础理论知识的理解。
(二)要求 用编程语言实现复化梯形积分、Romberg积分的程序。
示例
1、问题用复化梯形公式的自动控制误差算法求积分。
2、算法描述(略)
3、程序中变量说明 (略)
4、源程序清单及运行结果(略)
5、按以上4点要求编写上机实验报告。
实验题用编程语言编程实现以下算法:
1、 用复化梯形公式的自动控制误差算法求积分。
2、Romberg积分算法求积分。
做法:
给出任意一个函数
复化梯形公式
龙贝格算法:
直接套公式先求出T序列
再根据PPT上的公式依次求出S序列、C序列、R序列
代码:
import numpy as np
import matplotlib.pyplot as plt
a = 1
b = 5
n = 4
h = (b-a)/4
def func(x):
return np.sin(x)/x
def ComplTrape():
S1 = h*(func(b)+func(a))/2
x = a
for k in range(1,n):
S1 += h*func(x+k*h)
print("复化梯形公式计算结果为 ",S1)
def Romberg():
# T序列依次取0次等分 1次等分 2次等分 3次等分 4次等分
# 间距分别为 4 2 1 0.5 0.25
T = np.zeros(5)
S = np.zeros(4)
C = np.zeros(3)
R = np.zeros(2)
Distance = [(b-a)/2**i for i in range(5)]
T[0] = (func(b)-func(a))*(b-a)/2
# 求出T[1] T[2] T[3] T[4]
for k in range(1, 5):
# 化成2**k等分 步长Distance[k]
x = a
t1 = (func(a)+func(b))*Distance[k]/2
for i in range(1,2**k):
t1 += Distance[k]*func(x+i*Distance[k])
T[k] = t1
# 利用公式生成S序列 C序列 R序列
S = [(4 * T[i+1]-T[i])/3 for i in range(0,4)]
C = [(16 * S[i+1] - S[i])/15 for i in range(0,3)]
R = [(64 * C[i+1] - C[i])/63 for i in range(0,2)]
print("龙贝格公式计算结果序列为 ",str(R))
if __name__ == '__main__':
ComplTrape()
Romberg()