方案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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