MATLAB使用feval调用函数时出现“Too many output arguments”错误
问题:feval调用自定义函数触发"输出参数过多"错误
我了解使用feval动态调用函数效率较低,但在我的应用场景中十分便捷,多数情况运行正常,唯独一个函数出现问题:常规方式调用lin_model_predict函数完全正常,但使用feval调用时触发“Too many output arguments”(输出参数过多)错误。
常规调用代码(可正常运行)
x = 200; [y_mean, y_sigma, y_int] = lin_model_predict(model, x, vars, params); % 运行正常 assert(round(y_mean, 4) == 139.7200); assert(isequaln(y_sigma, nan)); assert(isequal(round(y_int, 4), [137.5938 141.8462]));
使用feval调用的代码(触发错误)
% 用feval重新测试 f_name = "lin_model_predict"; % 后续会通过程序动态设置该变量 [y_mean, y_sigma, y_int] = feval(f_name, model, x, vars, params); % 触发错误
自定义函数lin_model_predict代码
function [y_mean, y_sigma, y_int] = lin_model_predict(model, x, vars, ... params) % [y_mean, y_sigma, x_int] = lin_model_predict(model, x, vars, params) % 使用如下形式的线性模型进行预测: % % 功率 = a + b * 负载 % % 使用模型进行预测 [y_mean, y_int] = predict(model, x, 'Alpha', vars.significance); % TODO:是否需要sigma估计值? y_sigma = nan(size(x)); end
完整错误信息
Error using classreg.regr/CompactPredictor/feval Too many output arguments. Error in test_lin_models (line 46) [y_mean, y_sigma, y_int] = feval(f_name, model, x, vars, params);
MATLAB版本:2021b
更新信息
将调用代码改为仅接收一个输出参数时,发现feval仅返回一个结果,且实际调用的是CompactPredictor类中的feval方法,该方法仅支持单个输出。此时model参数被识别为字符串"lin_model_predict",触发新错误:无法识别字符串类的方法、属性或字段'NumPredictors'。
怀疑标准feval的调用逻辑被该类方法劫持,不知如何规避,寻求解决思路。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

