C / C ++实现matlab函数fzero

时间:2012-03-08 05:13:17

标签: c++ objective-c c matlab

我正在努力将matlab函数gamfit转换为objective-c代码。接近gamfit的末尾,它调用另一个名为fzero的函数:http://www.mathworks.com/help/techdoc/ref/fzero.html

即使在阅读了matlab文档后,我也无法理解当x0是向量时此函数如何运行,就像我的情况一样。

以下是matlab文档中关于这个主题的内容:“如果x0是长度为2的向量,则fzero假定x0是乐趣符号(x0(1))与乐趣符号不同的区间(x0( 2))。如果不是这样,就会发生错误。用这样的间隔调用fzero可以保证fzero会在有趣的符号变化点附近返回一个值。“

我希望有人已经在C / C ++ / objective-c中实现了这个功能,以使事情变得更容易。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

GNU Octave是一个类似于MATLAB的开源软件。它具有许多MATLAB函数的实现。您可以在里面找到fzero - 在源代码分发中查找scripts/optimization/fzero.m。请注意,Octave是根据GPL许可的,因此可能会影响您的决定。

根据评论fzero应该是Bisection MethodSecant Method的组合。

另一个好的开始是Numercial Recipes系列丛书(选择最新的C ++版本)。

答案 1 :(得分:0)

GNU Scientific Library实现了许多用于查找多项式和其他函数根的方法。您可以调整一些代码,或者通过调用必要的函数来节省时间。

顺便说一下:而不是问'如何在Objective-C中实现Matlab函数X?'正如你现在做了几次,如果你问'如何在Objective-C中实现方法Y',你可能会取得更好的进展,并得到更好的答案。在某些情况下,我怀疑,你不需要Matlab函数的完整通用性来获得你需要的功能,所以Y可能不是X的全部。

Matlab代码的逐行翻译(即使您可以访问它)也不太可能引导您获得良好的Objective-C代码;例如,Matlab的大部分代码都显示出面向对象的迹象。更好的方法是了解Matlab代码的作用并在Objective-C中实现它。