我现在fminbnd
在 Matlab 中使用,我发现它比较慢(我在嵌套循环中使用它)。函数本身、它的接口和它返回的值都很棒,但是当查看 .m 文件时,我发现它没有优化。事实上,我希望这样的东西能被写成一个墨西哥。
任何人都知道替代方案的fminbnd
工作速度更快并且没有那么多开销?
我现在fminbnd
在 Matlab 中使用,我发现它比较慢(我在嵌套循环中使用它)。函数本身、它的接口和它返回的值都很棒,但是当查看 .m 文件时,我发现它没有优化。事实上,我希望这样的东西能被写成一个墨西哥。
任何人都知道替代方案的fminbnd
工作速度更快并且没有那么多开销?
之所以这样写,是因为它必须feval
在每次迭代时评估 ( ) 您的用户定义函数。Matlab 的 ODE 求解器以同样的方式工作。在当前的 Matlab 中,C/C++ 代码调用用户定义的 Matlab 函数并迭代读取其返回值的成本很高。
确保您正确使用选项,这fminbnd
是正确的工具(也许更简单的方案会更好,或者,因为这是一个循环,所以可能更合适的多维方法fminsearch
),并优化了您的目标函数. 下一个最简单的方法是尝试将您的 Matlab 代码编译为 C 或 C++(请参阅 参考资料codgen
)。您可能需要编译您的目标函数和所有选项,以避免上述减速问题。我没有尝试过这个fminbnd
,但我确实看到提到它在网上工作。如果您的目标函数本身很复杂,您可以尝试将其转换为 mex 函数。
fminbnd
是基于布伦特的方法。您可以在此处找到 C、C++ 和 FORTRAN 代码。GSL还有一个版本:gsl_min_fminimizer_brent
.