Matlab在函数中可选的输入和输出参数

时间:2016-09-06 17:19:08

标签: matlab function

我正在写一个函数,我需要一些帮助。 这是我的功能:

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

这不起作用......我在哪里弄错了?

提前谢谢!

4 个答案:

答案 0 :(得分:0)

我没有看到它的问题。如果你尝试,唯一的问题就出现了:

content

在这种情况下,您的函数会抱怨您正在尝试分配给尚未定义的第二个变量。因此,您需要进行更多输入/输出检查(例如,通过[a,b] = myfunc(1,2,3) )并采取相应措施。 (即指定自定义错误,或返回nargout等等。

PS。我假设你的函数定义如下:

b=[]

答案 1 :(得分:0)

varargout需要两个输出。试试这个:

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

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

答案 2 :(得分:0)

此代码存在以下几个问题:

  1. 首先,在声明之前没有放置关键字“function” MYFUNC。
  2. 其次,将optional设置为第4个参数。但是,这样你 不能包含4个以上的参数。
  3. 第三,你必须小心varargout,因为它增加了 输出参数的数量,但它不会更改第一个参数 (总是等于一个)。
  4. 我不知道上面哪一项是您的主要关注点,但是,以下代码应该正常工作:

    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

答案 3 :(得分: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

这样,您有一个与可选输入变量关联的可选输出。它有效:)