一个函数中Matlab可选的输入和输出参数
我正在写一个函数,我需要一些帮助。 这是我的函数:一个函数中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
这是不工作...我在哪里做的错误?
预先感谢您!
我没有看到它的问题。唯一的问题会来,如果你尝试:
在这种情况下[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
您需要varargout两个输出试试这个:
[A,varargout] = myfunc(x, y, z, optional)
和
if (nargin > 3)
varargout{1} = B;
end
谢谢你freude。我试过了,但是我收到了这样的消息:“没有足够的输入参数。”当我只设置3个输入变量时。 – Angela
有几个问题与此代码:
- 首先,在声明 myfunc之前,您尚未放入关键字“function”。
- 其次,optional设置为第四个参数。但是,这样你的 不能包含4个以上的参数。
- 第三,你必须小心可变参数,因为它增加了输出参数的数目 ,但它不会改变第一个 (它总是等于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:
谢谢你,merch。问题是可选的输入参数是一个数字,当设置时,该函数会查找大于它的第一个输出(A)的值。但是,'varargin'是一个单元格数组,所以我收到一条错误消息。我也尝试了存在函数,但它也不起作用。 – Angela
我解决了!我会在这里发布解决方案,它可能对其他人有用。谢谢你们!
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
通过这种方式,您可以选择与可选输入变量关联的输出。它的工作原理:)
“这是行不通的。”你能不能更具体地编辑你的问题中的任何错误信息? – TroyHaskin
另外,你的实际文件中的[varargout]'之前有一个前导'function'关键字,对吗? – TroyHaskin
是的,我做,我忘了写它 – Angela