2016-09-06 334 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 

通过这种方式,您可以选择与可选输入变量关联的输出。它的工作原理:)

相关问题