小小知识点(二十)利用MATLAB计算定积分
一重定积分
1. Z = trapz(X,Y,dim)
梯形数值积分,通过已知参数x,y按dim维使用梯形公式进行积分
%举例说明1 clc
clear all
% int(sin(x),0,pi)
x=0:pi/100:pi; %积分区间
y=sin(x); %被积函数
z = trapz(x,y) %计算方式一
z = pi/100*trapz(y) %计算方式二
运行结果

被积函数曲线

2、[q,fcnt]= quad(fun,a,b,tol,trace,p1,p2...)
自适应simpson公式数值积分,适用于精度要求低,积分限[a,b]必须是有限的,被积函数平滑性较差的数值积分.
[q,fcnt] = quadl(fun,a,b,tol,trace,p1,p2...)
自适应龙贝格数值积分,适用于精度要求高,积分限[a,b]必须是有限的,被积函数曲线比较平滑的数值积分
%举例说明2
% 被积函数1/(x^3-2*x-p),其中参数p=5,积分区间为[0,2]
clc
clear all
F = @(x,n)1./(x.^3-2*x-n); %被积函数
Q1 = quad(@(x)F(x,5),0,2) %计算方式一
Q1 = quad(F,0,2,[],[],5) %计算方式二
Q2 = quadl(@(x)F(x,5),0,2) %计算方式一
Q2 = quadl(F,0,2,[],[],5) %计算方式二
运行结果

被积函数曲线

可能警告:
1.'Minimum step size reached'
意味着子区间的长度与计算机舍入误差相当,无法继续计算了。原因可能是有不可积的奇点
2.'Maximum function count exceeded'
意味着积分递归计算超过了10000次。原因可能是有不可积的奇点
3.'Infinite or Not-a-Number function value encountered'
意味着在积分计算时,区间内出现了浮点数溢出或者被零除。
3、[q,errbnd] = quadgk(fun,a,b,param1,val1,param2,val2,...)
自适应Gauss-Kronrod数值积分,适用于高精度和震荡数值积分,支持无穷区间,并且能够处理端点包含奇点的情况,同时还支持沿着不连续函数积分,复数域线性路径的围道积分法
注意事项:
1.积分限[a,b]可以是[-inf,inf],但必须快速衰减
2.被积函数在端点可以有奇点,如果区间内部有奇点,将以奇点区间划分成多个,也就是说奇点只能出现在端点上
3.被积函数可以剧烈震荡
4.可以计算不连续积分,此时需要用到'Waypoints'参数,'Waypoints'中的点必须严格单调
5.可以计算围道积分,此时需要用到'Waypoints'参数,并且为复数,各点之间使用直线连接
6.param,val为函数的其它控制参数,比如上面的'waypoints'就是,具体看帮助
出现错误:
1.'Reached the limit on the maximum number of intervals in use'
2.'Infinite or Not-a-Number function value encountered'
%举例说明3
%(1)计算有奇点积分
clc
clear all
F=@(x)exp(x).*log(x);
Q = quadgk(F,0,1)
运行结果

被积函数曲线

%举例说明3
%(2)计算半无限震荡积分
clc
clear all
F=@(x)x.^5.*exp(-x).*sin(x);
fplot(F,[0,100])%绘图,看看函数的图形
[q,errbnd] = quadgk(F,0,inf,'RelTol',1e-8,'AbsTol',1e-12)%积分限中可以有inf,但必须快速收敛
运行结果

被积函数曲线

%举例说明3
%(3)计算不连续积分
clc
clear all
F=@(x)x.^5.*exp(-x).*sin(x);
[q,errbnd] = quadgk(F,1,10,'Waypoints',[2 5])%显然2,5为间断点
运行结果

被积函数曲线

4、[Q,fcnt] = quadv(fun,a,b,tol,trace) 矢量化自适应simpson数值积分
注意事项:
1.该函将quad函数矢量化了,就是一次可以计算多个积分
2.所有的要求完全与quad相同
%举例说明4
% 计算下面积分,分别计算n=1,2...,5时的5个积分值,被积函数1/(n+x),积分限为[0,1]
clc
clear all
%计算多个积分值(一)
for k = 1:5,
Qs(k) = quadv(@(x)1/(k+x),0,1)
end;
%同时%计算多个积分值的方法(二)
F=@(x,n)1./((1:n)+x);%定义被积函数
quadv(@(x)F(x,5),0,1)%我们可以完全使用quadv函数替换上面循环语句的,建议使用(二)
运行结果:

