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

2023-05-16

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

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

上题目:

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

思路是这样的:

首先是写出高斯型求积公式的代码,根据清华大学出版社出版的第五版数值分析上给出的定义:
我们老师给的pptppt2
证明
简单来说就是求积公式具有2n+1次的代数精度,那就是高斯型求积公式。
接下来看高斯公式的代码实现(MATLAB):
这里的输入参数分别为积分的上下限,n为节点个数,epsilon为求解精度。

function S=Gauss_Legendre(a,b,n,epsilon)
syms x
 p=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+1
     xkt=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 1
    if a==1&&b==1
        S(1,1).root=Gauss_Legendre(-4,4,n,epsilon);
    end
    if 1
        S(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;
        else
            S(a,b).d=0;
            Binary_tree(a+1,b*2-1,n,jd);
        end
        if(b+1<=2^(a-1)&&mod(b,2)==1)
            Binary_tree(a,b+1,n,jd);
        end
    end
end

运行结果如下:
在这里插入图片描述
效果还是很不错的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装

    Muduo is a multithreaded C 43 43 network library based on the reactor pattern muduo库的介绍就是 xff1a 一个基于reactor反应堆模型的多线程C 43
  • FCT测试

    1 总论 2 启动过程 3 各模块实现 1 总论 FCT 作为 Android 的一个外来测试程序 xff0c 位于源码的 external 文件夹内 xff0c 其目的是作为产品在 PCBA 装配生产线中的一个制程 xff0c 对外围硬件
  • ARM上电启动及Uboot代码分析

    注意 xff1a 由于文档是去年写的 xff0c 内有多个图片 xff0c 上传图片很麻烦 xff08 需要截图另存插入等等 xff09 xff0c 我把文章的PDF版本上传到了CSDN下载资源中 为了给自己赚点积分 xff0c 所以标价2
  • 【解决】缺少libstdc++.so.6库的原因及解决办法

    问题原因 xff1a 系统是64bit xff0c 该库是32bit的 xff0c 在64bit系统上安装32bit库 解决办法 xff1a 1 查看哪个安装包包含该库 xff1a yum provides libstdc 43 43 so
  • 仿真器和模拟器的区别

    仿真器 xff08 emulator xff09 和模拟器 xff08 simulator xff09 是比较容易混淆的概念 xff0c 这两个概念不仅针对计算机体系结构 xff0c 在很多方面都有所应用 xff0c 例如航空模拟器 街机仿
  • Flush-Cache/Page-Lock/Flush-TLB说明

    Flush Cache Page Lock Flush TLB说明 理论上顺序 xff1a 获得页面锁 xff0c 保证后续flush操作完成之前不允许继续读写Flush cacheFlush tlb 以下用numa migrate pag
  • 内核动态补丁(kpatch)及kpatch pushsection popsection previous的解释

    内核动态补丁 xff08 katch xff09 解释 本文阅读体验不好 xff0c 因此做了pdf版本 xff0c 点击下载 xff0c 如果你没有分数 xff0c 可以直接留言找我要pdf版本 内核可以在运行时动态执行补丁中的代码 xf
  • Shell编程:字符串与数值之间的转换与计算

    shell编程往往需要对字符串进行操作 xff0c 有时需要将字符串转为数值 xff0c 并做加减运算 以下介绍将字符串转为数值并进行计算的方法 temp1 61 400d7c echo 16 temp1 43 4 xff08 打印默认是十
  • linux内核代码预处理后便于阅读

    inux 内核庞大而复杂 内核代码阅读的时候 xff0c 有没有遇到因为宏定义或者inline层次太深而不知道到底代码是什么样子 代码预处理可以解决这个难题 平台 xff1a linux 3 4 5 ARM xff0c PC linux上类
  • 深度学习(六):pointnet.pytorch环境配置与学习

    目录 0 前言 0 1 shapenet数据集 1 配置环境 1 1 配置Python环境与安装pytorch 1 2 安装pointnet及其他包与下载数据 2 默认训练 2 1 分类训练train classification 2 1
  • sed在行首(行尾)添加字符串;在某行后添加多行字符串

    sed在行首添加字符串 xff1b sed s xxx 39 filename gt output xff1a 符号代表行首 sed在行尾添加字符串 xff1b sed s string 39 filename gt output xff1
  • 【解决】xterm Xt error: Can't open display: xterm: DISPLAY is not set

    当你运行xterm出现错误如下 xff1a xterm Xt error Can 39 t open display xterm DISPLAY is not set 我的系统centos6 2 解决办法 xff1a 1 首先确定你安装了x
  • 【解决】yum 安装 出错 Error: Protected multilib versions:

    我安装zlib出错 xff1a yum install zlib 1 2 3 29 el6 i686 Error Protected multilib versions zlib 1 2 3 29 el6 i686 61 zlib 1 2
  • 贴一下我的 vimrc 以及 vim 效果

    贴一下我的vimrc 看起来真的很养眼 xff0c 呵呵 这几天一直忙活着配置VIM xff0c 这个编辑器太迷人了 虽然emacs也强大 xff0c 可是仔细想想 xff0c 还是vim的效率高一些 原因如下 xff1a emacs通过
  • vim语法高亮——使自定义类型也能高亮的简单办法

    说明 xff1a 判断是否类型的简单办法 xff0c 就是简单的观察 xff1a 如果该标志符后面有空格 xff0c 空格后又是一个标志符的话 xff0c 在 xff23 xff0f xff23 xff0b xff0b 语言中 xff0c
  • 原创:纠正国人对Linux的误解和错误认识

    错误印象和认识罗列如下 xff0c 一一解释 xff1a 1 linux下的软件太少 回答 xff1a linux 下的软件一点也不少 windows还在娘肚子里的时候 xff0c Unix已经如日中天了 要知道微软公司开发的第一个操作系统
  • 原创:自己写的端口数据转发工具pf (port forwarding)

    看了 子清行 朋友博客里的一篇文章 xff0c 讲述了一个叫 DuplexPipe 的小工具的实现 最开始没怎么懂意思 xff0c 看了他公开的源代码 xff0c 是用java写的 xff0c 一个jar包 可惜我不太会java 因此没法看
  • 又一次被linux的工具震惊了

    前一篇博客还写了自己写的端口转发工具 xff0c 今天偶然在网上看到讲命名管道和netcat配合的用法 xff0c 被彻底雷倒了 原来以为netcat做不到 xff0c 原来是自己想不到 xff0c 而不是netcat做不到 方法如下 xf
  • Ubuntu桌面旋转xrandr

    项目实行过程中 xff0c 设备安装为竖屏模式 xff0c 分辨率由19201080变为10801920 xff1b 最简单实现 xff0c 将桌面系统显示旋转 xff1a xff08 终端命令 xff09 xrandr o left 向左
  • VR应用在直播领域上的实践与探索

    声明 xff1a 本文来自 七牛云主办的架构师实践日 泛娱乐 43 直播技术最佳实践 的演讲内容整理 PPT 速记和现场演讲视频等参见 七牛架构师实践日 官网 嘉宾 xff1a 孙其瑞 xff0c 得图网络CTO 责编 xff1a 钱曙光

随机推荐

  • ubuntu(14):ubuntu16编译move_base报错与解决

    目录 1 Could NOT find OpenVDB missing OPENVDB LOCATION 2 Could not find a package configuration file provided by 34 costma
  • 在CSDN发布博客怎么改变代码块颜色

    第一步 CSDN首页 xff0c 最右侧点击创作中心 第二步 左侧导航栏滑到最下面 xff0c 点击博客设置 第三步 找到代码片样式 xff0c 简单吧 xff08 又水了一篇 xff09
  • 裸机驱动与Linux设备驱动的区别

    裸机驱动一般针对没有操作系统支持的层面 不用考虑操作系统对它的调用 Linux驱动是在裸机驱动基础上 按照一定的规范来实现 虽然实现的都是同一个东西 不过你发现在 Linux驱动 搀杂 了许多维护信息 总之 xff0c Linux设备驱动就
  • 使用2020版IDEA创建Servlet

    使用2020版IDEA创建一个完整的Web项目的整个过程分为四步 第一步 创建一个普通的Java项目 1 打开IDEA xff0c 选择菜单File gt New gt Project 2 选择Java xff0c 以及自己的JDK xff
  • Apache IoTDB 系列教程-5:常见问题汇总(1)

    在过去的一段时间 xff0c 收集了不少大家在使用过程中反馈的问题 xff0c 今天把一些常见问题列出来 xff0c 给更多人提供参考 开了个交流群二维码 xff0c 可以扫码进群 正文 1974 字 xff0c 预计阅读时间 5 分钟 常
  • Apache IoTDB 系列教程-6:性能优化(0.8-0.10)

    今天的内容包括建模优化 读写性能优化 xff0c 会涉及一些简单的原理介绍 主要面向 0 8 0 10 版本 正文 3754 字 xff0c 预计阅读时间 10 分钟 建模指南 关于存储组 现在每个存储组是一个相对独立的引擎 xff0c 而
  • Apache IoTDB 系列教程-8:文件同步工具

    在官网用户手册的系统工具 xff08 System Tools xff09 一栏 xff0c 有一个同步工具 xff08 Sync Tool xff09 xff0c 有很多人问这个东西怎么用 xff0c 延迟是多少 xff0c 今天就介绍一
  • Apache IoTDB failed to start RPC ServerService, because Could not create ServerSocket on address

    原因 一般是端口占用 xff0c 可以 jps 检查是不是已经启动了一个 IoTDB
  • Apache IoTDB Query is time out (-1ms)

    现象 查询超时 xff0c 服务器出现一下日志 2022 01 05 15 57 05 724 pool 12 IoTDB query time manager 1 WARN o a i d q c QueryTimeManager 71
  • 解读事务的ACID!

    事务的ACID特性大学数据库课程基本都学过 xff0c 但是学完也就大概知道是干嘛的 xff0c 后来也没仔细想这个东西了 xff0c 后来接触了NoSQL系统的一致性 xff0c 于是重新学习 ACID xff0c 发现还有很多误区 今天
  • 欢迎加入 Apache IoTDB !

    官方网站 xff1a http iotdb apache org zh IoTDB 是清华自研时间序列数据库 xff0c 2014年项目启动 xff0c 2018年11月18号 IoTDB 正式进入 Apache 孵化器 xff0c 成为中
  • Xavier(2):Xavier NX刷机步骤及报错解决

    1 下载和安装NVIDIA SDK Manager 官方网站 xff1a https developer nvidia com embedded jetpac 选择sdk manager xff0c sdk manager版本没有要求 安装
  • 模型评估与优化1--基本概念与最优化问题

    模型评估与优化1 基本概念与最优化问题 首先先看一下基本术语和概念 1 数据集的划分 xff08 1 xff09 数据集 dataset xff1a 在机器学习任务中使用的一组数据 数据集中每一个数据称为一个样本 反映样本在某方面的表现或性
  • windows中vscode编译运行c++程序

    1 vscode 安装 c 43 43 扩展 在vscode中创建一个后缀为 01 cpp 的程序 xff0c 程序文件如下 xff0c vscode会自动提示安装 c 43 43 扩展 xff0c 点击进行安装 01 cpp includ
  • leetcode 刷题指南 & 刷题顺序

    1 刷题方法 amp 顺序 xff1a 按类型刷 xff0c 这样能总结出每种类型题目的规律 优先树 链表 二分查找 DFS BFS 动态规划数目 xff1a 常见类型刷10道 43 顺序 xff1a 先做2 4道简单题 xff0c 然后做
  • 北邮计算机学院2017届复试经验分享

    北邮计算机学院2017届复试经验分享 建议初试完了再来担心复试 xff0c 有看复试经验的时间还不如多做两道数学题 xff01 导师 xff1a 了解导师的情况 xff0c 最差也不要找一个人不好的老师 xff0c 其次尽量选自己喜欢的方向
  • STM32 Cube BMP180 获取温度、气压、海拔

    一 介绍 BMP180中内置有E2PROM xff0c 所以要获取数据 xff0c 就要使用I2C读写E2PROM来实现获取数据 xff01 BMP180的整个流程 xff1a 1 首先要初始化 xff0c 读取几个E2PROM地址上的值共
  • int 类型究竟多少字节?

    今天发现NEON技术中 int类型的字节数是2 xff0c 感觉很奇怪 xff0c 最早写51单片机时也是2 xff0c 后来到了观念转变成了4 xff0c 现在有遇到了2 一 转自 http www tuicool com article
  • python实现K均值聚类算法

    之前做大作业的时候本来想用聚类法给点集分类的 xff0c 但是太复杂了 xff0c 于是最后没有采用这个方案 现在把之前做的一些工作整理出来写个小博客 K means聚类法原理 xff1a 聚类是一个将数据集中在某些方面相似的数据成员进行分
  • 复合型自适应步长的Gauss型求积(附代码)

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