Matlab中的多个嵌套积分

时间:2016-06-10 15:42:32

标签: matlab numerical-integration

我正在尝试整合以下形式的嵌套积分:

s_min = 0; 
s_max = lam;
t_min = 0; 
t_max = pi;
pmax =  @(x,y) y;
pmin = 0;
ymax = 1;   
ymin = @(x) x;
xmax = 1;
xmin = 0;

eqn = integral(@(x) x.*integral(@(y) (1/y).*integral(@(p) (exp(-arrayfun(@(p,x,y)integral2(@(s,t)myfun(s,t,p,x,y),s_min,s_max,t_min,t_max),p,x,y)./(k.*T))),pmin,pmax,'Arrayvalued',true),ymin,ymax,'Arrayvalued',true),xmin,xmax,'Arrayvalued',true)

然而,我收到错误:

  

使用积分时出错(第85行)
  A和B必须是浮点标量。

我想通过为单个积分添加'Arrayvalued',为双积分添加arrayfun,这不会成为问题。为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

integral()的范围参数必须是数字,但您提供的函数为pmaxymin。你需要评估它们。我将它分成多行,使其有点可读。

fa = @(p,x,y) @(s,t) myfun(s,t,p,x,y);
fb = @(p,x,y)integral2(fa(p,x,y),s_min,s_max,t_min,t_max);
fc = @(x,y) @(p) (exp(-arrayfun(fb,p,x,y)./(k.*T)));
fd = @(x)@(y) (1/y).*integral(fc(x,y),pmin,pmax(x,y),'Arrayvalued',true);
fe = @(x) x.*integral(fd(x),ymin(x),ymax,'Arrayvalued',true);
eqn = integral(fe,xmin,xmax,'Arrayvalued',true)

以这种方式实现高维集成似乎效率很低,但在写这篇文章的时候,它并没有在我的机器上完成。您可能必须实施自己的集成商。