第10章 Matlab数值积分计算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2017/9/14
一、 概要
从MATLAB R2009a版本起,MATLAB终于有了专门求解一般区 域 二重积分的函数——quad2d,该函数采用的自适应积分算法基于L.F. Shampine 的文章:"Vectorized Adaptive Quadrature in MATLAB," Journal of Computational and Applied Mathematics, 211, 2008。该函数 求解一般区域二重积分的效率要远高于上面提到的dblquad的方法。 虽然quad2d可以求解一般区域二重积分,但还是不能直接求解一 般 区域三重积分,而NIT工具箱也没有一般区域三重积分的计算函数 。 这些需要灵活运用MATLAB相关函数来构建。
2017/9/14
二、 离散数据积分
离散数据积分的函数MATLAB只有trapz函数,是针对一重情形的, 如果是二重情形,需要自己编写,其中会用到trapz函数 。 用法示例参见书中【例10.1-5】 以及【例10.1-6】
2017/9/14
第二节 含参数的积分
来自百度文库
2017/9/14
•
• • •
在解决实际问题的时候我们常要求解一些带参数的积分问题, 这涉及到参数的传递,总的说来有以下几种方法可以求解: 用inline+num2str方法(MATLAB7.0以前版本使用,7.0以后不 推荐使用) 利用匿名函数实现 利用嵌套函数实现 利用积分函数本身传递参数 这几种方法的具体实现办法可以参见【例10.2-1】 。
2017/9/14
二、一般区域二重积分的计算
dblquad求解一般区域二重三重积分的思路方法,就是将被积函数“延 拓”到矩形或者长方体区域,但是这种方法不可避免引入很多乘0运算浪 费时间。而quad2d虽然效率很高,但是R2009a之前没有这个函数。因 此,要想在2009a之前的MATLAB7版里里计算一般区域二重三重积 分,需要开辟新的方法。新的方法是调用已有的MATLAB函数求解, 在求一般区域二重积分时,效率和quad2d相比有一些差距,但是相对 于“延拓”函数的做法,效率大大提高了 。 【例10.3-2】和【例10.3-3】给出了这一方法的应用实例,可以看出该方 法在R2009a以前的版本中不失为一种方法,效率要明显高于dblquad帮 助文档里推荐的做法。更重要的是,这给我们求解一般区域三重积分提 供了一种途径。
quad (自适应Simpson 积分) quadl (自适应Gauss-Lobatto积分,最常用 ) quadgk (自适应 Gauss-Kronrod积分,尤其适合震荡积分、含奇点的 积分;从R2007b开始支持) 具体用法参见书中【例10.1-1】
2.二重情形
一般二重积分可以用下面两个函数解决: dblquad quad2d (R2009a开始支持,不仅可以求矩形区域二重积分,还可以 求一般区域二重积分) 具体用法参见书中【例10.1-2】
2017/9/14
第三节 一般区域二重、三重积分
2017/9/14
一、 概要
一般区域上的二重积分,低版本的MATLAB向来支持不好, 7.X版本之前不能通过简单的形式直接求取一般区域上的的二重积 分,往往要借助广泛流传的NIT工具箱(数值积分工具箱)来实 现。后来到了7.X版本,MATLAB引入了匿名函数结构,dblquad的 被积函数可以是匿名函数的形式,利用匿名函数结构,通过适当改 写被积函数。dblquad可以求解一般区域上的二重积分。但这种改 写就是将积分区域表示成逻辑表达式形式并与被积函数相乘,本质 上还是 计算的矩形区域的积分。 仔细分析dblquad的帮助文档中求一般区域二重积分的例子就 会发现,这种办法是把原被积函数外推到了一个矩形区域上来实现 的,该矩形区域包含了被积区域,在被积区域上,外推函数取值和 原函数一样,而在矩形区域内被积区域外的那部分,外推函数取值 都为0.这样外推函数在矩形区域上积分的结果就等于原被积函数在 被积区域的结果。这种数学上简单的变换导致的结果就是,按这种 办法,计算量大增,特别是被积区域非常不规则并布满整个矩形区 域的时候。
2017/9/14
三、一般区域三重积分的计算
模板1: • quadl(@(x) arrayfun(@(xx) quad2d(被积函数f(xx,y,z)关于y,z变量的函数句 柄,y积分下限y1(xx),y积分上限y2(xx),z积分下限z1(xx,y),z积分上限 z2(xx,y)),x),x积分下限值,x积分上限值) 模板2: • quad2d(@(x,y) arrayfun(@(xx,yy) quadl(被积函数f(xx,yy,z)关于z变量的函数 句柄,z积分下限z1(xx,yy),z积分上限z2(xx,yy)),x,y),x积分下限值,x积分上限值,y 积分下限y1(x),y积分上限y2(x)) • 模板3: • quadl(@(x) arrayfun(@(xx) quadl(@(y) arrayfun(@(yy) quadl(被积函数 f(xx,yy,z)关于z变量的函数句柄,z积分下限z1(xx,yy),z积分上限z2(xx,yy)),y),y积 分下限y1(xx),y积分上限y2(xx)),x),x积分下限值,x积分上限值) 模板使用说明:x,y,z是积分变量,模板中除了用语言描述的参量用相应表达式
2017/9/14
一 、矩形区域积分
3. 三重情形 MATLAB中可以利用triplequad函数求解长方体区域的三重 积分。
具体用法参见书中【例10.1-3】
4. 向量化积分
所谓向量化积分,是指被积函数含有参数,需要对参数的一 系列值求出相应的积分。向量话积分可以用quadv函数 。
具体用法参见书中【例10.1-4】
数值积分计算
2017/9/14
主要内容 矩形区域积分以及离散数据积分 含参数的积分 一般区域二重、三重积分 一般区域n重积分 蒙特卡洛法计算n重积分
2017/9/14
第一节矩形区域积分以及离散数 据积分
2017/9/14
一、 矩形区域积分
积分上下限是常数,分单重、二重、三重三种情况 1. 单重
一、 概要
从MATLAB R2009a版本起,MATLAB终于有了专门求解一般区 域 二重积分的函数——quad2d,该函数采用的自适应积分算法基于L.F. Shampine 的文章:"Vectorized Adaptive Quadrature in MATLAB," Journal of Computational and Applied Mathematics, 211, 2008。该函数 求解一般区域二重积分的效率要远高于上面提到的dblquad的方法。 虽然quad2d可以求解一般区域二重积分,但还是不能直接求解一 般 区域三重积分,而NIT工具箱也没有一般区域三重积分的计算函数 。 这些需要灵活运用MATLAB相关函数来构建。
2017/9/14
二、 离散数据积分
离散数据积分的函数MATLAB只有trapz函数,是针对一重情形的, 如果是二重情形,需要自己编写,其中会用到trapz函数 。 用法示例参见书中【例10.1-5】 以及【例10.1-6】
2017/9/14
第二节 含参数的积分
来自百度文库
2017/9/14
•
• • •
在解决实际问题的时候我们常要求解一些带参数的积分问题, 这涉及到参数的传递,总的说来有以下几种方法可以求解: 用inline+num2str方法(MATLAB7.0以前版本使用,7.0以后不 推荐使用) 利用匿名函数实现 利用嵌套函数实现 利用积分函数本身传递参数 这几种方法的具体实现办法可以参见【例10.2-1】 。
2017/9/14
二、一般区域二重积分的计算
dblquad求解一般区域二重三重积分的思路方法,就是将被积函数“延 拓”到矩形或者长方体区域,但是这种方法不可避免引入很多乘0运算浪 费时间。而quad2d虽然效率很高,但是R2009a之前没有这个函数。因 此,要想在2009a之前的MATLAB7版里里计算一般区域二重三重积 分,需要开辟新的方法。新的方法是调用已有的MATLAB函数求解, 在求一般区域二重积分时,效率和quad2d相比有一些差距,但是相对 于“延拓”函数的做法,效率大大提高了 。 【例10.3-2】和【例10.3-3】给出了这一方法的应用实例,可以看出该方 法在R2009a以前的版本中不失为一种方法,效率要明显高于dblquad帮 助文档里推荐的做法。更重要的是,这给我们求解一般区域三重积分提 供了一种途径。
quad (自适应Simpson 积分) quadl (自适应Gauss-Lobatto积分,最常用 ) quadgk (自适应 Gauss-Kronrod积分,尤其适合震荡积分、含奇点的 积分;从R2007b开始支持) 具体用法参见书中【例10.1-1】
2.二重情形
一般二重积分可以用下面两个函数解决: dblquad quad2d (R2009a开始支持,不仅可以求矩形区域二重积分,还可以 求一般区域二重积分) 具体用法参见书中【例10.1-2】
2017/9/14
第三节 一般区域二重、三重积分
2017/9/14
一、 概要
一般区域上的二重积分,低版本的MATLAB向来支持不好, 7.X版本之前不能通过简单的形式直接求取一般区域上的的二重积 分,往往要借助广泛流传的NIT工具箱(数值积分工具箱)来实 现。后来到了7.X版本,MATLAB引入了匿名函数结构,dblquad的 被积函数可以是匿名函数的形式,利用匿名函数结构,通过适当改 写被积函数。dblquad可以求解一般区域上的二重积分。但这种改 写就是将积分区域表示成逻辑表达式形式并与被积函数相乘,本质 上还是 计算的矩形区域的积分。 仔细分析dblquad的帮助文档中求一般区域二重积分的例子就 会发现,这种办法是把原被积函数外推到了一个矩形区域上来实现 的,该矩形区域包含了被积区域,在被积区域上,外推函数取值和 原函数一样,而在矩形区域内被积区域外的那部分,外推函数取值 都为0.这样外推函数在矩形区域上积分的结果就等于原被积函数在 被积区域的结果。这种数学上简单的变换导致的结果就是,按这种 办法,计算量大增,特别是被积区域非常不规则并布满整个矩形区 域的时候。
2017/9/14
三、一般区域三重积分的计算
模板1: • quadl(@(x) arrayfun(@(xx) quad2d(被积函数f(xx,y,z)关于y,z变量的函数句 柄,y积分下限y1(xx),y积分上限y2(xx),z积分下限z1(xx,y),z积分上限 z2(xx,y)),x),x积分下限值,x积分上限值) 模板2: • quad2d(@(x,y) arrayfun(@(xx,yy) quadl(被积函数f(xx,yy,z)关于z变量的函数 句柄,z积分下限z1(xx,yy),z积分上限z2(xx,yy)),x,y),x积分下限值,x积分上限值,y 积分下限y1(x),y积分上限y2(x)) • 模板3: • quadl(@(x) arrayfun(@(xx) quadl(@(y) arrayfun(@(yy) quadl(被积函数 f(xx,yy,z)关于z变量的函数句柄,z积分下限z1(xx,yy),z积分上限z2(xx,yy)),y),y积 分下限y1(xx),y积分上限y2(xx)),x),x积分下限值,x积分上限值) 模板使用说明:x,y,z是积分变量,模板中除了用语言描述的参量用相应表达式
2017/9/14
一 、矩形区域积分
3. 三重情形 MATLAB中可以利用triplequad函数求解长方体区域的三重 积分。
具体用法参见书中【例10.1-3】
4. 向量化积分
所谓向量化积分,是指被积函数含有参数,需要对参数的一 系列值求出相应的积分。向量话积分可以用quadv函数 。
具体用法参见书中【例10.1-4】
数值积分计算
2017/9/14
主要内容 矩形区域积分以及离散数据积分 含参数的积分 一般区域二重、三重积分 一般区域n重积分 蒙特卡洛法计算n重积分
2017/9/14
第一节矩形区域积分以及离散数 据积分
2017/9/14
一、 矩形区域积分
积分上下限是常数,分单重、二重、三重三种情况 1. 单重