0

反復ごとに約 200 カルマン フィルターを実行する必要がある Matlab で統計モデルを計算しています。モデルを少なくとも 10 000 回反復したいので、少なくとも 2 000 000 回実行する必要があります。したがって、この部分でMatlabの計算速度を最適化する方法を探しています。使用できるすべてのトリックを使用してMatlabでの計算を最適化しようとするために、操作ごとに操作を既に行っていますが、さらに先に進みたい...

私は C/C++ に精通していませんが、mex ファイルが役立つ場合があることを読みました。この方向に進む価値があるかどうか、誰でも教えてくれますか??? ありがとう...

4

3 に答える 3

0

C/C++ にまったく慣れていない場合、これは難しいでしょう。Matlab 以外の言語の経験があれば幸いです。含まれている多くの例から学習/コピーを試すことができますが、最初に基本を理解する必要があります.

特に1つのこと。mex を使用する場合は、カルマン フィルター ノイズに適切な乱数を取得する方法が必要になります。驚かれるかもしれませんが、計算時間のかなりの部分がノイズの乱数の生成に費やされる可能性があります (フィルターの複雑さによっては 50% を超える可能性があります)。

C/C++ でデフォルトの乱数ジェネレーターを使用しないでください。

これらは科学計算には適していません。特に、必要に応じて膨大な数の値を生成する場合はそうです。最初のオプションは、Matlab で生成された乱数の大きな配列をrandnmex コードに渡すことです。または、C コードのMersenne Twisterアルゴリズム自体を含めて調べ、一様乱数から通常の乱数を生成するスキームを見つけて実装します (対数極が最も単純ですが、Zigguratの方が高速です)。これはそれほど難しいことではありません。私は自分でそれを行いましたが、倍精度 SIMD 指向の Fast Mersenne Twister (dSFMT)は、Matlab の現在の一様変量の実装よりも実際には 2 倍以上高速です。

于 2013-07-24T15:31:18.397 に答える
0

mex ファイルを作成すると、プロセス全体が間違いなく高速化されますが、組み込みの MATLAB 関数の多くを使用することはできません。C++ と C でできることは限られています。もちろん、方法を知っている限り、独自の関数を作成することもできます。

速度の向上は主に、mex ファイルがコンパイルされ、標準の MATLAB スクリプトのように行ごとに解釈されないという事実によるものです。mex をコンパイルすると、他の MATLAB 関数と同じ方法で呼び出すことができます。

大学で取ったクラスでは、独自の画像スケーリング関数を作成する必要がありました。最初は標準スクリプトで作成していましたが、大きな画像では完了するのに数秒かかりましたが、C で mex で作成すると、 0.1 秒未満で完了します。

MEX ファイルのドキュメンテーション

于 2013-07-24T13:24:06.453 に答える