用matlab计算y 5 的值,小小知识点(二十)利用MATLAB计算定积分

本文介绍了MATLAB中用于数值积分的几种方法:梯形公式(trapezoidal rule)的trapz函数,自适应Simpson's法则的quad和quadl函数,以及高精度的Gauss-Kronrod和自适应龙贝格积分quadgk和quadl。讨论了各种方法适用场景、示例和可能遇到的问题,如奇点处理和精度控制。
摘要由CSDN通过智能技术生成

一重定积分

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) %计算方式二

运行结果

26f5a20fa2ce3082c29f380a8b06a7f8.png

被积函数曲线

3a7826c0b70c3a60f1e36b9c4880142d.png

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) %计算方式二

运行结果

20a8b8654faa4b84803399f8ae3b6af3.png

被积函数曲线

1fe26237e0b1253509c0427169683207.png

可能警告:

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)

运行结果

530730c4420406a48bf3a7796e392ea6.png

被积函数曲线

4319416e3efc1082875e6c7fcde3b731.png

%举例说明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,但必须快速收敛

运行结果

586480150caaf6c38d78f8e24451fce9.png

被积函数曲线

0998cc869cc11e04c571cb777972cdd2.png

%举例说明3

%(3)计算不连续积分

clc

clear all

F=@(x)x.^5.*exp(-x).*sin(x);

[q,errbnd] = quadgk(F,1,10,'Waypoints',[2 5])%显然2,5为间断点

运行结果

032ed7428b195ac26c7029dbba9252e3.png

被积函数曲线

2b72d297593e475dbc77d966edf95e7d.png

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函数替换上面循环语句的,建议使用(二)

运行结果:

5c85ebdf34ee22f712a3206d5de1c641.png

二重积分

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程序: 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 ...

小小知识点(十八)U盘中病毒了,System Volume Information文件夹删除不掉

win+R调出命令窗口后搜索cmd,启用cmd命令编辑器,并输入以下命令: attrib "H:\System Volume Information" -s   //这句话可以选择 ...

随机推荐

Netty4.x中文教程系列(二) – 白话概念

"Hello World"的代码固然简单,不过其中的几个重要概念(类)和 Netty的工作原理还是需要简单明确一下,至少知道其是负责什.方便自己以后更灵活的使用和扩展.   声明, ...

转:PHP中实现非阻塞模式

原文来自于:http://blog.csdn.net/linvo/article/details/5466046 程序非阻塞模式,这里也可以理解成并发.而并发又暂且可以分为网络请求并发 和本地并发 . ...

C++11中正則表達式測试

VC++2010已经支持regex了, 能够用来编译下述代码. #include #include #include

op cache config

[opcache] ; dll地址 zend_extension=php_opcache.dll ; 开关打开 opcache.enable=1 ; 开启CLI opcache.enable_cli= ...

php与mysql之间操作原理

php和mysql相关扩展有:mysql.mysqli和pdo三种 mysql扩展从php5.5.0被废弃,并且从从php7.0.0开始被废除 mysql之前的使用---几个基本的函数:mysql_c ...

secureCRT自动断开的解决方法

转: secureCRT自动断开的解决方法 secureCRT自动断开的解决方法 在secureCRT上登录时,一段时间不用的话会自动断开,必须重新连接,有点麻烦. 有时候服务器端的 /etc/pro ...

[LeetCode] 704. Binary Search_Easy tag: Binary Search

Given a sorted (in ascending order) integer array nums of n elements and a target value, write a fun ...

外购半成品报SHORT问题(非验货客户)

外购半成品报SHORT问题(验货客户)https://www.cnblogs.com/Snowfun/p/8660646.html 下面看非验货客户: 1.检查采购类型是否为F(SAP_MARC),为 ...

highstock禁用UTC

