michael02 发表于 2009-3-29 01:23:25

变上下限三重定积分问题如何求得数值积分解?

请教各位大侠,下面的三重定积分问题如何利用数值积分得到解答?
现在需要求解复杂函数的三重积分问题,只能求助于数值积分。由于matlab自带的triplequad函数不能求解变上下限的定积分问题,现求教于各位!望大家多多指教!!

bainhome 发表于 2009-3-29 16:08:34

版内搜索关键词:“NIT”

michael02 发表于 2009-3-29 21:06:04

谢谢!!!

bainhome 发表于 2009-3-29 21:06:53

本帖最后由 bainhome 于 2009-3-29 21:08 编辑

sorry,看错了,三重变上、下限积分似乎并没有现成可资利用的函数求解,gquadnd函数同样是三重定积分求解函数,其中第二、三个参数是常数1×3阶的向量。
可以把原函数贴出来大家参谋参谋看看。我的电脑上没装MATLAB——主要是希望直接装2009a,忍了将近一个月了。

rocwoods 发表于 2009-3-30 10:10:21

呵呵,需要纠正一点了。NIT工具箱诞生的时候,貌似MATLAB的dblquad和triplequad都不能简洁得解决变上限积分。很多教材上、网上流传的帖子也都这么说,这么多年也就一直这么说下来了,大家你转我转一直是这个观点。可是MATLAB早就发展到能简洁得解决变上限二、三重积分了。帮助文档里dblquad说得比较详细,而triplequad没有怎么说。可是参考了dblquad后可以照葫芦画瓢应用到triplequad上。
就拿楼主给的例子来说吧:用MATLAB自带的triplequad解决如下:
triplequad(@(x,y,z) x.*(x+2*y+z<=1).*(x+2*y<=1),0,1,0,1,0,1);
用符号积分验证下:
syms x y z
double( int(int(int(x,z,0,1-x-2*y),y,0,(1-x)/2),0,1) )
可以看出,现在dblquad和triplequad求解变上限积分非常简洁。最后一个被积变量和约束条件最终限制了积分结果。大家可以试试下面的体会下:
triplequad(@(x,y,z) x.*(x+2*y+z<=1).*(x+2*y<=1),0,1,0,100,0,100);
triplequad(@(x,y,z) x.*(x+2*y+z<=1).*(x+2*y<=1),0,1,0,10,0,10);
triplequad(@(x,y,z) x.*(x+2*y+z<=1).*(x+2*y<=1),0,1,0,0.3,0,3);


bainhome 发表于 2009-3-30 11:12:11

厉害!怎么不早拿出来show?出糗是小事,差点儿让我用错误结论误导别人。:)
另外,v7之后从哪一版开始可以这样做的呢?因为印象中v6的函数句柄是采用inline来实现的。

rocwoods 发表于 2009-3-30 15:31:14

2006b之前的版本我没试过,知道这个的时候用的是2007a,2007a之后都可以。
不知道V6,可否将@(x,y,z) x.*(x+2*y+z<=1).*(x+2*y<=1)写成inline形式后能用上述办法解决。手头没V6,无法试验。

bainhome 发表于 2009-3-30 16:13:03

triplequad在6里面不知道有没有。

michael02 发表于 2009-3-30 22:53:47

谢谢二位大侠的指点!!!
页: [1]
查看完整版本: 变上下限三重定积分问题如何求得数值积分解?