我正在努力将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中实现了这个功能,以使事情变得更容易。
任何帮助都将不胜感激。
答案 0 :(得分:0)
GNU Octave是一个类似于MATLAB的开源软件。它具有许多MATLAB函数的实现。您可以在里面找到fzero
- 在源代码分发中查找scripts/optimization/fzero.m
。请注意,Octave是根据GPL许可的,因此可能会影响您的决定。
根据评论fzero
应该是Bisection Method与Secant 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中实现它。