复合型自适应步长的Gauss型求积

先前在做数值分析实验时,把高斯型求积公式和复合型、自适应步长的求积融合到了一起,但是后来发现题目没有这个要求。。现在就把这个思路分享一下。

上题目:

实验目的:学会Gauss型求积公式,并应用该算法于实际问题.
实验内容:求定积分 ∫−44dx1+x2\int_{{\rm{ - }}4}^4 {\frac{{dx}}{{1 + {x^2}}}}∫−44​1+x2dx​
实验要求:
(1)把Gauss点的表格存入计算机,以Gauss-Legendre求积公式作为本实验的例子,要求程序可以根据不同的阶数,自动地用阶Gauss-Legendre求积公式计算上述定积分的近似值.体会Gauss型求积公式是具有尽可能高的代数精度的数值求积公式。
(2)可用MATLAB中的内部函数int求得此定积分的准确值与Gauss型求积公式求得的值进行比较。

思路是这样的:

首先是写出高斯型求积公式的代码,根据清华大学出版社出版的第五版数值分析上给出的定义:


简单来说就是求积公式具有2n+1次的代数精度,那就是高斯型求积公式。
接下来看高斯公式的代码实现(MATLAB):
这里的输入参数分别为积分的上下限,n为节点个数,epsilon为求解精度。

function S=Gauss_Legendre(a,b,n,epsilon)
syms xp=sym2poly(diff((x^2-1)^(n+1),n+1))/(2^(n+1)*factorial(n+1));tk=roots(p); % 求积节点% 计算求积系数Ak=zeros(n+1,1);for i=1:n+1xkt=tk;xkt(i)=[];pn=poly(xkt);fp=@(x)polyval(pn,x)/polyval(pn,tk(i));   % Lag基底函数Ak(i)=quad(fp,-1,1,epsilon); % 计算求积系数end% 积分变量代换,将[a,b]变换到[-1,1]xk=(b-a)/2*tk+(b+a)/2;% 检验积分函数fun有效性
%  fun1=fcnchk(fun1,'vectorize');% 计算变量代换之后积分函数的值fx=fun(xk)*(b-a)/2;% 计算积分值S=sum(Ak.*fx);

接下来的复合型高斯求积公式思路很简单,就是将所求区间分割,将多个区间套入高斯型求积公式进行求解,最后将结果相加。

那如何实现自适应步长呢?

我的思路是先将区间二分,再进行高斯型求积公式。很自然的,我们可以将二分出来的两个区间看做父区间生成的子区间,子区间再生成子区间,即可以当做二叉树进行处理。那么有些枝生成后,对应的区间函数变化幅度小,就可以不再进一步生成子区间,我们就可以把枝减去。那么进行如此迭代后即可产生我们任意指定精度的求积公式。
代码如下:
以下是主函数

%main.m
clc;clear;
a=-4;b=4;n=5;epsilon=1e-10;jd=1e-8;
syms x;global  sum
p=1;q=1;sum=0;
Binary_tree(1,1,n,jd);
sum
S1=double(int(fun(x),a,b))
diff=abs(sum-S1)

以下是所求的积分函数

function y=fun(x)
y=1./(1+x.^2);
% y=sqrt(x);
return

这是生成二叉树的迭代函数

function Binary_tree(a,b,n,jd) %a,b为数值位于二叉树的位置
global S sum;
epsilon=1e-8;
h=8/(2^(a));
if 1if a==1&&b==1S(1,1).root=Gauss_Legendre(-4,4,n,epsilon);endif 1S(a+1,2*b-1).root=Gauss_Legendre(-4+h*(2*b-2),-4+h*(2*b-1),n,epsilon);S(a+1,2*b).root=Gauss_Legendre(-4+h*(2*b-1),-4+h*(2*b),n,epsilon);S(a,b).L=S(a+1,2*b-1).root;S(a,b).R=S(a+1,2*b).root;diff=abs(S(a,b).root-S(a,b).L-S(a,b).R)*2^(a-1);if(diff<jd)S(a,b).d=1;sum=sum+S(a,b).R+S(a,b).L;elseS(a,b).d=0;Binary_tree(a+1,b*2-1,n,jd);endif(b+1<=2^(a-1)&&mod(b,2)==1)Binary_tree(a,b+1,n,jd);endend
end

运行结果如下:

效果还是很不错的。

