MATLAB数值积分法

作者:凯鲁嘎吉 - 博客园
http://www.cnblogs.com/kailugaji/

一、实验目的

许多工程技术和数学研究中要用到定积分,如果无法直接算不出精确值(如含在积分方程中的积分)或计算困难但可用近似值近似时,就用数值积分法方法加以解决。常用的算法有:复化梯形、辛甫生(Simpson)、柯特斯(Cotes)求积法; 龙贝格(Romberg)算法;高斯(Gauss)算法。

二、实验原理

三、实验程序

下面给出复化Simpson求积法程序(梯形及柯特斯复化求积分程序可比照编制):

四、实验内容

选一可精确算值的定积分,用复化的梯形法及复化Simpson求积法作近似计算,并比较结果。

五、解答

1.(程序)

xps.m:

function y=xps(x)
y=x^(3/2);

复化梯形公式:

trap.m:

function [T,Y,esp]=trap(a,b,n)
h=(b-a)/n;
T=0;
for i=1:(n-1)
x=a+h*i;
T=T+xps(x);
end
T=h*(xps(a)+xps(b))/2+h*T;
syms x
Y=vpa(int(xps(x),x,a,b),8);
esp=abs(Y-T);

复化辛甫生(Simpson)公式:

simpson.m:

function [SI,Y,esp]=simpson(a,b,m)
%a,b为区间左右端点,xps(x)为求积公式,m*2等分区间长度
h=(b-a)/(2*m);
SI0=xps(a)+xps(b);
SI1=0;
SI2=0;
for i=1:((2*m)-1)
x=a+i*h;
if mod(i,2)==0
SI2=SI2+xps(x);
else
SI1=SI1+xps(x);
end
end
SI=h*(SI0+4*SI1+2*SI2)/3;
syms x
Y=vpa(int(xps(x),x,a,b),8);
esp=abs(Y-SI);

2.(运算结果)

>> [T,Y,esp]=trap(1,2,8)

T =

    1.8636

Y =

1.8627417

esp =

0.0008089288247354886607354274019599
>> [SI,Y,esp]=simpson(1,2,8) SI = 1.8627 Y = 1.8627417 esp = 0.000000020499792974248975951923057436943

从计算结果看:复化辛普森公式更精确。

3.(拓展(方法改进、体会等))

MATLAB中有一些内置函数,用于实施自适应求积分,都是根据Gander和Gautschi构造的算法编写的。

quad:使用辛普森求积,对于低精度或者不光滑函数效率更高

quadl:该函数使用了称为洛巴托求积(Lobatto Quadrature)的算法,对于高精度和光滑函数效率更高

使用方法:

I=quad(func,a,b,tol);

func是被积函数,a,b是积分限,tol是期望的绝对误差(如果不提供,默认为1e-6)

例如对于函数f=xe^x在[0,3]上求积分,显然可以通过解析解知道结果是2e^3+1=41.171073846375336

先创建一个M文件xex.m

内容如下:

function f=xex(x)

f=x.*exp(x);

然后调用:

>> format long

>> format compact

>> quad(@xex,0,3)

ans =

41.171073850902332

可见有9位有效数字,精度还是蛮高的。

如果使用quadl:

>> quadl(@xex,0,3)

ans =

41.171074668001779

反而只有7位有效数字

MATLAB数值积分法的更多相关文章

  1. MATLAB的基识(整理)

    %正弦函数在MATLAB中如何实现%1.sin(45°)注意:参数值需要用"弧度"去定义>>x=sin(45*pi/180);%2.MATLAB中注意:开方-sqrt( ...

  2. Matlab 绘制三维立体图(以地质异常体为例)

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  3. Matlab slice方法和包络法绘制三维立体图

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  4. Matlab 高斯_拉普拉斯滤波器处理医学图像

    前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...

  5. MATLAB中绘制质点轨迹动图并保存成GIF

    工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...

  6. linux下配置matlab运行环境(MCR)

    在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...

  7. EMD分析 Matlab 精华总结 附开源工具箱(全)

    前言: 本贴写于2016年12与15日,UK.最近在学习EMD(Empirical Mode Decomposition)和HHT(Hilbert-Huang Transform)多分辨信号处理,FQ ...

  8. Atitit MATLAB 图像处理 经典书籍attilax总结

    Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...

  9. Atitit MATLAB 图像处理attilax总结

    Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...

随机推荐

  1. 从零开始学 Web 之 Vue.js(二)过滤器,按键修饰符,自定义指令

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  2. SpringBoot入门之Thymeleaf的使用

    在.net的MVC3 或更高版本等支持 Razor 的框架里使用cshtml,Razor是一种简单的编程语法,用于在网页中嵌入服务器端代码.在使用springboot开发mvc时也有与.net类似的视 ...

  3. Linux 下 rt3070 无线网卡找不到 firmware 问题

    解决办法: 下载好固件 rt2800.bin 文件,复制到 /lib/firmware 中 如果完成以上步骤后,运行 ifconfig wlan0 up 仍然提示 phy0 -> rt2x00l ...

  4. Java 使用 happen-before 规则实现共享变量的同步操作

    前言 熟悉 Java 并发编程的都知道,JMM(Java 内存模型) 中的 happen-before(简称 hb)规则,该规则定义了 Java 多线程操作的有序性和可见性,防止了编译器重排序对程序结 ...

  5. SqlServer 查看死锁的进程

    版权声明:本文为 走错路的程序员 原创文章,欢迎转载. https://blog.csdn.net/phker/article/details/78612974搞sqlsever 好多年, 从来没锁过 ...

  6. H5实现魔方游戏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 【Java】模拟Sping,实现其IOC和AOP核心(二)

    接着上一篇,在上一篇完成了有关IOC的注解实现,这一篇用XML的方式实现IOC,并且完成AOP. 简易的IOC框图 注解的方式实现了左边的分支,那么就剩下右边的XML分支: XmlContext:这个 ...

  8. elasticsearch6.7 05. Document APIs(3)GET API

    2.GET API get API 可以通过文档id从索引中获取json格式的文档,以下示例从twitter索引中获取type为_doc,id值为0为的JSON文档: GET twitter/_doc ...

  9. 【java工具】java常用工具

    java反编译工具 可以将看不懂的.class文件转换成看得懂的.java文件,这样一来就能很方便的读懂别人编写的java代码. findbugs FindBugs-IDEA插件的使用 阿里巴巴Jav ...

  10. 深入理解JVM——虚拟机GC

    对象是否存活 Java的GC基于可达性分析算法(Python用引用计数法),通过可达性分析来判定对象是否存活.这个算法的基本思想是通过一系列"GC Roots"的对象作为起始点,从 ...