Matlab 使用MEX的双重积分

Matlab 使用MEX的双重积分,matlab,integration,anonymous-function,mex,Matlab,Integration,Anonymous Function,Mex,我需要编写一个MEX文件来计算任意函数的二重积分,因为在Matlab中数值积分太慢。 到目前为止,我只能手动定义我使用的所有可能函数,并解析MEX文件中的字符串以选择要集成的函数。这很难看。 我想把函数直接发送到MEX文件,比如 myIntMex(@(x,y)f,0,1,0,1) 在区间[0,1]x[0,1]中集成函数f 到目前为止,我找到的唯一选择是mexCallMATLAB,但我也读到它甚至比纯Matlab还要慢。 我还发现了一个免费的代码,但它只适用于单积分 所以我的问题是:我该怎么做?

我需要编写一个MEX文件来计算任意函数的二重积分,因为在Matlab中数值积分太慢。 到目前为止,我只能手动定义我使用的所有可能函数,并解析MEX文件中的字符串以选择要集成的函数。这很难看。 我想把函数直接发送到MEX文件,比如

myIntMex(@(x,y)f,0,1,0,1)
在区间
[0,1]x[0,1]
中集成函数
f

到目前为止,我找到的唯一选择是
mexCallMATLAB
,但我也读到它甚至比纯Matlab还要慢。 我还发现了一个免费的代码,但它只适用于单积分


所以我的问题是:我该怎么做?如何为MEX文件提供函数句柄?这方面的代码是否已经存在?

能否提供一个示例?根据我的经验,缓慢的性能通常是由函数调用引起的,而不是由
integral2
本身引起的。你试过增加容忍度吗?你可能是对的。我需要集成的函数
f
非常长且复杂,无法在此处编写。即使是对
f
的简单评估也需要很多时间(30秒)。增加公差有点效果,但我必须大量增加公差才能获得理想的结果(例如,使用
absol
1000(一个荒谬的值),需要40秒)。无论如何,使用我的(丑陋的)MEX文件,我可以比默认的
integral2
更快地集成100倍。我曾考虑过向MEX函数提供一个包含函数的字符串,但似乎你也会被困在那里(见此)。您可能可以为每个新函数创建一个C(++)文件,并使用动态链接进行集成。@hbaderts是的,这是我唯一能想到的解决方案。但是,我希望避免为每个函数创建一个C文件。另外,如果你看一下我链接的代码,它确实做了我想做的事情,但只对单积分,也就是说,我给MEX文件任何函数句柄,它计算积分。所以,似乎可以做我想做的事情,但我不知道如何做。@Simon你可能是对的。我刚刚找到一篇文章,关于你链接的库的作者在哪里描述了一些未记录的MEX特性,但没有详细介绍。这可能是因为他找到了一种没有文档记录的调用函数句柄的更快方法。