复合型自适应步长的Gauss型求积(附代码)相关推荐

  1. 螺旋探索与自适应混合变异的麻雀搜索-附代码

    螺旋探索与自适应混合变异的麻雀搜索 文章目录 螺旋探索与自适应混合变异的麻雀搜索 1.麻雀优化算法 2. 改进麻雀算法 2.1 ICMIC 混沌初始化种群 2.2 螺旋探索策略 2.3 基于精英差分和 ...

  2. 柯西变异和自适应权重优化的蝴蝶算法-附代码

    融合正弦余弦和无限折叠迭代混沌映射的蝴蝶优化算法 文章目录 融合正弦余弦和无限折叠迭代混沌映射的蝴蝶优化算法 1.蝴蝶优化算法 2. 改进蝴蝶优化算法 2.1 柯西变异 2.2 自适应权重 2.3动态 ...

  3. 改进交叉算子的自适应人工蜂群黏菌算法-附代码

    改进交叉算子的自适应人工蜂群黏菌算法 文章目录 改进交叉算子的自适应人工蜂群黏菌算法 1.黏菌算法 2.改进黏菌算法 2.1 自适应可调节反馈因子 2.2 算数交叉算子 2.3 改进的人工蜂群搜索策略 ...

  4. 具有随机分形自适应搜索策略的蚁狮优化算法-附代码

    具有随机分形自适应搜索策略的蚁狮优化算法 文章目录 具有随机分形自适应搜索策略的蚁狮优化算法 1.蚁狮优化算法 2. 改进蚁狮优化算法 2.1 蚂蚁随机分形搜索方程 2.2 蚁狮自适应搜索方程 3.实 ...

  5. 具有自适应搜索策略的灰狼优化算法-附代码

    具有自适应搜索策略的灰狼优化算法 文章目录 具有自适应搜索策略的灰狼优化算法 1.灰狼优化算法 2. 改进灰狼优化算法 2.1 自适应调整策略 2. 2 跳出局部最优策略 2.3 最优学习搜索方程 3 ...

  6. 基于自适应t分布的麻雀搜索算法-附代码

    基于自适应t分布的麻雀搜索算法 文章目录 基于自适应t分布的麻雀搜索算法 1.自适应t分布策略 2.基于自适应t分布策略的麻雀搜索算法 3.算法结果: 4.Matlab 5.Python 1.自适应t ...

  7. 数值分析(10):数值积分之Gauss型求积公式

    Gauss型求积公式 1. 引言 2. Gauss型求积公式 2.1 Gauss型求积公式的定义 2.2 Gauss点的性质 2.3 构造Gauss型求积公式 2.4 Gauss型求积公式的余项 2. ...

  8. 图形学笔记(二十)粒子、刚体、流体的模拟—— 欧拉方法、Errors 和 Instability、中点法、自适应步长、隐式欧拉方法、Runge-Kutta方法、刚体与流体模拟(质点法、网格法、MPM)

    图形学笔记(十九)粒子.刚体.流体的模拟-- 欧拉方法.Errors 和 Instability.中点法.自适应步长.隐式欧拉方法.Runge-Kutta方法.刚体与流体模拟(质点法.网格法.MPM) ...

  9. 自适应滤波器设计及matlab实现,自适应滤波器设计及Matlab实现附程序代码

    自适应滤波器设计及Matlab实现附程序代码 维纳自适应滤波器设计及 Matlab 实现摘 要本文从随机噪声的特性出发,分析了传统滤波和自适应滤波基本工作原理和性能,以及滤波技术的现状和发展前景.然后 ...

最新文章

  1. python——元素列表基础
  2. 33、Power Query-统计员工完成业绩的记录
  3. 2016年6月份学习总结,读书《向着光亮那方》
  4. ASP.NET 2.2 Preview 1首次支持Java SignalR客户端
  5. IBASE Header change - access sequence
  6. Google App Engine:在您自己的域中托管应用程序
  7. MacBook 调度中心设置
  8. Linux常用命令 -- screen
  9. php sql查询占位符,使用命名占位符时PHP / SQL插入错误
  10. c语言变量强制转换,C语言——“=”中的强制类型转换
  11. Tornado是为何物
  12. 每个程序员应该知道12件事
  13. Smart3D三维建模操作笔记
  14. 微软雅黑繁体_近日,一款免费可商用繁体中文字体开始公测了
  15. 我们最畅销的30本好书,都在这了
  16. 必备单品,FSearch
  17. c语言键盘函数key,c语言获得键盘的按键
  18. Linux节点释放,关于linux:如何释放Inode的使用量?
  19. 计算机网络实验 Go Back N (带有ACK)滑动窗口协议 C++
  20. HTML系列之表单标签

热门文章

  1. 滚动数组(简单说明)
  2. SQL注入用到的SQL函数
  3. 5G改变生活,“一对一直播交友源码”改变创业人生...
  4. mysql数据存固态盘和硬盘区别_想要长期保存数据选择什么硬盘呢?给大家分享一下我的选择经历...
  5. CEO、COO、CTO、CIO是什么意思?
  6. 【Unity2D】实现有个性的复杂的血条UI(以空洞骑士的为例)
  7. 【参赛作品4】Day2:openGauss安装
  8. 微信小程序——基于vue的框架mpvue
  9. Android 4.0.3 联系人(通讯录)应用源码学习
  10. 使用ExecutorService,解决多任务同时进行,并等待全部任务完成合并数据