【问题标题】:matlab differing argument structuresmatlab不同的参数结构
【发布时间】:2018-02-20 17:03:13
【问题描述】:

我想写一个函数getNewProjectionImageSize,它有两种不同的参数结构。一个是[Wp, Hp] = getNewProjectionImageSize(Wo, Ho),另一个是Hp = getNewProjectionImageSize(Wp)。在我的研究中,我找不到如何做到这一点。即this link,没有解释它。
不费力气就可以吗?在标准的matlab函数中,即interp2有不同的参数结构:interp(V)interp(X, Y, V, Xq, Yq)等。
我想到的唯一解决方案是一个更常见的参数结构[Wp, Hp] = getNewProjectionImageSize(W, H)H 作为可选参数(使用nargin),将WH 的解释留给用户。但如果可能的话,我更喜欢第一种方式。

【问题讨论】:

  • 你可以查看matlab的源代码来检查他们是如何实现的(右键>打开“interp2”;或者ctrl+D快捷键)。
  • 请注意,不同的参数(长度)只是文档问题。

标签: matlab function arguments optional-arguments


【解决方案1】:

使用varargin 作为输入参数,使用varargout 作为输出。这些允许您接受/返回可变数量的输入和输出。例如。像这样:

function varargout = getNewProjectionImageSize(varargin)

if nargin==1
    % Have passed in one input argument, Wp
    Wp = varargin{1};
    % Calculate Hp here...
    varargout{1} = Hp;
elseif nargin==2
    % Have passed in two input args, Wo, Ho
    Wo = varargin{1};
    Ho = varargin{2};
    % Calculate Wp and Hp here ...
    varargout{1} = Wp;
    varargout{2} = Hp;
else
    error('Must supply one or two input arguments');
end

end

另一种方法是使用键/值对传递命名参数,因此您的调用如下所示:

[Wp, Hp] = getNewProjectionImageSize('Wo',Wo, 'Ho',Ho)
Hp = getNewProjectionImageSize('Wp',Wp)

有一些关于如何使用here 执行此操作的描述inputParser

【讨论】:

    【解决方案2】:

    使用narginnargout 了解调用函数所使用的输入和输出参数的数量,然后使用vararginvarargout 访问输入或定义输出。

    如果函数在没有任何输出参数的情况下被调用,您还需要决定该怎么做。在许多函数中,这种情况被视为调用只有一个输出。

    这是一个例子。

    • 有 1 个输入和 0 或 1 个输出:该函数输出输入的元素平方。
    • 具有 2 个输入和 2 个输出:该函数输出输入的元素和和乘积。

    代码:

    function varargout = f(varargin)
    if nargin==1 && nargout<2 % nargout<2 covers the 0-output case, which
        % is interpreted as 1 output
        varargout{1} = varargin{1}.^2; % compute first (and only) output
    elseif nargin==2 && nargout==2
        varargout{1} = varargin{1} + varargin{2}; % compute first output
        varargout{2} = varargin{1} .* varargin{2}; % compute second output
    else
        error('Incorrect number of inputs or outputs')
    end
    

    例子:

    >> y = f([10 20 30]) % 1 input, 1 output
    y =
       100   400   900
    
    >> f([10 20 30]) % 1 input, 0 outputs
    ans =
       100   400   900
    
    >> [a, b] = f([10 20 30], 4) % 2 inputs, 2 outputs
    a =
        14    24    34
    b =
        40    80   120
    
    >> y = f([10 20 30], 4) % 2 inputs, 1 output
    Error using f (line 9)
    Incorrect number of inputs or outputs 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2012-06-27
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 2015-01-30
      • 2017-04-22
      相关资源
      最近更新 更多