2012-03-08 8 views
0

私はmatlab関数のgamfitをobjective-cコードに変換しています。 gamfitの最後にはfzeroという別の関数が呼び出されています。matlab関数fzeroのC/C++の実装

私の場合のように、x0がベクトルの場合、この関数がどのように動作するのかを理解できません。

ここでは、「x0が長さ2のベクトルである場合、x0は楽しい記号(x0(1))が楽しい記号(x0このような間隔でfzeroを呼び出すと、fzeroはfunが変更されたポイントの近くの値を返すことが保証されます。

誰かがすでにこの機能をC/C++/objective-cで実装していて、もっと簡単にすることを望んでいたと思います。

ご協力いただければ幸いです。

+0

私は正しくfzero多項式の解を覚えていれば、これは簡単にはできませんか? – Pepe

+0

@ P.R:fzeroは、指定された関数の符号変化を探します。 –

+2

私は、あなたが行って、 'gamfit'またはそれと同等のものの既存の実装をどこか別の場所に見つけるべきだと思います。これらのタイプのアルゴリズムは、基本的な数値問題の注意と理解を多く必要とします。私はいくつかの数値解析コースを取ってきましたが、このタイプのものをプロダクションコードに実装するのは嫌です。開始するのに良い場所はここにあるでしょう(http://stackoverflow.com/questions/9577541/matlab-gamfit-and-gampdf-functions-written-in-c) – sterin

答えて

0

GNU Octaveは、MATLABに似たオープンソースソフトウェアです。これには多くのMATLAB関数が実装されています。 fzeroが内部にあります - ソース配布物にscripts/optimization/fzero.mがあります。 OctaveはGPLの下でライセンスされているので、あなたの決定に影響を与える可能性があることに注意してください。

コメントによるとfzeroBisection MethodSecant Methodの組み合わせであると考えられます。

もう1つの良い場所は、Numercial Recipesシリーズの書籍(最新のC++バージョンを選ぶ)です。

0

GNU Scientific Libraryは、多項式の根やその他の関数を見つけるためのさまざまな方法を実装しています。おそらく、コードの一部を変更したり、必要な機能を呼び出すだけで時間を節約することができます。

「Objective-CでMatlab関数Xを実装するにはどうしたらいいですか? Objective-CでメソッドYを実装するにはどうすればよいですか?」という質問をすれば、より良い進歩を遂げ、より良い答えを得ることができます。場合によっては、必要な機能を得るためにMatlab関数の完全な一般性を必要としないため、YがXのすべてではない可能性があります。

Matlabのコードからスラブラインでの変換あなたがそれにアクセスできない場合)、あなたを良いObjective-Cコードに導くことはまずありません。例えば、利用可能なMatlabのコードの多くは、オブジェクト指向性の兆候をほとんど示さない。より良いアプローチは、Matlabコードが何をするのかを理解し、それをObjective-Cで実装することです。