0

以下のmatlab/octave関数をCに変換しようとしています(従来の方法-matlab関数を理解し、最初からCでコーディングします)。これは、多項式フィッティングを使用してデータをガウス曲線にフィッティングしています。

   function y=func(data)
   N=128;
   y1=gausswin(N,4);
   x1=[0:1/N:1-1/N]';
   P=polyfit(x1,y1,12);      
   y=polyval(P,data);

しかし、関数polyfitを確認したところ、さらにオクターブライブラリ関数への呼び出しが多く含まれているため、多くの作業が必要であるように見えました。最初にファンデルモンド行列を計算し、次にそれのQR分解を実行し、ベクトルのノルムなどを計算します。

  1. 同様の機能(上記で行われている実際の操作の近似)を使用するために利用できる他のオプション/処理はありますが、いくつかのより単純なカーブフィッティングまたは補間方法を使用します。

任意のポインタが役立ちます。

4

1 に答える 1

1

このような多項式をガウス関数に適合させることの実用的な価値に加えて、コードの動作を分析することができます。

N=128;
y1=gausswin(N,4);
x1=[0:1/N:1-1/N]';
P=polyfit(x1,y1,12);

このセクションの出力は常に同じであるため、MATLABまたはOctaveでこれを実行Pし、定数として含めるCコードで使用するために多項式を抽出することができます。Cですべてを書き直すよりも柔軟性は劣りますが、高速でもあります。

それ以外の場合は、BLASを確認することをお勧めします。BLASは、 LAPACK(MATLABで使用される)などの線形代数に使用されるライブラリのAPIを定義します。これらのライブラリの多くは、必要な基本的な操作を実装すると思います。

追加:数値計算の経験がほとんどない場合、または手から多くの作業を取り出したい場合は、MatlabCoderを検討することをお勧めします。

于 2011-05-12T14:44:26.757 に答える