2016-04-11 5 views
0

Matlabでparclusterを使用してバッチを使用してジョブを実行します。各ジョブは既存のクラスを使用し、そのメソッドの1つを実行する必要があります。私はそれをparclusterなしで動作させることができますが、parclusterを使用するとエラーが発生します。クラスのメソッドを実行する場合、parclusterを使用してMatlabでバッチジョブを実行する方法

parpoolせずに、この作品:

は簡単なメソッドを持つクラスを定義します。

obj = myclass(); 
obj = add(obj,1); 

この作品:

classdef myclass 
    properties 
     prop; 
    end 
    methods 
     % constructor 
     function obj = myclass() 
      obj.prop = 0; 
     end 
     % add function 
     function obj = add(obj,a) 
      obj.prop = obj.prop + a; 
     end 
    end 
end 

はオブジェクトを作成し、それを使用して機能です。同じことをバッチで実行しようとするとエラーになります。ここで私がやっているものです:

c = parcluster(); 
j = batch(c,@myclass,1,{}); 
wait(j); 
r = fetchOutputs(j); 
obj = r{1}; 
j = batch(c,@add,1,{obj,1}); 

最後の行は、エラーを与える:

warning unable to calculate the dependencies of the files:
add
because: file, function or class "add" may not exist.

は、どのように私は、バッチ内のクラスメソッドを実行できますか?

答えて

1

匿名関数でクラスのメソッドを指定する最も強力な方法は、これは、MATLABは、それがより明示的であるようmyclass.addよりよい解決するのに役立ちます、ドット表記

B = batch(c, @obj.add, 1, {1}); 

wait(B) 

%// Re-assign results to obj (see note below) 
obj = fetchOutputs(B); 

を使用することです。以前に書いたやり方では、MATLABは通常の関数addを探しており、それを見つけることはできません。入力のタイプ(あなたの場合はメソッドであることを知る必要があります)は考慮されません。

Note: batch will make a copy of your object when you pass it as an input. Because of that, you will need to explicitly grab the output and re-assign to obj because the original objwill not be modified in-place.

関連する問題