You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:58:11