¿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.
¿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.
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.
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
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?
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
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 / –