如何使用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)
答案 0 :(得分:1)
这取决于您的函数是否以符号或其他方式定义。但是,如果它是象征性定义的,那么五个嵌套的int函数就可以实现。
答案 1 :(得分:1)
Google搜索显示by 2011可能没有可用的标准数字选项。 This是您可以考虑的库。最后,如何使用Monte Carlo?