2016-07-20 4 views
1

MATLABには、マトリクス(ofcourse)で動作する微調整アルゴリズムがあります。私はこのアルゴリズムのCコードを生成するためにmatlabコーダーを使用して、期待どおりに動作します。ここ Matlab Coderを使用して生産用アルゴリズムを生成

私はMATLABで

x = B/A 

  • Bのサイズである請求項1 * 500(行×列)
  • Aはサイズ10である* 500
  • を使用関数呼び出しの
  • x、結果はサイズ1 * 10

Matlab Coderを使用してこれをCソースに変換したとき。私は、関数定義が上記のサイズと同じパラメータを受け入れることに気付きました。プロトタイプおよびテストの目的のために

void myfunction(const double B[500], const double A[5000], double x[10]) 

これは大丈夫そうです。しかし、私はこの機能を異なるサイズにも使用することを好みます。たとえば、上記の変数の代わりに100を使用することもできます。私のアルゴリズムで行列の次元の依存性を取り除くにはどうすればよいですか?

さらに、ハードコードされた整数を使用するコード行はほとんどありません。例えば、コードは

if (rankR <= 1.4903363393874656E-8) 
// Some internal function calls 
else 
// Usage of standard sqrt 

または

500.0 * fabs(A[0]) * 2.2204460492503131E-16 

似ているいずれかは、これらのハードコーディングされた整数が何であるかを説明してもらえますか?これらはMATLABで使用したテストデータから生成されていますか?

答えて

1

参照する関数呼び出しがエントリポイント関数の場合、Coderを設定するときにサイズを定義できます。コーダーを実行する最も簡単な方法は、MATLAB内の 'Apps'メニューからGUIを使用することです(またはコンソールで 'coder'と入力してください)。エントリポイント関数を指定した後、ステップ2では、入力変数のそれぞれのタイプとサイズを定義します。あなたの入力変数の各次元に対して

(必要に応じて2つ以上存在することができます)、次のように指定できます。

n - dimension is exactly n long 
:n - dimension is up to n long 
inf - dimension is unbounded 

関数呼び出しは、エントリポイント関数ではなく、内部に埋設されている場合あなたのコード(またはコンソールからコード生成機能を実行している場合)、あなたは明示的に、様々なサイズのものとして変数を定義することができます。

coder.varsize('myVariableName'); 

ベア心​​の中でいくつかの機能は、(コーダで)のみを使用できること修正したDサイズの入力。ここ

フラーの説明:残念ながらランダム定数の http://uk.mathworks.com/help/fixedpoint/ug/defining-variable-size-data-for-code-generation.html#br9t627

わかりません。

関連する問題