MATLAB中如何将向量传入对应参数数量的函数句柄且无需逐元素指定参数
解决方案(Matlab环境)
你可以通过元胞数组展开的方式实现可变数量参数的自动传入,无需手动逐个写索引,适配任意参数数量的场景:
方法1:单次调用直接处理
把向量转为元胞数组后用{:}语法展开为逗号分隔的参数列表,直接传入函数即可,示例如下:
不管f要求2个、3个还是n个参数,只要A的长度和参数数量匹配,这段代码不需要做任何修改。% 原有函数句柄和向量 f = @(x,y,z) x^2 + y^2 + z^2; A = [1 2 3]; % 转换+传参 A_cell = num2cell(A); res = f(A_cell{:}); % 运行结果res = 14,和手动写f(A(1),A(2),A(3))完全一致方法2:包装为支持向量输入的函数(适合重复调用)
如果需要多次传入向量调用该函数,可以直接对原句柄做一层包装,后续直接传向量即可:% 包装原函数,直接适配向量输入 f_vec = @(vec) f(num2cell(vec){:}); % 后续调用非常简洁 res1 = f_vec([1 2 3]); res2 = f_vec([4 5 6]);
注意:使用前需要保证向量A的长度和函数f要求的输入参数数量完全一致,否则会触发参数数量不匹配的报错。
内容的提问来源于stack exchange,提问作者HousamKak
相关产品推荐
相关产品推荐

