1、2023-5-5主要内容主要内容矩形区域积分以及离散数据积分矩形区域积分以及离散数据积分 含参数的积分含参数的积分一般区域二重、三重积分一般区域二重、三重积分一般区域一般区域n重积分重积分 蒙特卡洛法计算蒙特卡洛法计算n重积分重积分 2023-5-5第一节矩形区域积分以及离散数第一节矩形区域积分以及离散数据积分据积分 2023-5-5一、一、矩形区域积分矩形区域积分积分上下限是常数,分单重、二重、三重三种情况积分上下限是常数,分单重、二重、三重三种情况1.单重单重quad(自适应自适应Simpson 积分积分)quadl(自适应自适应Gauss-Lobatto积分,最常用积分,最常用)quad
2、gk(自适应自适应 Gauss-Kronrod积分,尤其适合震荡积分、含奇点的积分,尤其适合震荡积分、含奇点的积分;从积分;从R2007b开始支持开始支持)具体用法参见书中具体用法参见书中【例例10.1-1】2.二重情形二重情形一般二重积分可以用下面两个函数解决:一般二重积分可以用下面两个函数解决:dblquadquad2d(R2009a开始支持,不仅可以求矩形区域二重积分,还可以开始支持,不仅可以求矩形区域二重积分,还可以求一般区域二重积分求一般区域二重积分)具体用法参见书中具体用法参见书中【例例10.1-2】2023-5-5一一、矩形区域积分、矩形区域积分3.三重情形三重情形MATLAB中
3、可以利用中可以利用triplequad函数求解长方体区域的三重函数求解长方体区域的三重积分。积分。具体用法参见书中具体用法参见书中【例例10.1-3】4.向量化积分向量化积分所谓向量化积分,是指被积函数含有参数,需要对参数的一所谓向量化积分,是指被积函数含有参数,需要对参数的一系列值求出相应的积分。向量话积分可以用系列值求出相应的积分。向量话积分可以用quadv函数函数。具体用法参见书中具体用法参见书中【例例10.1-4】2023-5-5二、二、离散数据积分离散数据积分离散数据积分的函数离散数据积分的函数MATLAB只有只有trapz函数,是针对一重情形的,函数,是针对一重情形的,如果是二重情
4、形,需要自己编写,其中会用到如果是二重情形,需要自己编写,其中会用到trapz函数函数。用法示例参见书中用法示例参见书中【例例10.1-5】以及以及【例例10.1-6】2023-5-5第二节第二节 含参数的积分含参数的积分 2023-5-5在解决实际问题的时候我们常要求解一些带参数的积分问题,在解决实际问题的时候我们常要求解一些带参数的积分问题,这涉及到参数的传递,总的说来有以下几种方法可以求解:这涉及到参数的传递,总的说来有以下几种方法可以求解:用用inline+num2str方法方法(MATLAB7.0以前版本使用,以前版本使用,7.0以后不以后不推荐使用推荐使用)利用匿名函数实现利用匿名
5、函数实现利用嵌套函数实现利用嵌套函数实现利用积分函数本身传递参数利用积分函数本身传递参数这几种方法的具体实现办法可以参见这几种方法的具体实现办法可以参见【例例10.2-1】。2023-5-5第三节第三节 一般区域二重、三重积分一般区域二重、三重积分 2023-5-5一、一、概要概要一般区域上的二重积分,低版本的一般区域上的二重积分,低版本的MATLAB向来支持不好,向来支持不好,7.X版本之前不能通过简单的形式直接求取一般区域上的的二重积版本之前不能通过简单的形式直接求取一般区域上的的二重积分,往往要借助广泛流传的分,往往要借助广泛流传的NIT工具箱(数值积分工具箱)来实工具箱(数值积分工具箱
6、)来实现。后来到了现。后来到了7.X版本,版本,MATLAB引入了匿名函数结构,引入了匿名函数结构,dblquad的的被积函数可以是匿名函数的形式,利用匿名函数结构,通过适当改被积函数可以是匿名函数的形式,利用匿名函数结构,通过适当改写被积函数。写被积函数。dblquad可以求解一般区域上的二重积分。但这种改可以求解一般区域上的二重积分。但这种改写就是将积分区域表示成逻辑表达式形式并与被积函数相乘,本质写就是将积分区域表示成逻辑表达式形式并与被积函数相乘,本质上还是上还是 计算的矩形区域的积分。计算的矩形区域的积分。仔细分析仔细分析dblquad的帮助文档中求一般区域二重积分的例子就的帮助文档
7、中求一般区域二重积分的例子就会发现,这种办法是把原被积函数外推到了一个矩形区域上来实现会发现,这种办法是把原被积函数外推到了一个矩形区域上来实现的,该矩形区域包含了被积区域,在被积区域上,外推函数取值和的,该矩形区域包含了被积区域,在被积区域上,外推函数取值和原函数一样,而在矩形区域内被积区域外的那部分,外推函数取值原函数一样,而在矩形区域内被积区域外的那部分,外推函数取值都为都为0.这样外推函数在矩形区域上积分的结果就等于原被积函数在这样外推函数在矩形区域上积分的结果就等于原被积函数在被积区域的结果。这种数学上简单的变换导致的结果就是,按这种被积区域的结果。这种数学上简单的变换导致的结果就是
8、,按这种办法,计算量大增,特别是被积区域非常不规则并布满整个矩形区办法,计算量大增,特别是被积区域非常不规则并布满整个矩形区域的时候。域的时候。2023-5-5一、一、概要概要从从MATLAB R2009a版本起,版本起,MATLAB终于有了专门求解一般区终于有了专门求解一般区域域二重积分的函数二重积分的函数quad2d,该函数采用的自适应积分算法基于,该函数采用的自适应积分算法基于L.F.Shampine 的文章:的文章:Vectorized Adaptive Quadrature in MATLAB,Journal of Computational and Applied Mathemat
9、ics,211,2008。该函数。该函数求解一般区域二重积分的效率要远高于上面提到的求解一般区域二重积分的效率要远高于上面提到的dblquad的方法。的方法。虽然虽然quad2d可以求解一般区域二重积分,但还是不能直接求解一可以求解一般区域二重积分,但还是不能直接求解一般般区域三重积分,而区域三重积分,而NIT工具箱也没有一般区域三重积分的计算函数工具箱也没有一般区域三重积分的计算函数。这些需要灵活运用这些需要灵活运用MATLAB相关函数来构建。相关函数来构建。2023-5-5二、一般区域二重积分的计算二、一般区域二重积分的计算 dblquad求解一般区域二重三重积分的思路方法,就是将被积函数
10、求解一般区域二重三重积分的思路方法,就是将被积函数“延延拓拓”到矩形或者长方体区域,但是这种方法不可避免引入很多乘到矩形或者长方体区域,但是这种方法不可避免引入很多乘0运算浪运算浪费时间。而费时间。而quad2d虽然效率很高,但是虽然效率很高,但是R2009a之前没有这个函数。因之前没有这个函数。因此,要想在此,要想在2009a之前的之前的MATLAB7版里里计算一般区域二重三重积版里里计算一般区域二重三重积分,需要开辟新的方法。新的方法是调用已有的分,需要开辟新的方法。新的方法是调用已有的MATLAB函数求解,函数求解,在求一般区域二重积分时,效率和在求一般区域二重积分时,效率和quad2d
11、相比有一些差距,但是相对相比有一些差距,但是相对于于“延拓延拓”函数的做法,效率大大提高了函数的做法,效率大大提高了。【例例10.3-2】和和【例例10.3-3】给出了这一方法的应用实例,可以看出该方给出了这一方法的应用实例,可以看出该方法在法在R2009a以前的版本中不失为一种方法,效率要明显高于以前的版本中不失为一种方法,效率要明显高于dblquad帮帮助文档里推荐的做法。更重要的是,这给我们求解一般区域三重积分提助文档里推荐的做法。更重要的是,这给我们求解一般区域三重积分提供了一种途径。供了一种途径。2023-5-5三、一般区域三重积分的计算三、一般区域三重积分的计算模板模板1:quad
12、l(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积分上限值积分上限值,
13、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是积分变量,模板中除了用语言描述的参量用相应表达式是积分变量,模板中除了用语言描述的参量用相应表达式替换掉外,其余结构保持不
14、变。替换掉外,其余结构保持不变。具体使用示例可以参考具体使用示例可以参考【例例10.3-4】2023-5-5第四节第四节 一般区域一般区域n重积分的计算重积分的计算2023-5-5介绍求解一般区域介绍求解一般区域n重积分的函数重积分的函数nIntegrate f=nIntegrate(fun,low,up)f为函数的返回值是为函数的返回值是n重积分积分结果。重积分积分结果。fun是被积函数字符串形式,不同的变量依次以是被积函数字符串形式,不同的变量依次以x1,x2,.xn表示,(需要注意的表示,(需要注意的是,必须以是,必须以x1,x2,.xn这种形式表示,其余像这种形式表示,其余像y1,y2
15、,.yn或是其他表示方法都不或是其他表示方法都不行)。行)。low和和up都是长度为都是长度为n的的cell数组,数组,low存储从外到内各重积分的积分下限函数,存储从外到内各重积分的积分下限函数,up存储从外到内各重积分的积分上限函数(都是字符串形式)。存储从外到内各重积分的积分上限函数(都是字符串形式)。low和和up内的函内的函数表示都要遵循一些原则,这些原则在程序注释里进行了说明数表示都要遵循一些原则,这些原则在程序注释里进行了说明.nIntegrate函数源代码以及使用示例参考书中相关内容以及函数源代码以及使用示例参考书中相关内容以及【例例10.4-1】至至【例例10.4-4】202
16、3-5-5第五节第五节 蒙特卡洛法计算蒙特卡洛法计算n重积分重积分2023-5-5一些积分重数比较高的积分,按照传统方法进行计算的话,运算量会非一些积分重数比较高的积分,按照传统方法进行计算的话,运算量会非常大,求解时间随着重数的增加而迅速增加。在常大,求解时间随着重数的增加而迅速增加。在10.4节虽然给出了一般区域节虽然给出了一般区域n重积分的通用程序,但是在实际计算中,重积分的通用程序,但是在实际计算中,n不会很大,一般不会很大,一般n超过超过5后,求解时后,求解时间就会长到无法接受。对于更高维的积分,一个非常有效的求解方法就是蒙间就会长到无法接受。对于更高维的积分,一个非常有效的求解方法
17、就是蒙特卡洛积分法特卡洛积分法。蒙特卡洛方法又称随机抽样法或统计试验方法,它用于求积分时,与积蒙特卡洛方法又称随机抽样法或统计试验方法,它用于求积分时,与积分重数无关,这点非常重要。虽然四维以下的积分用蒙特卡洛法效率可能不分重数无关,这点非常重要。虽然四维以下的积分用蒙特卡洛法效率可能不如传统的一些数值积分方法,但是维数高的时候,蒙特卡洛法比传统方法要如传统的一些数值积分方法,但是维数高的时候,蒙特卡洛法比传统方法要有效的多,而且实现起来也非常容易。可以说,计算高维积分是蒙特卡洛方有效的多,而且实现起来也非常容易。可以说,计算高维积分是蒙特卡洛方法最成功和典型的应用。法最成功和典型的应用。实际
18、应用中,有多种蒙特卡洛方法可以计算实际应用中,有多种蒙特卡洛方法可以计算n重积分,比较常用的是基重积分,比较常用的是基本蒙特卡洛法和等分布序列的蒙特卡洛法。本蒙特卡洛法和等分布序列的蒙特卡洛法。2023-5-5基本的蒙特卡洛积分法基本的蒙特卡洛积分法实现起来方便,简单易操作。用法详见实现起来方便,简单易操作。用法详见【例例10.5-1】和和【例例10.5-2】。等分布序列的蒙特卡洛法等分布序列的蒙特卡洛法一般的蒙特卡洛法具有计算不可重复性等缺点,相比而言,等序列的蒙一般的蒙特卡洛法具有计算不可重复性等缺点,相比而言,等序列的蒙特卡洛法在选定产生等序列的无理数后,计算结果唯一确定特卡洛法在选定产生等序列的无理数后,计算结果唯一确定,比采用,比采用随机序列的蒙特卡洛法误差阶要好随机序列的蒙特卡洛法误差阶要好。用法详见。用法详见【例例10.5-3】和和【例例10.5-4】。