首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab中使用嵌套Integral2的四重积分

Matlab中使用嵌套Integral2的四重积分
EN

Stack Overflow用户
提问于 2014-08-05 14:19:20
回答 2查看 2.2K关注 0票数 1

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

代码语言:javascript
运行
复制
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);

使用此实现,我得到以下错误:

代码语言:javascript
运行
复制
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

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

在答复中:

代码语言:javascript
运行
复制
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)中提到它。

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

代码语言:javascript
运行
复制
I=integral(@(x)integral3(@(y,z,w)f(x,y,z,w),b,-b,c,-c,d,-d,'Method','iterated'),a,-a,'ArrayValued',true);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-05 15:49:33

integral2用两个相同大小的矩阵参数调用它的integrand。问题是,你不能像你在问题中那样,把变量x,y,z,w混合在函数调用f(x,y,z,w)中,因为x和y的维数是由外部integral2决定的,而z和w的维数是由内部integral2决定的,因此不能保证维数是相同的。无论如何,integralX函数并不是矢量化的,每个调用只能提供一个输出值。

函数integral提供了一个选项,因此它只使用标量值调用它的integrand,并且通过Matlab标量展开,它与内部函数integral3提供的相同大小的3D数组一起工作。

代码语言:javascript
运行
复制
I=integral(@(x)integral3(@(y,z,w)f(x,y,z,w),b,-b,c,-c,d,-d),a,-a,'ArrayValued',true);

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

代码语言:javascript
运行
复制
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)

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

票数 2
EN

Stack Overflow用户

发布于 2014-09-30 15:50:55

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25141102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档