如何在编写 matlab 函数时处理多个输入
How to handle multiple inputs while writing a matlab function
如何在编写 matlab 函数时处理多个输入?例如,如果 n 是要在 运行 时间内传递的参数数量,那么我的函数原型将如何显示?任何帮助都会很好。谢谢。
如果参数的数量可以改变,Matlab 提供了一个非常好的和简单的解决方案:
具有不同数量参数的函数示例是:
function my_function(varargin)
% This is an example
min_arg = 1;
max_arg = 6;
% Check numbers of arguments
error(nargchk(min_arg,max_arg,nargin))
% Check number of arguments and provide missing values
if nargin==1
w = 80;
end
% Your code ...
end
输出也是一样。
虽然对于参数很少的小函数,@GiacomoAlessandroni 的解决方案效果很好,但对于更复杂的函数,我建议采用不同的方法:使用 InputParser
。
它具有必需参数和可选参数,以及名称-值对。默认值的处理很容易,没有 if 子句。还有一个非常灵活的类型检查可用。
我没有自己创建示例,而是 post 来自上面链接的 MATLAB 帮助页面的示例。代码几乎是不言自明的。
function a = findArea(width,varargin)
p = inputParser;
defaultHeight = 1;
defaultUnits = 'inches';
defaultShape = 'rectangle';
expectedShapes = {'square','rectangle','parallelogram'};
addRequired(p,'width',@isnumeric);
addOptional(p,'height',defaultHeight,@isnumeric);
addParameter(p,'units',defaultUnits);
addParameter(p,'shape',defaultShape,...
@(x) any(validatestring(x,expectedShapes)));
parse(p,width,varargin{:});
a = p.Results.width .* p.Results.height;
end
如何在编写 matlab 函数时处理多个输入?例如,如果 n 是要在 运行 时间内传递的参数数量,那么我的函数原型将如何显示?任何帮助都会很好。谢谢。
如果参数的数量可以改变,Matlab 提供了一个非常好的和简单的解决方案:
具有不同数量参数的函数示例是:
function my_function(varargin)
% This is an example
min_arg = 1;
max_arg = 6;
% Check numbers of arguments
error(nargchk(min_arg,max_arg,nargin))
% Check number of arguments and provide missing values
if nargin==1
w = 80;
end
% Your code ...
end
输出也是一样。
虽然对于参数很少的小函数,@GiacomoAlessandroni 的解决方案效果很好,但对于更复杂的函数,我建议采用不同的方法:使用 InputParser
。
它具有必需参数和可选参数,以及名称-值对。默认值的处理很容易,没有 if 子句。还有一个非常灵活的类型检查可用。
我没有自己创建示例,而是 post 来自上面链接的 MATLAB 帮助页面的示例。代码几乎是不言自明的。
function a = findArea(width,varargin)
p = inputParser;
defaultHeight = 1;
defaultUnits = 'inches';
defaultShape = 'rectangle';
expectedShapes = {'square','rectangle','parallelogram'};
addRequired(p,'width',@isnumeric);
addOptional(p,'height',defaultHeight,@isnumeric);
addParameter(p,'units',defaultUnits);
addParameter(p,'shape',defaultShape,...
@(x) any(validatestring(x,expectedShapes)));
parse(p,width,varargin{:});
a = p.Results.width .* p.Results.height;
end