一、Romberg求积公式的演化

根据前面一篇博客《基于复化梯度求积的求积步长自适应matlab实现 》,我们知道可以通过对积分区间不断进行二分,然后采用复化梯形公式计算得到新的求积结果。但是其存在的主要问题是,收敛速度太慢,前述的例子需要进行10次二分才能达到10^-7的精度,达到该精度的区间数为1024,共需节点1025个。示例为一简单函数,因此计算量相对还算不大,但是如果计算函数复杂,要求精度更高,那么基于复化梯度求积的求积步长自适应的方法也难以满足需求。为此,数学家提出了Romberg求积公式。

设Tn和T2n分别为二分前后利用复化梯形求积公式求得的积分近似值,根据式(1.1)可以计算得到式(1.2):

    式(1.1)

    式(1.2)

当Tn与T2n非常接近时,则可以保证T2n的误差非常小。这种直接利用计算结果来估计误差的方法称为误差的事后估计法。其思想为误差补偿思想。记

     式(1.3)

而根据经验证得:

   式(1.4)

即用复化梯形法求出的二分前后两个积分近似值Tn与T2n按照式(1.3)作线性组合,所得到的结果就是复化simpson公式求得的积分近似值Sn。

类似地,对Sn与S2n作线性组合可以得到Cn:

    式(1.5)

对Cn和C2n作线性组合得到Romberg公式:

  式(1.6)

二、Richardson外推技术的成型

由于Richardson推理过程比较复杂,此处只给出相关链接(https://en.wikipedia.org/wiki/Richardson_extrapolation),如果有兴趣,请读者自行查阅相关资料。下面给出通项公式:

     式(1.7)

后面将会用到上式。

三、Romberg算法描述

1)赋初值,计算

    式(1.8)

并将1→k(k)为二分次数。(注:这句话的意思是其实就是指计算T数表的第一列,即前面的自适应步长复化梯度求积)

2)求梯形值,按照参考I的式(1.3)计算

3) 外推计算,求加速值。按照式(1.7)依次求出T数表中第k行的其余元素

4)精度控制,对给定误差,若对角线上相邻元素满足下式(1.9),则停止计算,取作为满足精度要求的近似值;否则k+1→k,转2)继续计算,直到满足要求。

    式(1.9)

四、Romberg的Matlab实现

实现代码如下:

%% Romberg求积公式
function [T_result] = RichardsonExtrapolated(x_LowBound,x_UpBound,AccuracyValue)
% 2017-11-03  xh_scu  1270978696@qq.com
% inputs:
% ------x_LowBound:计算区间下届
% ------x_UpBound:计算区间上届
% ------AccuracyValue:精度要求
% outputs:
% ------result:近似积分结果,为T数表% step_1:计算区间[x_LowBound,x_UpBound]上的复化梯度积分
step_length = x_UpBound - x_LowBound;
T_result(1,1) = step_length * (CalcuNoteValue(x_LowBound) + CalcuNoteValue(x_UpBound))/2;
count = 1;
while 1% 步长减半step_length = step_length/2;% 初始化新插入值的和sum_new_value = 0;% 计算新插入值的和%区间个数TwoPowerCount = 2.^count;%累加新增的节点函数值之和%  |               |%  |       |       |  新增节点为:a+(b-a)/2 %  |   |   |   |   |  新增节点为:a+(b-a)*1/4, a+(b-a)*3/4  %  | | | | | | | | |  新增节点为:a+(b-a)*1/8, a+(b-a)*3/8, a+(b-a)*5/8,a+(b-a)*7/8up_Bound = TwoPowerCount-1;% 计算新增节点的函数值之和for j = 1:2:up_Boundsum_new_value = sum_new_value + CalcuNoteValue(x_LowBound + step_length*j);end% 更新T_result(k+1,1)(注:实际为式1.9的T(k+1,0)T_result(count+1,1) = T_result(count,1)/2 + step_length*sum_new_value;% 循环计算第k次二分后的第k行的所有元素for m = 1:countT_result(count+1,m+1) = (4^m)*T_result(count+1,m)/((4^m)-1) - T_result(count,m)/((4^m)-1);end% 判断精度是否满足要求,满足则跳出循环;否则进行继续计算if abs(T_result(count+1,count+1) - T_result(count+1,count))<AccuracyValuebreak;elsecount = count + 1;end % if条件结束
end % for循环结束
end % 函数结束

计算函数此处依然选用f(x)=sinx/x举例,读者可以根据自己的需要做相应的修改。代码如下:

%% 计算函数
function [note_value] = CalcuNoteValue(x)
if x == 0note_value = 1;
elsenote_value = sin(x)/x;
end
end

五、测试与分析

设积分区间为[0,1],精度为0.0000000001,测试结果如下表示。

测试结果
二分次数 T0 T1 T2 T3 T4
0 0.920735492403948 0 0 0 0
1 0.939793284806177 0.946145882273587 0 0 0
2 0.944513521665390 0.946086933951794 0.946083004063674 0 0
3 0.945690863582701 0.946083310888472 0.946083069350917 0.946083070387222 0
4 0.945985029934386 0.946083085384948 0.946083070351379 0.946083070367260 0.946083070367181

示图:

六、结论

根据测试结果可以得出:

1、测试函数f(x)=sinx/x只需要4次二分外推就可以达到0.00000001的精度。

2、收敛速度远远快于自适应步长复化梯度积分。

Richardson外推加速技术(含Romberg详细分析)的Matlab实现相关推荐

  1. 客户端访问https时应无浏览器(含终端)安全警告信息;_https和http有什么区别(内附详细分析)...

    很多站长知道https和http有所不同,但是究竟两者有什么不同浑然不知,针对这种情况,本文Seo星火给大家详细分析一下https和http有什么区别. 一.基本概念: (http服务器-->本 ...

  2. x264 代码重点详解 详细分析

    eg mplayer x264 代码重点详解 详细分析 分类: ffmpeg 2012-02-06 09:19 4229人阅读 评论(1) 收藏 举报 h.264codecflv优化initializ ...

  3. ffmpeg mplayer x264 代码重点详解 详细分析

    ffmpeg和mplayer中求平均值得方法 1 ordinary c language level #define avg2(a,b) ((a+b+1)>>1) #define avg4 ...

  4. Oracle AWR报告详细分析

    Oracle AWR报告详细分析  (文档 ID 1523048.1) AWR 是 Oracle  10g 版本 推出的新特性, 全称叫Automatic Workload Repository-自动 ...

  5. 【SemiDrive源码分析】【X9芯片启动流程】30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一)

    [SemiDrive源码分析][X9芯片启动流程]30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一) 一.Android Kernel 启动流程分析 ...

  6. 视频加速方案的最优解 - Xilinx硬件加速技术专场(深圳站)

    从AI到编码.转码,硬件加速方案正在扮演越来越重要的角色.12月13日·深圳 | LiveVideoStack联合赛灵思出品[赛灵思视频加速技术]专题,将展现基于FPGA的硬件加速特性,在视频.图片编 ...

  7. 纵观计算机网络发展历程,人工智能在计算机网络技术中的应用分析

    人工智能在计算机网络技术中的应用分析 罗思浩 宁波工程学院 315020 摘要:人工智能技术随着科学技术的发展,目前已相当成熟,其拥有众多优势,可对计算机技术存在的诸多问题予以解决.在此背景之下,本文 ...

  8. 详细分析开源软件项目 Ajax.NET Professional 中的RCE 漏洞(CVE-2021-23758)

     聚焦源代码安全,网罗国内外最新资讯! 作者:Hans-Martin Münch 编译:代码卫士 2021年秋,MOGWAI LABS 实验室在为客户进行渗透测试过程中发现了开源组件 "Aj ...

  9. 案例分享 | 某券商利用AI技术进行告警关联分析(上)

    本内容来自公众号"布博士"------(擎创科技资深产品专家) 背景: 作为大型券商企业之一,某券商对深入数字化转型,以及对应用.网络.主机.操作系统.中间件.用户使用体验等的全面 ...

最新文章

  1. java 同步转并行_Java线程与并行编程(二)
  2. redis集群安装和java应用
  3. 如何在DataFrame 中优雅的增加一行,一列
  4. 【GNN】2022年最新3篇GNN领域综述!
  5. linux 查看磁盘空间_Linux下删点日志也能搞死人
  6. Cookie和Session的作用,区别和各自的应用范围,Session工作原理
  7. Android的sqlite使用外部,Android 使用外部已经建立好的sqlite数据库
  8. 13.Azure流量管理器(上)
  9. Canvas绘图基本用法
  10. php和java的一些比较
  11. ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
  12. 数值分析(11):常微分方程的数值解法之Euler法
  13. matlab磁盘内存,Matlab内存不足问题的解决【转】
  14. 今秋新iPhone将采用更大容量电池?外媒称最低3110mAh 较iPhone XR提升5%
  15. dismiss和remove_eliminate, remove, dismiss的区别:新东方考研英语词汇辨析
  16. 《小强升职记》读书笔记
  17. 用matlab拟合多元函,使用matlab进行多元非线性拟合的方法
  18. 视觉SLAM小知识——叉乘的物理意义
  19. 面试题:堆、栈、队列的区别以及使用场景
  20. 北斗卫星导航产业重大应用示范项目落户哈市

热门文章

  1. MySQL数据库(四):多表查询、视图、事务、索引、函数、Go连接MySQL
  2. java 各版本下载官方网站
  3. 超强破解Word“取消文档保护”密码
  4. 机器学习及人工智能发展史
  5. idea如何全屏_IntelliJ IDEA(十) :常用操作
  6. 来自一位普通博导带学生的所做所思:博士该这么读!
  7. 【算法】Sky Map
  8. JavaScript Array --map()、filter()、reduce()、forEach()函数的使用
  9. 5款不妨一试的硬盘碎片整理工具
  10. 车票购买最低消费问题java_浅析12306售票算法(java版)