牛行天下 发表于 2013-8-3 21:15

matlab2011a怎样计算重积分啊?

怎样用matlab实现内积分限是外积分限函数的重积分?其中a,b是常数,谢谢

bainhome 发表于 2013-8-3 22:20

本帖最后由 coohit 于 2016-7-14 10:32 编辑

2012b版本之后,应能使用新函数:

f=@(x,y) sin(x+y).*cos(x+2*y);
g=@(y) sin(y);
q = integral2(f,0,1,0,g)
q =
    0.0530老版本参看http://forum.vibunion.com/forum. ... =1&extra=#pid429038和http://forum.vibunion.com/forum.php?mod=viewthread&tid=147368&pid=846727&page=1&extra=。
不清楚2011a能不能用integral2这个函数,或可参见quad2d函数,这个一般区域积分的函数自2009a之后貌似就有了。

牛行天下 发表于 2013-8-4 07:54

bainhome 发表于 2013-8-3 22:20 static/image/common/back.gif
2012b版本之后,应能使用新函数:
老版本参看这里和这里。
不清楚2011a能不能用integral2这个函数,或可参 ...

嗯,谢谢了哈,刚才我试了试,integral2函数好像在matlab2011a不能用

米斯兰达 发表于 2013-8-4 17:58

假设楼主的f(x,y)是x+y,而φ(y)=y^2吧 那么这个重积分可用下面的方法进行计算

s=quadl(@(x)arrayfun(@(xx)quadl(@(y)xx+y,0,xx.^2),x),a,b)

注意如果f(x,y)和φ(y)里面有*和/,一定要是.*和./

牛行天下 发表于 2013-8-4 20:46

米斯兰达 发表于 2013-8-4 17:58 static/image/common/back.gif
假设楼主的f(x,y)是x+y,而φ(y)=y^2吧 那么这个重积分可用下面的方法进行计算

s=quadl(@(x)arrayfun(@( ...

嗯,谢谢了哈,现在能想到的函数基本上都用了,不大行啊,可能要自己编程了

bainhome 发表于 2013-8-4 22:04

本帖最后由 bainhome 于 2013-8-4 22:08 编辑

就目前所给出这点有限的信息,没觉得哪里用quad2d解决不了,调用方式一样: q = quad2d(f,0,1,0,g)
q =
0.3500
正由于quadl、dblquad等函数系列的算法有局限,例如默认调用方式只能用于矩形区域、振荡积分的易奇异等等,09版本之后对这个积分系列连续做了几次调整,现在已经相对成熟,自编函数如果不是对MATLAB底层函数有所了解,很难比之更好——因为我自己很早前写过一些。
个人看法,仅供参考

米斯兰达 发表于 2013-8-5 07:35

牛行天下 发表于 2013-8-4 20:46 static/image/common/back.gif
嗯,谢谢了哈,现在能想到的函数基本上都用了,不大行啊,可能要自己编程了

是在不行就用蒙特卡洛法吧 点数取多一点

牛行天下 发表于 2013-8-5 07:43

bainhome 发表于 2013-8-4 22:04 static/image/common/back.gif
就目前所给出这点有限的信息,没觉得哪里用quad2d解决不了,调用方式一样:
正由于quadl、dblquad等函数系 ...

嗯,非常感谢您的指点,也可能是我对这些函数不够了解,导致积分时老报错,

牛行天下 发表于 2013-8-5 07:44

米斯兰达 发表于 2013-8-5 07:35 static/image/common/back.gif
是在不行就用蒙特卡洛法吧 点数取多一点

嗯,谢谢您的提示,可能的话就尝试一下
页: [1]
查看完整版本: matlab2011a怎样计算重积分啊?