İ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)
.
İ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)
.
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.
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
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
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
İ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 / –