2012-02-17 9 views
1

私は現在Matlab - 7.0.4の古いバージョンを正確に実行しています。新しいInputParserを含むコードをこの古いバージョンで動作するコードに変換しようとしています。 inputParserのような類似のコマンドを使用できるかどうか疑問に思っていました。古いバージョンのMatlabでInputParserに相当する?

これは私が変換に苦労しているコードのセクションです。

p=inputParser; 
p.addParamValue('clusters', repmat(2,k,1), @(x)isvector(x) && length(x)==k); 
p.addParamValue('numit', 1000, @(x)x>0 && mod(x,1)==0); 
p.addParamValue('abort', 1e-10, @(x)x>=0); 
p.addParamValue('verbose', true, @islogical); 
p.addParamValue('verbosecompact', true, @islogical); 
p.parse(varargin{:}); 
res=p.Results; 
r=res.clusters; 
if res.verbose 
    fprintf('starting graphclustering of %i-partite graph with partition sizes: ',k); 
    disp(n'); 
end 

答えて

2

InputParserの前に、私はいくつかの複雑な機能の始めに50行から100行のコードを使用していました。 (または、InputParserクラスに相当するものをロールバックすることもできます)

手動入力の処理は難しくありません。ちょっと面倒です。動作します

%Check for Clusters 
ix = find(cellfun(@(x)strcmpi(x,'clusters'),varargin)); 
if ~isempty(ix) && (ix+1)<length(varargin) 
    rec.clusters = varargin{ix+1}; 
else 
    rec.clusters = repmat(2,k,1); 
end 

%Check for 'numit' 
% ... following the template above 

:コードは次のようになりwoudl。余分なクレジットのために。メンテナンス性を向上させるためには、同じテンプレートコードをコピーしてコピー/ペーストエラーを発生させるのではなく、パラメータ名とデフォルト値を持つセル配列または構造体を定義し、その構造体にループを書き込むことができます。


編集: これは、入力解析関数の一例であることを主張します。私はそれをテストしていないが、それはどこかで始まるかもしれない。

http://www.mathworks.com/matlabcentral/fileexchange/10670-parseargs-simplifies-input-processing-for-functions-with-multiple-options

関連する問題