これを行う1つの方法は、機能の代わりにclassを書き込むことです。以下は、あなたが望むだけ拡大できる非常に基本的なクラスを定義しています。私の例では、関数内の2つのステップをrunFirstStep
とrunSecondStep
という2つの関数に分割する必要があります。
あなたは
obj = myAwesomeClass;
finalResults = obj.run(inputData); %# pass inputData for the first step if necessary
中間結果がobj.intermediateResults
に保存されているとして、それを実行したいので、あなたは再びrun
を呼び出す場合、最初のステップは、自動的に省略されています。
必要に応じて、プロパティintermediateResults
のセットとget関数を追加できます。 set関数は、関数に書き込むたびに結果をディスクに書き込みます。get関数は、呼び出されてプロパティが空のときに中間結果(存在する場合)をロードしようとします。
classdef myAwesomeClass<handle
properties
intermediateResults
end
methods
function finalResults = run(obj,inputData)
%# run accepts the object and runs both steps, if necessary
%# inputData is the data that is processed (if it's not loaded inside runFirstStep)
%# the first step only needs to run if there are no intermediate results
if isempty(obj.intermediateResults)
obj.intermediateResults = runFirstStep(inputData);
end
%# we always want to run the second step
finalResults = runSecondStep(obj.intermediateResults);
end
end
end
もちろん、あなたも同様にそれのために保存してメソッドを取得/セットを追加し、プロパティにfinalResults
を救うことができる、あなたはあなたの結果の素敵なプロットを生成するplot
メソッドを追加することができます。要するに、このクラスを使用すると、データとのやりとりに必要なすべての機能を便利に収集できます。
1:([固定変数]、私は一般的に二つの部分(つまり、初期処理と独立した機能で二次加工)にコード全体を壊すことをお勧めしますが、目的は1つの関数にすべてのものを維持することである場合には、HTTP ://www.mathworks.com/help/techdoc/ref/persistent.html)は、間違いなく最も単純な解決策です。 – gnovice