【问题标题】:Multiple nested integrals in MatlabMatlab中的多个嵌套积分
【发布时间】:2016-06-10 15:42:31
【问题描述】:

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

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 这不会成为问题。为什么这不起作用?

【问题讨论】:

    标签: matlab numerical-integration


    【解决方案1】:

    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)
    

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

    【讨论】:

    • 您好janismac,谢谢!您对我如何制作自己的集成器有任何建议或参考吗?是否可以使用循环函数来做到这一点?
    • 对于矩形域(又名超立方体)上的有界函数,这将非常容易。但是你的函数有一个奇点1/y,这需要某种自适应网格和错误控制。数学超出了我的范围。