2011-07-20 25 views
48

İsteğe bağlı argümanlar ile MATLAB'de işlevi nasıl bildirebilirim?MATLAB işlevlerinde isteğe bağlı hatalar

Örneğin: isteğe bağlı bir değişken olması gerektiğinden, function [a] = train(x, y, opt).

+1

olası yinelenen http://stackoverflow.com/questions/795823/ varsayılan argümanlar-matlab), [Python'un “Hiçbiri” nin Matlab eşdeğeri] (http://stackoverflow.com/questions/1737523/the-matlab-equivalent-of-pythons-none), [Nasıl başa çıkılır? MATLAB'de işlev argümanlarının isim/değer çiftleri] (http://stackoverflow.com/questions/2775263/how-to-deal-with-name-value-pairs-of-function-arguments-in-matlab) – Amro

+1

İyi tartışmalar bu h http://blogs.mathworks.com/pick/2010/04/02/setting-default-values/ ve burada http://blogs.mathworks.com/loren/2009/05/05/nice-way-to -Set fonksiyonlu-varsayılan / –

cevap

34

Bunun nasıl yapılacağı konusunda birkaç farklı seçenek vardır. En temel varargin kullanmak ve sonra isteğe bağlı bağımsız değişkenlerin işleve iletilip geçirilmediğini belirlemek için nargin, size vb.

% Function that takes two arguments, X & Y, followed by a variable 
% number of additional arguments 
function varlist(X,Y,varargin) 
    fprintf('Total number of inputs = %d\n',nargin); 

    nVarargs = length(varargin); 
    fprintf('Inputs in varargin(%d):\n',nVarargs) 
    for k = 1:nVarargs 
     fprintf(' %d\n', varargin{k}) 
    end 

Biraz daha zarif görünümlü çözüm işlevi tarafından beklenen tüm argümanları tanımlamak için inputParser sınıfını kullanmaktır, hem zorunlu ve isteğe bağlı. inputParser ayrıca tüm argümanlarda tip kontrolü gerçekleştirmenizi sağlar.

36

Bunu yapmanın basit bir yolu nargin (N arguments in). Dezavantajı, argüman listeniz ve nargin kontrollerin eşleştiğinden emin olmanız gerekiyor.

Tüm girişlerin isteğe bağlı olduğunu hatırlamaya değer, ancak ayarlanmamış bir değişkeni çağırırsa işlevler bir hata ile çıkacaktır. Aşağıdaki örnek, b ve c için varsayılanları ayarlar. Mevcut değilse çıkacaktır.

function [ output_args ] = input_example(a, b, c) 
if nargin < 1 
    error('input_example : a is a required input') 
end 

if nargin < 2 
    b = 20 
end 

if nargin < 3 
    c = 30 
end 
end 
32

bu konuda gidiş iyi bir yolu nargin kullanmak, ancak değişkenler exist('opt', 'var') kullanılarak ayarlanmış olup olmadığını kontrol etmek değildir.

Örnek:

function [a] = train(x, y, opt) 
    if (~exist('opt', 'var')) 
     opt = true; 
    end 
end 

bu şekilde yapmanın profesyoneller için bu yanıta bakın: How to check whether an argument is supplied in function call?

[Matlab Standart Argümanlarının] (içinde