【发布时间】: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