龙贝格公式的实现

实验要求
a. 验证龙贝格公式的积分效果
b. 比较相同情况下龙贝格公式和复合梯形公式迭代次数的不同
算法介绍
从梯形法开始 , 对其进行加速,得到龙贝格算法,根据梯形算法得到如下递推公式:

其中外推加速公式可以简化为 :
根据上述的推导公式,我们可以看出, T1 为梯形公式,对于次数不高于 1 的多项式准确; S1 是辛普
森公式,对于次数不高于 3 的多项式准确, C1 是柯特斯公式,它对于次数不高于 5 的多项式准确,每一个
公式均由前一公式的适当线性组合得到,精确度都提高 2 次。因此可以验证,由柯特斯公式 C1 构造得到
的龙贝格公式 R1 ,对次数不高于 7 次的多项式准确。并且龙贝格公式计算积分占用内存少,精度高。
算法步骤
1. 计算积分区间两端点函数值 f(a),f(b), 计算 T1;
2. 将区间 [a,b] 分半,计算 f((a+b)/2), T2,S1;
3. 再将区间分半,算出 f(a+(b-a)/2) f(a+3(b-a)/4), 由此计算 T4 S2 C1;
4. 再将区间分半,计算 T8 S4 C2 ,进而计算 R1;
5. 再将区间分半,重复第四步工作,计算 T16 S8 C4 R2 ,反复进行这一过程,可以计算 R1
R2 R4 ... , 直到最终两个 R 之差不超过给定精度即可。
其计算过程是将区间逐次分半,加速得到积分近似值,因此称为逐次分半加速法
算法实现
实现算法所用语言 :Python
龙贝格公式加速前代码 :

龙贝格公式通过外推加速公式加速后代码 :

实验结果
积分函数为 :1/x
龙贝格公式加速前所需要二分次数:

  

龙贝格公式加速后所需要二分次数 :

积分函数为 :e^x
龙贝格公式加速前所需要二分次数 :

  

龙贝格公式加速后所需要二分次数 :
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
龙贝格公式是一种数值积分方法,可以用于求解定积分。下面是用C语言实现龙贝格公式计算定积分的代码: ```c #include <stdio.h> #include <math.h> double func(double x); // 被积函数 double romberg(double a, double b, double eps); // 龙贝格公式 int main() { double a = 0.0; // 积分下限 double b = 1.0; // 积分上限 double eps = 1e-6; // 精度要求 double result = romberg(a, b, eps); // 计算积分值 printf("The integral of f(x) from %lf to %lf is %lf\n", a, b, result); return 0; } double func(double x) { return x * x; // 被积函数为 x^2 } double romberg(double a, double b, double eps) { double R[10][10] = {0}; // 存放计算结果的矩阵 double h = b - a; // 步长 int i, j; R[0][0] = (func(a) + func(b)) * h / 2.0; // 第一次计算 for (i = 1; i < 10; i++) { h /= 2.0; double sum = 0.0; for (j = 1; j <= pow(2, i-1); j++) { sum += func(a + (2*j-1)*h); } R[i][0] = R[i-1][0]/2.0 + h*sum; // 递推计算第 i 次结果 for (j = 1; j <= i; j++) { R[i][j] = (pow(4, j)*R[i][j-1] - R[i-1][j-1]) / (pow(4, j) - 1); } } double err = fabs(R[9][9] - R[8][8]); // 计算误差 if (err < eps) { return R[9][9]; } else { return romberg(a, b, eps/10.0); // 误差不满足要求,继续递归 } } ``` 注:上述代码中,被积函数为 $f(x)=x^2$,精度要求为 $10^{-6}$,矩阵 $R$ 的大小为 $10\times 10$。如果需要计算其他函数的定积分,可以将 `func` 函数替换为目标函数,然后修改积分下限、积分上限和精度要求即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值