関数呼び出しの定数への畳み込み
この例では、coder.const
を使用して、生成コードで定数を指定する方法を示します。コード ジェネレーターでは、coder.const
ステートメント内の式または関数呼び出しを、生成コードの定数に畳み込みます。生成コードでは毎回、式を評価したり、関数を呼び出したりする必要がないため、この最適化によって生成コードの実行時間が短縮されます。
入力 Shift
を取り、それをベクトルの要素に追加する関数 AddShift
を記述します。ベクトルは、最初の 10 個の自然数の二乗から構成されます。AddShift
はこのベクトルを生成します。
function y = AddShift(Shift) %#codegen y = (1:10).^2+Shift;
codegen
コマンドを使用して、AddShift
のコードを生成します。コード生成レポートを開きます。
codegen -config:lib -launchreport AddShift -args 0
コード ジェネレーターは、ベクトルを作成するコードを生成します。ベクトル作成中に Shift
をベクトルの各要素に追加します。生成コードでの AddShift
の定義は以下のようになります。
void AddShift(double Shift, double y[10]) { int k; for (k = 0; k < 10; k++) { y[k] = (double)((1 + k) * (1 + k)) + Shift; } }
式 (1:10).^2
を coder.const((1:10).^2)
で置き換え、それから codegen
コマンドを使用して AddShift
のコードを再度生成します。コード生成レポートを開きます。
codegen -config:lib -launchreport AddShift -args 0
コード ジェネレーターは最初の 10 個の自然数の二乗を含むベクトルを作成します。生成されたコードでは、Shift
をこのベクトルの各要素に追加します。生成コードでの AddShift
の定義は以下のようになります。
void AddShift(double Shift, double y[10]) { int i; static const signed char iv[10] = { 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 }; for (i = 0; i < 10; i++) { y[i] = (double)iv[i] + Shift; } }