二重积分
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method)
矩形区域二重数值积分,一般区域二重积分参见NIT(数值积分工具箱)的quad2dggen函数
% 例 计算下面二重积分 F = @(x,y)y*sin(x)+x*cos(y); Q = dblquad(F,pi,2*pi,0,pi)
三重定积分
q=triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol,method)
长方体区域三重数值积分,注意此时没有一般区域的三重积分
%例 计算下面三重积分 F = @(x,y,z)y*sin(x)+z*cos(x); Q = triplequad(F,0,pi,0,1,-1,1)
超维长方体区域多重积分
quadndg:NIT工具箱函数,可以解决多重超维长方体边界的定积分问题,但没有现成的一般积分区域求解函数
总结
quad:采用自适应变步长simpson方法,速度和精度都是最差的,建议不要使用
quad8:使用8阶Newton-Cotes算法,精度和速度均优于quad,但在目前版本下已被取消
quadl:采用lobbato算法,精度和速度均较好,建议全部使用该函数
quadg:NIT(数值积分)工具箱函数,效率最高,但该工具箱需要另外下载
quadv:quad的矢量化函数,可以同时计算多个积分
quadgk:很有用的函数,功能在Matlab中最强大
quad2dggen:一般区域二重积分,效率很好,需要NIT支持
dblquad:长方形区域二重积分 (
triplequadL:长方体区域三重积分
quadndg:超维长方体区域积分,需要NIT支持
小小知识点(二十)利用MATLAB计算定积分的更多相关文章
- 小小知识点(三)——MATLAB如何把三维图用二维图表示
MATLAB程序: x=-1:0.1:1; [x y] = meshgrid(x); %grid data = load("filename.txt"); figure mesh( ...
- 小小知识点(十三)——MATLAB中怎么保存和读取.mat文件
1.存储 利用save函数 save(filename) %将当前工作区中的所有变量保存在 MATLAB® 格式的二进制文件(MAT 文件)filename 中. save(filename,var ...
- 练习二十:python计算皮球下落速度练习题
问题简述:假设一个皮球从100米高度自由落下.条件,每次落地后反跳回原高度的一般,在落下 要求:算出皮球,在第十次落地时,共经过多少米?第十次反弹多高? 方法一: h,sum1 = 100,100 # ...
- 小小知识点(五)——MATLAB对复数的操作
MATLAB程序 a=3+4*i %复数 real(a) %求复数的实部 imag(a) %求复数的虚部 abs(a) %求复数的模 angle(a) %求复数的相位 conj(a) %求复数的复共轭 ...
- 小小知识点(四)——MATLAB如何画等高线图和线性规划约束方程
MATLAB程序: figure contourf(x,y,data) % 画等高线 hold on plot(x,y(x)) %画线性规划约束方程1 hold on plot(y,x(y)) %画线 ...
- 小小知识点(十四)——Adobe photoshop cc 2018中简单抠图的一些基本操作
一 如何抠图 1. 右键弹出选择工具,随后鼠标左键选择快速选择工具 2.通过点击鼠标,选择想要的区域: Alt+鼠标右键 左右拖动鼠标可调整画笔大小 Alt+鼠标滑轮,可放大或缩小画布大小 ctrl ...
- 小小知识点(十一)——MATLAB中fftshift的作用
- 连载 3:利用 matlab计算卷积
- 小小知识点(十八)U盘中病毒了,System Volume Information文件夹删除不掉
win+R调出命令窗口后搜索cmd,启用cmd命令编辑器,并输入以下命令: attrib "H:\System Volume Information" -s //这句话可以选择 ...
随机推荐
- 洛谷 2152 [SDOI2009]SuperGCD
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要 ...
- ORACLE| ORACLE基础语法汇总
创 ORACLE| ORACLE基础语法汇总 2018-07-18 16:47:34 YvesHe 阅读数 9141更多 分类专栏: [数据库] 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- oracle merge into 新增或者修改
merge into sn_balance b1 using(select 'admin' as userid,1 as type1 from dual) b2 on(b1.userid=b2.use ...
- Python第三方包的egg info 是什么东西
xxx.egg-info 一般与 xxx文件夹同时存在,一起来表示完整模块.
- Java JDBC学习实战(三): 事务管理
一. 数据库的事务特性 事务是一步或多步组成操作序列组成的逻辑执行单元,这个序列要么全部执行,要么则全部放弃执行. 事务的四个特性:原子性(Atomicity).一致性(Consistency).隔离 ...
- 最小生成树kruskal算法、
克鲁斯卡尔(kruskal) //kruskal算法生成最小生成树. //对边集数组Edge结构的定义 typedef struct { int begin; int end; int weight; ...
- Spring Security-利用URL地址进行权限控制
目的是:系统内存在很多不同的用户,每个用户具有不同的资源访问权限,具体表现就是某个用户对于某个URL是无权限访问的.需要Spring Security忙我们过滤. 参考:http://www.cnbl ...
- Linux 查看iptables状态-重启
iptables 所在目录 : /etc/sysconfig/iptables # service iptables status #查看iptables状态 # service iptables r ...
- 模板——Treap实现名次树
Treap 是一种通过赋予结点随机权值的一种满足堆性质的二叉搜索树,它很好的解决了二叉搜索树顺序插入组成链式的局限性. 名次树是指在treap的每个结点中添加附加域size,表示以它为根的子树的总结点 ...
- VisualStudio 使用多个环境进行调试
在 VisualStudio 2017 支持使用 launchSettings.json 文件定义多个不同的环境进行调试 先给大家一张图看一下效果 可以看到原来的是启动的按钮,现在被我修改为 lind ...