xAxis: { labels: { format: '{value:%Y-%m-%d}', /* * 也可以用 formatter 格式化函数,时间格式化说明如下: * %Y 年 * %m 月 * ...

LSB含义

LSB(Least Significant Bit)最低有效位,对任何AD来说,量化后输出的数字信号值都是以1LSB的电压值步进的,介于1LSB之间的电压将按照一定的规则进行入位或舍弃,这个过程中造成 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
matlab中的微分方程-matlab中的微分方程.doc 1510 matlab中的微分方程 第1节  Matlab能够处理什么样的微分方程? Matlab提供了解决包括解微分方程在内的各种类型问题的函数: 1. 常规微分方程(ODEs)的初始问题 初问题是用MATLAB ODE求解器解决的最普遍的问题。初始问题最典型的是对非刚性度(?nonstiff)问题应用ODE45,对刚性度(?stiff)问题采用ODE15S。(对于stiffness的解释,请参照“什么是Stiffness”一节。) 2. 微分-代数方程(DAEs)的初问题 在那些守恒定律规定一些变量之间满足常数关系领域经常遇到这类问题。Matlab 可以用ODE15S 或者 ODE23T解决索引(index)为1的DAEs。(对于索引的解释,请参阅“DAEs与他们的索引”一章。) 3. 边界问题(BVPs) 这种通常要求微分方程在两边都具有特殊的条件组成。尽管他们通常不象IVPs那样经常遇到,但是他们也是工程应用中比较常见的问题。可以利用函数BVP4C来解决这类问题。 4. 延微分方程(DDEs) 这类微分方程包含了独立变量的延迟。他们在生物与化学模型这类大量的应用中遇到,可以通过DDE23来解决这类问题。 5. 偏微分方程(PDEs) 采用PDEPE可以解决一维空的抛物面与椭圆方程的初、边界的问题。而那些对更加多的一般的偏微分方程感兴趣的可以利用PDE工具箱。 更多的matlab的综合应用技术的信息请参阅Solution8314。 更多的有关matlab采用的各种求解器的算法的信息请查看下面的URLs: ● ODE 函数 ● BVP 函数 ● DDE 函数 ● PDE 函数 第2节 可以从什么地方获得更多的指导与附加信息?    可以从MATLAB Center、网站的新闻组、文件交换点可以获得一系列资料,可以进一步解释MATLAB解决各种方程(ODE,DAE,BVP,DDE)的求解器的算法和使用。你可以下载各种方程的文章与手册,他们通常带有大量的实例。   可以从 matlab自带的帮助文件的 Mathematics|Differential Equations下找到使用指导。   Cleve Moler的《Numerical Computing with MATLAB》的第七章详细讨论了OEDs的解法,并附带有大量的实例与简单的问题练习。    第3节 对ODE求解器的语法存在有些什么变化? 在MATLAB6.5(R13)中应用ODE求解器求解的首选语法是: [t,y]=odesolver(odefun,tspan,y0,options,parameter1,parameter2,…,parameterN); odesolver 是你采用的求解器,例如ODE45或者ODE15S。odefun是微分方程的定义函数,所以odefun定义独立参数(典型的是间t)的导数y‘ 以及y和其他的参数。在MATLAB6.5(R13)中,推荐使用函数句柄作为odefun。 例如,ode45(@xdot,tspan,y0),而不是用 ode45('xdot',tspan,y0)。 请看采用函数句柄的好处的文档: 采用函数句柄传递你定义MATLAB求解器计算的量、例如大规模矩阵或者Jacobian模式的函数。 如果你喜好采用字符串儿传递你的函数matlab求解器将回溯匹配。 在老的matlab版本里,通过传递标志来规定求解器的状态和恰当的计算。在MATALB6.0以及其后的版本中,这就没有必要了,可以从matlab自带的文档中发现这个差别。 如果里采用的matlab的ODE求解器的老的语法,你可以看看我们FTP站点上的各种求解器的老的实例: ftp://ftp.mathworks.com/pub/doc/papers/ 前面的站点包含了BVP,DAE与DDE这三个方向的采用老的语法的实例。你可以在下面的站点中找到应用ODE45与ODE23的实例: ftp://ftp.mathworks.com/pub.mathworks/toolbox/matlab/funfun 你可以在MATLAB Center的文件交换站点查看这些例子的更新版本。 第4节  如何减小ODE的阶次? 求解一阶ODE的代码是很直接的。然而,二阶或者三阶的ODE不能够直接应用求解。你必须先将高阶的ODE改写成一阶的ODEs系统,使得它可以采用MATLAB ODE求解器。 这是一个如何将二阶微分方程改写成两个一阶微分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值