- 积分
- 57
- 注册时间
- 2006-1-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 rocwoods 于 2009-4-9 20:02 编辑
我们知道,对于一般区域上的二重积分,MATLAB向来支持不好,7版本之前不能通过简单的形式直接求取一般区域上的的二重积分,往往要借助NIT工具箱来实现。后来到了7版本,MATLAB引入了匿名函数结构,dblquad的被积函数可以是匿名函数的形式,它的帮助文档也给出了用dblquad求一般区域上二重积分的简单说明。说白了,就是将积分区域表示成逻辑表达式形式并与被积函数相乘,本质上还是计算的矩形区域的积分。
我们仔细分析就会发现,实际上,这种办法是把原被积函数外推到了一个矩形区域上来实现的,该矩形区域包含了被积区域,在被积区域上,外推函数取值和原函数一样,而在矩形区域内被积区域外的那部分,外推函数取值都为0.这样外推函数在矩形区域上积分的结果就等于原被积函数在被积区域的结果。这种数学上简单的变换导致的结果就是按这种办法,计算量大增,特别是被积区域非常不规则并布满整个矩形区域的时候。
让人高兴的是,2009a版本终于专门求解一般区域二重积分的函数——quad2d
最简单的调用格式(详细使用可以参考帮助文档)是其中,f是被积函数,可以是匿名函数,句柄,内联函数等等。a,b是最外重积分的常数项。c,d可以使常数也可以是匿名函数,代表内层积分的上下限。
举个例子说明:被积函数f(x,y) = sqrt(10^4-x^2) 在x^2+y^2<=10^4区域的积分
大家可以比较下面两行代码的运算时间- tic,y1 = dblquad(@(x,y) sqrt(10^4-x.^2).*(x.^2+y.^2<=10^4),-100,100,-100,100 ),toc
- tic,y2 = quad2d(@(x,y) sqrt(10^4-x.^2),-100,100,@(x)-sqrt(10^4-x.^2),@(x)sqrt(10^4-x.^2)),toc
复制代码 在我的电脑上,上面两种方法速度相差500多倍。
可见,quad2d才是真正有效求解一般区域二重积分的函数。
可惜现在没见到一般区域三重积分的函数,求解一般区域三重积分可能还得将其外推到长方体,然后用triplequad。希望未来的版本看到求解一般区域三重积分的函数。 |
|