我正在尝试整合以下形式的嵌套积分:
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
,这不会成为问题。为什么这不起作用?
答案 0 :(得分:0)
integral()
的范围参数必须是数字,但您提供的函数为pmax
和ymin
。你需要评估它们。我将它分成多行,使其有点可读。
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)
以这种方式实现高维集成似乎效率很低,但在写这篇文章的时候,它并没有在我的机器上完成。您可能必须实施自己的集成商。