ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

persistent

構文

persistent X Y Z

説明

persistent X Y Z は、宣言される関数にローカルな変数として XYZ を定義します。さらに XY、および Z の値は、関数の呼び出し間でメモリに保持されます。MATLAB® ソフトウェアが両方に対して永久記録媒体を作成するため、永続変数はグローバル変数と同じです。グローバル変数とは異なり、永続変数は、宣言された関数内でのみ既知になります。これにより、他の関数や MATLAB コマンド ラインから永続変数が変更されることを避けることができます。

メモリ内の関数を消去したり、変更したりすると、この関数によって宣言された永続変数もすべて、MATLAB によって消去されます。MATLAB を終了するまで関数をメモリ内に置いておくには、mlock を使用します。

はじめて persistent ステートメントを実行したときに、永続変数が存在しない場合、変数は空行列に初期化されます。

現在のワークスペースに同じ名前の変数が存在する場合、変数を persistent として宣言すると、エラーになります。関数の入力または出力引数のいずれかを同じ関数内で persistent として宣言した場合も MATLAB ではエラーになります。たとえば、次の persistent 宣言は無効です。

function myfun(argA, argB, argC)
persistent argB

この関数は、スプレッドシート ファイルに大規模な配列を書き込み、そのファイルから複数の行を読み取ります。スプレッドシートへの配列の書き込みは一度しか必要ないため、プログラムは、配列がファイルから読み取り可能かどうかをテストし、可能な場合、この作業を繰り返しません。dblArray 変数を永続変数として定義すると、配列がスプレッドシート ファイルから読み取られたかどうかを容易に確認できます。

次に、関数 arrayToXLS を示します。

function arrayToXLS(A, xlsfile, x1, x2)
persistent dblArray;

if isempty(dblArray) 
    disp 'Writing spreadsheet file ...'
    xlswrite(xlsfile, A);
end

disp 'Reading array from spreadsheet ...'
dblArray = xlsread(xlsfile, 'Sheet1', [x1 ':' x2])
fprintf('\n');

この関数を 3 回実行し、そのたびに経過時間を確認します。最初の実行時に関数によってスプレッドシートが作成されるため、2 回目と 3 回目の実行時の経過時間はその約十分の一になります。

largeArray = rand(4000, 200);

tic,  arrayToXLS(largeArray, 'myTest.xls','E254', 'J256'),  toc
Writing spreadsheet file ...
Reading array from spreadsheet ...
dblArray =
    0.0982    0.3783    0.1264    0.7880    0.1902    0.5811
    0.2251    0.2704    0.5682    0.7271    0.8028    0.2834
    0.6453    0.5568    0.8254    0.4961    0.9096    0.5402

Elapsed time is 8.990525 seconds.


tic,  arrayToXLS(largeArray, 'myTest.xls','E257', 'J258'),  toc
Reading array from spreadsheet ...
dblArray =
    0.4620    0.3781    0.6386    0.5930    0.0946    0.4865
    0.1605    0.1251    0.8709    0.5188    0.6702    0.2138

Elapsed time is 0.912534 seconds.


tic,  arrayToXLS(largeArray, 'myTest.xls','E259', 'J262'),  toc
Reading array from spreadsheet ...
dblArray =
    0.7015    0.6588    0.4023    0.0359    0.4512    0.6097
    0.1308    0.6441    0.0431    0.6396    0.7481    0.8688
    0.8278    0.2686    0.5475    0.8550    0.5896    0.1080
    0.9437    0.1671    0.0505    0.1203    0.2461    0.7306

Elapsed time is 0.928843 seconds.

メモリから関数 arrayToXLS を消去し、この関数を実行しても経過時間が長くならないことを確認します。

clear functions

tic,  arrayToXLS(largeArray, 'myTest.xls','E263', 'J264'),  toc
Writing spreadsheet file ...
Reading array from spreadsheet ...
dblArray =
    0.6292    0.7788    0.0732    0.6481    0.9299    0.8631
    0.7700    0.5181    0.9805    0.5092    0.8658    0.4070

Elapsed time is 7.603461 seconds.

詳細

すべて展開する

ヒント

persistent コマンドの関数型はありません (すなわち、変数をかっこや引用符で囲めません)。

参考

| | | | |

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