2011-07-20 29 views
48

¿Cómo puedo declarar la función en MATLAB con argumentos opcionales?Args opcionales en funciones de MATLAB

Por ejemplo: function [a] = train(x, y, opt), donde opt debe ser un argumento opcional.

+1

posible duplicado de [los argumentos por defecto en Matlab] (http://stackoverflow.com/questions/795823/ default-arguments-in-matlab), [El equivalente de Matlab de "Ninguno" de Python] (http://stackoverflow.com/questions/1737523/the-matlab-equivalent-of-pythons-none), [Cómo lidiar con nombre/valor pares de argumentos de función en MATLAB] (http://stackoverflow.com/questions/2775263/how-to-deal-with-name-value-pairs-of-function-arguments-in-matlab) – Amro

+1

Buenas discusiones de esta h Aquí http://blogs.mathworks.com/pick/2010/04/02/setting-default-values/ y aquí http://blogs.mathworks.com/loren/2009/05/05/nice-way-to -set-function-defaults / –

Respuesta

34

Hay algunas opciones diferentes sobre cómo hacer esto. El más básico es usar varargin, y luego usar nargin, size etc. para determinar si los argumentos opcionales se han pasado a la función.

% 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 

Una solución poco mas elegante es utilizar la clase inputParser para definir todos los argumentos esperados por su función, obligatorios y opcionales. inputParser también le permite realizar verificación de tipos en todos los argumentos.

36

Una manera simple de hacerlo es a través de nargin (N argumentos en). El inconveniente es que debes asegurarte de que tu lista de argumentos y las verificaciones nargin coincidan.

Vale la pena recordar que todas las entradas son opcionales, pero las funciones saldrán con un error si llama a una variable que no está configurada. El siguiente ejemplo establece los valores predeterminados para byc. Saldrá si a no está presente.

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

Una buena manera de ir sobre esto es no usar nargin, pero para comprobar si las variables se han establecido usando exist('opt', 'var').

Ejemplo:

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

Ver esta respuesta para los profesionales de hacerlo de esta manera: How to check whether an argument is supplied in function call?

Cuestiones relacionadas