小小知识点(二十)利用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
[email protected](x)exp(x).*log(x);
Q = quadgk(F,0,1)   

运行结果

被积函数曲线

%举例说明3
%(2)计算半无限震荡积分
clc
clear all
[email protected](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
[email protected](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;
%同时%计算多个积分值的方法(二)
[email protected](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支持

原文地址:https://www.cnblogs.com/weinapang/p/11000298.html

时间: 2024-10-26 15:17:21

小小知识点(二十)利用MATLAB计算定积分的相关文章

利用MATLAB计算三维坐标序列距离误差程序

1.三维坐标储存在文件中,格式如下: 各坐标间的距离真值是一定值,计算相邻距离的标准差. 2.MATLAB程序如下: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 名称:caculateAccuracy.m % 功能:读取三维世界坐标,计算精度 % 作者:LYC % 单位:中科院苏州医工所 % 日期:2014.5.5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

小小知识点(十九)护眼色豆沙绿的设置

护眼色豆沙绿 R=199,   G=237,  B=204 H= 85, S=123,L=205 设置MATLAB的编辑器为护眼色 1.找到HOME中的Preference键,打开属性框 2. 找到colors,取消Use system colors, 选择自己想要的背景颜色.字体大小等 设置福昕阅读器为护眼色 1. 选择文件下的偏好设置 2. 点击访问,然后自定义页面颜色背景 原文地址:https://www.cnblogs.com/weinapang/p/10966172.html

winform学习日志(二十四)----------datetime和timer的使用(小小幻灯片)

一:展示图片 每秒换一次图片,一共六十张图片,00-59 二:代码 a,设计代码 namespace timePicture { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary

爪哇国新游记之二十二----算术表达式计算求值

代码: import java.util.ArrayList; import java.util.List; // 辅助类 class Item{ String value; boolean isNumber; public Item(String value,boolean isNumber){ this.value=value; this.isNumber=isNumber; } public Item(char c,boolean isNumber){ this.value=String.

Swift入门(十二)——利用Extension添加逆序输出字符串方法

Swift好像没有自带逆序输出字符串的方法,于是决定通过拓展(Extension)给String类添加一个逆序输出字符串的reverse方法. 首先新建一个Swift文件,命名规则不太清楚,于是暂且模仿OC叫做String+Operation吧,然后实现我们需要拓展的方法.下面先贴上代码,然后解释一下这段代码. //String+Operation.swifft import Foundation //逆序输出swift中的字符串 extension String{ func Reverse()

NLP(二十二)利用ALBERT实现文本二分类

??在文章NLP(二十)利用BERT实现文本二分类中,笔者介绍了如何使用BERT来实现文本二分类功能,以判别是否属于出访类事件为例子.但是呢,利用BERT在做模型预测的时候存在预测时间较长的问题.因此,我们考虑用新出来的预训练模型来加快模型预测速度. ??本文将介绍如何利用ALBERT来实现文本二分类. 关于ALBERT ??ALBERT的提出时间大约是在2019年10月,其第一作者为谷歌科学家蓝振忠博士.ALBERT的论文地址为:https://openreview.net/pdf?id=H1

[WebGL入门]二十,绘制立体模型(圆环体)

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 本次的demo的运行结果 立体的模型 这次稍微喘口气,开始绘制立体模型.这里说的[喘口气]是指本次的文章中没有出现任何新的技术知识点.只是利用到现在为止所介绍过的内容,来绘制一个立体的圆环体.到现在为止,只绘制了三角形和四边形,当然,在三维空间中绘制简单的多边形也没什么不对,但是缺点儿说服力.

利用MATLAB生成模式类

最近开始了模式识别的学习,在此之前需要对模式和模式类的概念有一个了解,这里使用MATLAB实现一些模式类的生成.在此之前,引用百科上对于模式识别和模式类的定义,也算加深以下了解: 模式识别(Pattern Recognition):人类在日常生活的每个环节,从事着模式识别的活动.可以说每个有正常思维的人,在他没有入睡时都在进行模式识别的活动.坐公共汽车找汽车站,骑车判别可行进道路,对观察到的现象作出判断,对听到的声音作出反应,判断东西的好与坏以及水果的成熟与否等等都是人们判断是非,判别事物的过程

24、蛤蟆的数据结构笔记之二十四串的模式匹配算法

24.蛤蟆的数据结构笔记之二十四串的模式匹配算法 本篇名言:"燧石受到的敲打越厉害,发出的光就越灿烂. -- 马克思" 来看下两个算法,BF和KMP算法在串的模式匹配中实现. 欢迎转载,转载请标明出处: 1.  BF算法 BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果.B