数值积分与微分—数值分析实验

目的与要求
(一)目的通过设计、编制、调试2~3个数值积分与微分算法的程序,加深对其数值计算方法及有关的基础理论知识的理解。
(二)要求 用编程语言实现复化梯形积分、Romberg积分的程序。
示例
1、问题用复化梯形公式的自动控制误差算法求积分。
2、算法描述(略)
3、程序中变量说明 (略)
4、源程序清单及运行结果(略)
5、按以上4点要求编写上机实验报告。
实验题用编程语言编程实现以下算法:
1、 用复化梯形公式的自动控制误差算法求积分。
2、Romberg积分算法求积分。
做法:
给出任意一个函数
复化梯形公式
龙贝格算法
直接套公式先求出T序列
再根据PPT上的公式依次求出S序列、C序列、R序列
数值积分与微分—数值分析实验_第1张图片
代码:

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()

你可能感兴趣的:(python)