主题:[讨论]用IMSL 求多重积分问题
pingnuaa
[专家分:0] 发布于 2011-12-07 10:23:00
想求一个很复杂函数的积分问题,三重积分,函数是x,y,z的函数,z的积分限是a到b,x的积分限是c到d,a,b,c,d已知,y的积分上下限是关于x 的函数。
想问一下如果用IMSL里的计算三重积分是不是只有QAND这个子程序,而且这个只能实现积分限都是常数的情况?那我所提的问题即y的积分限是x的函数的问题能不能用二重积分TWODQ结合一维积分QDAGS计算?
回复列表 (共1个回复)
沙发
forcal [专家分:80] 发布于 2011-12-31 05:09:00
三重积分可用二重积分TWODQ结合一维积分QDAGS计算。
参考OpenLu中的三重积分计算,也是用的IMSL库:
//计算三重积分:f(x,y,z)=x*y*z;
//外层:[0, 1];中间层:[0, 1-x];内层:[0, 1-x-y]。
//方法1:用单重积分和二重积分构造三重积分:第一层用单重积分函数QDAGS,第二、三层用二重积分函数TWODQ
//以下所有函数属于同一个模块,同一模块的所有同名模块变量具有相同的值
fyz(y,z::x)=x*y*z; //x是模块变量,模块变量在两个冒号的后面
gyz(y)=0.; //积分下限
hyz(y::x)=1-x-y; //积分上限
//以下函数f2中,x=xx的意思是将自变量xx传给模块变量x,模块变量x在其他函数中将用到
f2(xx::x)= x=xx, IMSL::TWODQ[@fyz,0.,1-x,@gyz,@hyz];
IMSL::QDAGS[@f2,0.,1.]; //得到积分值
//方法2:用单重积分和二重积分构造三重积分:第一、二层用二重积分函数TWODQ,第三层用单重积分函数QDAGS
fz(z::x,y)=x*y*z;
f3(xx,yy::x,y)= x=xx,y=yy, IMSL::QDAGS[@fz,0.,1-x-y];
g(x)=0.; //积分下限
h(x)=1-x; //积分上限
IMSL::TWODQ[@f3,0.,1.,@g,@h];
结果:
1.388888888888889e-003
1.388888888888889e-003
我来回复