MATLAB コードの計算速度を上げる必要があります。この目的のために、インテル® IPP ライブラリーを使用してベクトルを操作する C 言語のプログラムを書き直しました。そして、ここで問題が発生しました。いくつかのステップの後、MATLAB の主な計算サークル プログラムと私の C プログラムは、アルゴリズムの異なるパスに移動します。これは、計算が完全に等しくなく、プログラムが MATLAB の計算結果と比較してエラーを蓄積するために発生します。このため、私のプログラムは正しい勾配を計算せず、最適化アルゴリズム全体がうまくカウントされません。そのため、計算速度は向上しましたが、計算効率が低下しました.100ステップ目のMATLAB計算最適化エラーは0.004で、Cプログラム計算は0.05であり、これは私の仕事にとって重要です.
どの関数でエラーが発生したかを確認し、見つかったもの: 一般的な演算 (ippsAdd_64f_A53、ippsSub_64f_A53、ippsMul_f64_A53、ippsDiv_64f_A53、および通常の C 演算、-、*、/ など) は MATLAB の結果と等しくなり、合計エラーはゼロですが、math.h双曲線関数は、約 -3..-5e-13 の 75699 要素の配列で合計エラーを出します。Intel 関数 ippsCosh_64f_A53 などは、-1..-5e-14 程度の合計エラーを出します。
高精度の双曲線関数と指数関数を計算するライブラリを知っていますか? それとも、Visual Studio 2012 にいくつかのコンパイラ設定があり、それが役に立ちますか?
Intel Parallel Studio XE 2013 がインストールされた VS 2012 で Ipp64f データ型 (double) で行われたすべての計算。
PS: 合計誤差は MATLAB で計算されました。C プログラムからレベル 4 のマット ファイルに配列を保存し、MATLAB にインポートして、MATLAB 配列とインポートされた配列の差を sum(M_cosh - C_cosh); のように合計しました。