2016-09-06 6 views
0

Я пишу функцию, и мне нужна помощь. Это моя функция:Matlab дополнительные входные и выходные аргументы в функции

function [varargout] = myfunc(x, y, z, optional) 

Есть два возможных выхода: A и B. При установке обязательных входных переменных (х, у, г), вы получите А. Если вы также установить дополнительный аргумент, вы должен получить A и B. Таким образом, это то, как я пытаюсь сделать это:

if (nargin == 4) 
varargout{1} = A; 
varargout{2} = B; 
else 
varargout{1} = A; 
end 

Это не работает ... Где я делаю ошибку?

Спасибо заранее!

+2

«Это не работает». Не могли бы вы быть более конкретными и редактировать любые сообщения об ошибках в свой вопрос? – TroyHaskin

+2

Кроме того, у вас есть ключевое слово 'function' перед' [varargout] 'в вашем фактическом файле, правильно? – TroyHaskin

+0

Да, я это забыл написать – Angela

ответ

0

Я не вижу проблемы с этим. Единственная проблема придет, если вы попытаетесь:

[a,b] = myfunc(1,2,3) 

в этом случае ваша функция будет жаловаться, что вы пытаетесь присвоить второй переменной, которая не была определена. Таким образом, вам нужно иметь еще несколько проверок ввода/вывода (например, через nargout) и действовать соответственно. (То есть либо указать пользовательскую ошибку или вернуть b=[] и т.д.

PS Я предполагаю, что ваша функция определяется что-то вроде:..

function varargout = myfunc(x, y, z, optional) 
    if (nargin == 4); varargout{1} = 1; varargout{2} = 2; 
    else    varargout{1} = 1; 
    end 
end 
0

Вам нужно два выхода с varargout Попробуйте это:

[A,varargout] = myfunc(x, y, z, optional) 

и

if (nargin > 3) 
    varargout{1} = B; 
end 
+0

Спасибо, freude. Я попробовал, но я получаю это сообщение: «Недостаточно входных аргументов». когда я устанавливаю только 3 входных переменных. – Angela

0

Есть несколько проблем с этим кодом:

  1. Во-первых, вы не поставили ключевое слово «function» перед объявлением myfunc.
  2. Во-вторых, необязательный параметр устанавливается как 4-й аргумент. Однако, таким образом, вы не можете включить более 4 аргументов .
  3. В-третьих, вы должны быть осторожны с varargout, так как он увеличивает число выходных аргументов , но он не меняет первый (который всегда равен одному).

Я не знаю, какой из вышеперечисленного было главной заботой, однако, следующий код должен работать:

function varargout = myfunc2(x, y, z, varargin) 
    if nargin == 4  
     varargout{1} = 1; % where A=1 and B = 2 
     varargout{2} = 2; 
    else 
     varargout{1} = 1; 
    end 
end 

Пожалуйста, посмотрите на приложенные ссылки для получения более подробной информации о varargin и varargout:

  1. http://uk.mathworks.com/help/matlab/ref/varargin.html
  2. http://uk.mathworks.com/help/matlab/ref/varargout.html
+0

Спасибо, что купили. Проблема заключается в том, что необязательный входной аргумент является числом, и, когда он установлен, функция ищет значения первого выхода (A), которые больше его. Однако 'varargin' - это массив ячеек, поэтому я получаю сообщение об ошибке. Я также попытался с функцией существования, но он тоже не работает. – Angela

0

Я решил это! Я отправлю здесь решение, это может быть полезно для других. Спасибо вам всем!

function [A, varargout] = myfunc(x, y, z, optional) 

A = somefunction(x,y,z) 

if nargout == 2 && nargin == 4 
i = find(A > optional); 
B = somefunction(A,i); 
varargout{1} = B; 
end 

Таким образом, у вас есть дополнительный выход, связанный с дополнительной входной переменной. Он работает :)