回 帖 发 新 帖 刷新版面

主题:[讨论]用IMSL 求多重积分问题

想求一个很复杂函数的积分问题,三重积分,函数是x,y,z的函数,z的积分限是a到b,x的积分限是c到d,a,b,c,d已知,y的积分上下限是关于x 的函数。
  想问一下如果用IMSL里的计算三重积分是不是只有QAND这个子程序,而且这个只能实现积分限都是常数的情况?那我所提的问题即y的积分限是x的函数的问题能不能用二重积分TWODQ结合一维积分QDAGS计算?

回复列表 (共1个回复)

沙发

三重积分可用二重积分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

我来回复

您尚未登录,请登录后再回复。点此登录或注册