2016-09-06 164 views
0

我正在寫一個函數,我需要一些幫助。 這是我的函數:一個函數中Matlab可選的輸入和輸出參數

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

有兩種可能的輸出:A和B.通過設置強制性的輸入變量(X,Y,Z),你會得到A.如果您還設置可選參數,你應該得到A和B. 所以,這是我想做到這一點:

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

這是不工作...我在哪裏做的錯誤?

預先感謝您!

+2

「這是行不通的。」你能不能更具體地編輯你的問題中的任何錯誤信息? – TroyHaskin

+2

另外,你的實際文件中的[varargout]'之前有一個前導'function'關鍵字,對嗎? – 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. 首先,在聲明 myfunc之前,您尚未放入關鍵字「function」。
  2. 其次,optional設置爲第四個參數。但是,這樣你的 不能包含4個以上的參數。
  3. 第三,你必須小心可變參數,因爲它增加了輸出參數的數目 ,但它不會改變第一個 (它總是等於1)。

我不知道哪個上面的是你的主要關注,但是,下面的代碼應工作:

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

謝謝你,merch。問題是可選的輸入參數是一個數字,當設置時,該函數會查找大於它的第一個輸出(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 

通過這種方式,您可以選擇與可選輸入變量關聯的輸出。它的工作原理:)