如何做数值多重积分(超过三倍)?

时间:2014-12-28 22:27:29

标签: matlab integral

如何使用Matlab进行数值多重积分(三次以上)?

例如,我有一个函数,Y = Func。它有5个变种。因此,Y = func(a,b,c,d,e)。如果我想对a,b,c,d,e进行整合。 (var a是第一个,e是最后一个。)和a = [0,b]的区域(这是一个函数句柄),b = [0,c],c = [0.d],d = [0,e],e = [0,Inf]。

现在,这是我的“真实”问题。代码在

之下
%%%==== just some parameters ====
a=4;
la1=1/(pi*500^2); la2= la1*5;
p1=25; p2=p1/25;
sgma2=10^(-11);
index=1;
g=2./a;
syms r u1 u2 u3 u4 u5
index = -2;  
    powe= index ;
    seta= 10^powe;
    xNor = ( (u5./u1).^(a./2)+ (u5./u2).^(a./2) + (u5./u3).^(a./2)+ (u5./u4).^(a./2) + 1    ).^(2./a);
    x = (xNor).^(0.5) * seta^(-1/a);
    q=pi.*(la1.*p1.^(2./a)+la2.*p2.^(2./a));
%%%====  parameters end ====   

      fun1 =  r./(1+ r.^a );

   out1 = int(fun1, x, Inf) ;
 out1fcn = matlabFunction(out1); %%===Convert symbolicto function handle 

 y  = @(u5,u4,u3,u2,u1) exp(-u3.*(1+2.*... %%<== in method 3, replace as 'y= exp(-u3.*(1+2.*...' 
    (  out1fcn   )./... %%<== in method 3, replace as '(  out1   )./...' 
          (  (( (u5./u1).^(a./2)+ (u5./u2).^(a./2) + (u5./u3).^(a./2)+ (u5./u4).^(a./2) + 1    ).^(2./a)).*seta.^(-2./a)))).*...
          exp(-sgma2.*q.^(-a./2).* seta.*u3.^(a./2)./...
          ((( (u5./u1).^(a./2)+ (u5./u2).^(a./2) + (u5./u3).^(a./2)+ (u5./u4).^(a./2) + 1    ).^(2./a)).^(a./2))  );

%%%=== method 1, not working ============ upper ,lower bound should be a number
%      y1 =   integral(  y  ,0,@(u2) u2);  
%      y2 =   integral(  y1 ,0,@(u3) u3); 
%      y3 =   integral(  y2 ,0,@(u4) u4); 
%      y4 =   integral(  y3 ,0,     Inf);     

%%%=== method 2, not working, y1 is already wrong  =============== 
%%%Undefined function 'minus' for input arguments of type 'function_handle'.
%      y1 =   quad(  y  ,0,@(u2) u2);  
%      y2 =   quad(  y1 ,0,@(u3) u3); 
%      y3 =   quad(  y2 ,0,@(u4) u4); 
%      y4 =   quad(  y3 ,0,     Inf);     

%%%=== method 3. not working, DOUBLE cannot convert the input expression into a double array. ==============
%      y1 =   int(  y  ,0,@(u2) u2);  
%      y2 =   int(  y1 ,0,@(u3) u3); 
%      y3 =   int(  y2 ,0,@(u4) u4); 
%      y4 =   int(  y3 ,0,     Inf);     
%      y5 =   double(y4)

2 个答案:

答案 0 :(得分:1)

这取决于您的函数是否以符号或其他方式定义。但是,如果它是象征性定义的,那么五个嵌套的int函数就可以实现。

答案 1 :(得分:1)

Google搜索显示by 2011可能没有可用的标准数字选项。 This是您可以考虑的库。最后,如何使用Monte Carlo