ディクショナリのコードの生成
コード生成用に MATLAB® コードで dictionary オブジェクトを使用できます。dictionary は、データを値として格納するデータ構造体で、この値には対応するキーを使用してアクセスできます。このタイプのデータ構造体は、"ハッシュ マップ" とも呼ばれます。MATLAB のディクショナリの詳細については、ディクショナリを使用したデータ マッピングを参照してください。
コード生成のために MATLAB コード内でディクショナリを使用するときは、一定の考慮事項が適用されます。コード生成におけるディクショナリの制限事項を参照してください。
コード生成でサポートされているディクショナリ関数
keyHash と keyMatch を除くすべての MATLAB ディクショナリ関数がコード生成でサポートされます。コード生成に固有の使用上の注意や制限については、各関数のリファレンス ページの「拡張機能」セクションを参照してください。
例: ディクショナリを使用してフィボナッチ数を計算するコードの生成
この例では、ディクショナリを使用してフィボナッチ数列の指定された位置の値を計算して返す MATLAB 関数について、そのコードを生成する方法を示します。
MATLAB 関数の定義
関数 fibonacci を定義します。この関数では、"n" 番目のフィボナッチ数を反復的に計算し、ディクショナリを使用して中間結果を格納します。ディクショナリを使用することで、前のフィボナッチ数の繰り返しの計算を回避してパフォーマンスを向上させることができます。fibonacci 関数内でargumentsブロックを使用して、入力がスカラーの double であることを指定します。
type("fibonacci.m")function out = fibonacci(n)
arguments
n (1,1) double
end
d = dictionary(1,1,0,0);
maxKey = 1;
while maxKey < n
d(maxKey+1) = d(maxKey)+d(maxKey-1);
maxKey = maxKey+1;
end
out = d(n);
end
サンプルの入力値を使用して MATLAB で関数をテストします。
fibonacci(15)
ans = 610
MEX 関数を使用した問題の確認
コマンド ラインで、codegenコマンドを使用して fibonacci 関数の MEX コードを生成します。入力の型は arguments ブロックで指定しているため、入力引数を指定する必要はありません。
codegen fibonacciCode generation successful.
MATLAB 関数のテストに使用したのと同じ値を使用して MEX 関数をテストします。
fibonacci_mex(15)
ans = 610
C++ コードの生成
コマンド ラインで、fibonacci 関数のスタンドアロンの C++ コードを生成します。-config:lib オプションと -lang:c++ オプションを使用して、C++ スタティック ライブラリを生成します。
codegen -config:lib -lang:c++ fibonacci
Warning: Code generation is using a coder.EmbeddedCodeConfig object. Because Embedded Coder is not installed, this might cause some Embedded Coder features to fail. Code generation successful (with warnings): View report
生成された C++ コードを調べます。
type(fullfile("codegen","lib","fibonacci","fibonacci.cpp"))
//
// File: fibonacci.cpp
//
// MATLAB Coder version : 25.1
// C/C++ source code generated on : 13-Jul-2025 17:32:59
//
// Include Files
#include "fibonacci.h"
#include "dictionary.h"
// Function Definitions
//
// Arguments : double n
// Return Type : double
//
double fibonacci(double n)
{
coder::dictionary d;
double out;
d.init();
for (out = 1.0; out < n; out++) {
double b_d;
b_d = d.read(out) + d.read(out - 1.0);
d.write(b_d, out + 1.0);
}
return d.read(n);
}
//
// File trailer for fibonacci.cpp
//
// [EOF]
//