ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

永続変数の使用

この例では、永続変数を使用する MATLAB 関数 'compute_average' から MEX 関数を生成する方法を示します。また、関数を使って新しい値セットの平均を計算する前に、永続変数の状態をクリアしなければならないということも示します。

必要条件

この例には必要条件はありません。

新規フォルダーの作成と関連ファイルのコピー

以下のコードは、現在の作業フォルダー (pwd) 内にフォルダーを作成します。この新規フォルダーには、この例に関連するファイルのみが含められます。現在のフォルダーに影響を与えたくない (またはこのフォルダーにファイルを生成できない) 場合は、作業フォルダーを変更する必要があります。

コマンドの実行: 新規フォルダーの作成と関連ファイルのコピー

coderdemo_setup('coderdemo_persistent');

関数 'compute_average' について

compute_average.mcompute_average.m は、1 つの値で 1 度に関数を呼び出せるように、2 つの永続変数 (累積合計と、これまで追加された値の数) を使用します。

type compute_average
% y = compute_average(x)
% This function takes an input scalar value 'x' and returns the average
% value so far.
function y = compute_average(x) %#codegen
assert(isa(x,'double')); % Input is scalar double

% Declare two persistent variables 'sum' and 'cnt'.
persistent sum cnt;

% Upon the first call we need to initialize the variables.
if isempty(sum)
    sum = 0;
    cnt = 0;
end

% Compute the accumulated sum and the number of values so far.
sum = sum + x;
cnt = cnt + 1;

% Return the current average.
y = sum / cnt;

%#codegen 命令は、当該の MATLAB コードがコード生成用であることを示します。

MEX 関数の生成

最初に、コマンド codegencodegen を使用して MEX 関数を生成し、コンパイルする MATLAB ファイルの名前を指定します。

codegen compute_average

既定の設定では、'codegen' は現在のフォルダーの中に 'hello_world_mex' という名前の MEX 関数を生成します。これにより、MATLAB コードと MEX 関数をテストして結果を比較することができます。

MEX 関数の実行

(10 + 20 + 100) / 3 = 43.3333

compute_average_mex(10)
compute_average_mex(20)
compute_average_mex(100)
ans =

    10


ans =

    15


ans =

   43.3333

永続変数の内部状態のクリア

'clear mex' コマンドを使って永続変数をクリアします。

clear mex

MEX 関数を再度実行して異なる値セットの平均を計算

(10 + 20 + 30 + 40) / 4 = 25

compute_average_mex(10)
compute_average_mex(20)
compute_average_mex(30)
compute_average_mex(40)
ans =

    10


ans =

    15


ans =

    20


ans =

    25

クリーンアップ

ファイルを削除して元のフォルダーに戻ります。

コマンドの実行: クリーンアップ

cleanup
この情報は役に立ちましたか?