【问题标题】:Quadruple Integral Using Nested Integral2 in Matlab在 Matlab 中使用嵌套 Integral2 的四重积分
【发布时间】:2023-03-17 05:00:01
【问题描述】:

我正在尝试解决以下形式的问题:

f=@(x,y,z,w) x.*y.*z.*w;          % A complicated black box function
a=1;b=1;c=1;d=1;                  % Integration limits
I=integral2(@(x,y)integral2(@(z,w)f(x,y,z,w),c,-c,d,-d),a,-a,b,-b);

使用这个实现我得到以下错误:

Error using  .* 
Matrix dimensions must agree.

问题是 x、y、z 和 w 的大小不同。对于第一个函数评估,所有输入的大小都相同,但在第二个函数评估中,x 和 y 的大小与 z 和 w 的大小不同。

我该如何解决这个错误?

这个问题类似于这个未回答的问题: Input array size error for a quadraple integration using nested integral2

================================================ ====================================

回应答案:

I=integral(@(x)integral3(@(y,z,w)f(x,y,z,w),b,-b,c,-c,d,-d),a,-a,'ArrayValued',true);

这确实解决了问题,但是,对我来说,为什么这样做并不明显。我之前实际上已经看过这个解决方案,但忘记在我的问题中提及它(http://www.mathworks.com/matlabcentral/answers/77571-how-to-perform-4d-integral-in-matlab)。

我想使用嵌套积分2 来解决,因为我知道我的函数是不连续的,并且想使用迭代积分方法。我可以做这样的事情,但只迭代内部积分,所以我不确定这如何影响准确性:

I=integral(@(x)integral3(@(y,z,w)f(x,y,z,w),b,-b,c,-c,d,-d,'Method','iterated'),a,-a,'ArrayValued',true);

【问题讨论】:

    标签: matlab numerical-integration nested-function


    【解决方案1】:

    为了补充 Daniel 的答案,我终于分解并编写了一个 MATLAB File Exchange 提交,它会自动为您进行嵌套,它可以处理限制是函数而不是常量的更乏味的情况。它被称为integralN,它被编写用于处理4-fold、5-fold 和6-fold 积分。我不认为这是攻击高维集成的好方法,但如果它恰好足够快,可以为你找到工作,那么它就可以使用。

    【讨论】:

      【解决方案2】:

      integral2 用两个相同大小的矩阵参数调用它的被积函数。问题是您不能像在问题中那样在函数调用 f(x,y,z,w) 中混合变量 x,y,z,w ,因为 x 和 y 的维度由外部integral2,而z 和w 的尺寸由内部integral2 确定,因此不能保证尺寸相同。 integralX 函数无论如何都不会向量化,每次调用只能提供一个输出值。

      函数integral 提供了一个选项,以便它仅使用标量值调用其被积函数,并且通过Matlab 标量扩展,这与内部函数integral3 提供的相同大小的3D 数组一起使用。

      I=integral(@(x)integral3(@(y,z,w)f(x,y,z,w),b,-b,c,-c,d,-d),a,-a,'ArrayValued',true);
      

      您可以通过使用arrayfun 封装内部integral2 调用来实现相同的目的(使用标量调用):

      I=integral2(@(x,y)arrayfun(@(x,y)integral2(@(z,w)f(x,y,z,w),c1,c2,d1,d2),x,y),a1,a2,b1,b2)
      

      在我的实验中,后者的速度大约快了六倍。

      【讨论】:

        猜你喜欢
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-20
        • 1970-01-01
        • 2021-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多