方案1
function func(idx)
if ~isscalar(idx)
error('idx must be a scalar')
end
if ~(idx > 0)
error('idx must be positive');
end
if ~(idx == floor(idx))
error('idx must be integer');
end
% ....正文
end
方案2
function out = my_test(x,b,varargin)
p = inputParser; % 函数的输入解析器
addParameter(p,'k',1); % 设置变量名和默认参数
parse(p,varargin{:}); % 对输入变量进行解析,如果检测到前面的变量被赋值,则更新变量取值
out = p.Results.k*x + b; % 在这里定义你自己的函数计算公式
end
测试
>> my_test(3,5)
ans = 8
>> my_test(3,5,'k',2)
ans = 11
方案3
function out = my_test(x,b,k)
if(~exist('k','var'))
k = 1; % 如果未出现该变量,则对其进行赋值
end
out = k*x + b;
end
测试
>> my_test(3,5)
ans = 8
>> my_test(3,5,2)
ans = 11
方案4
function myFunction(x, y, maxval, minval)
arguments
x (1, 1) double
y (1, 1) double
maxval (1, 1) double = max(max(x), max(y))
minval (1, 1) double = min(min(x), min(y))
% maxval(1, 1) double = 2
% minval(1, 1) double = 2
end
% Function code
sum = x + y + maxval + minval;
disp(sum)
end
测试
>> myFunction(1, 2)
6
>> myFunction(1, 2, 3, 1)
7
输入参数顺序可以变化的解决方案
function y = foo(x, op)
arguments
x
op.a = 2;
op.b = 1;
end
s = struct2cell(op);
[a, b] = s{:};
y = a * x + b;
测试
>> foo(1)
ans =
3
>> foo(1, a=2, b=2)
ans =
4
>> foo(1, b=3, a=2)
ans =
5
推荐使用方案4,arguments…end 语句来设置默认值和进行输入检查更加简明方便。
参考资料
1、Matlab中函数设置默认参数值的两种方法
2、arguments: MATLAB输入检查的新语法
3、arguments