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

使用Bayesian Optimization Toolbox的Bayesopt函数遇输入类型错误求助

使用BayesOpt求解函数最小值时的'table'类型运算错误解决方法

错误原因分析

你的代码存在两个核心问题:

  1. 目标函数参数类型不匹配:bayesopt会把优化变量包装成table对象传入目标函数,而不是直接传数值。原代码里直接对x做x-3运算,MATLAB无法处理table与数值的算术操作,因此抛出Undefined function 'minus' for input arguments of type 'table'错误。
  2. 函数名引用错误:调用bayesopt时写了myfunction,但你定义的目标函数变量名是fun,属于未定义变量问题。

修正后的完整代码

% 定义目标函数:从table中提取x的数值再计算
fun = @(x) (x.x - 3).^2 + 5;

% 初始化优化变量
xvar = optimizableVariable('x', [-10, 10]);
% 调整变量范围
xvar.Range = [1, 5];

% 运行Bayes优化,注意使用正确的函数名fun
results = bayesopt(fun, xvar, 'Verbose', 0, ...
    'AcquisitionFunctionName', 'expected-improvement-plus', ...
    'MaxObjectiveEvaluations', 50); % 指定迭代次数,加快收敛

% 输出最优结果
best_x = results.XAtMinObjective.x;
best_min_val = results.MinObjective;
fprintf('找到的最优解x: %.4f,函数最小值: %.4f\n', best_x, best_min_val);

关键修正点说明

  • 提取table中的数值:通过x.x获取table里名为x的变量的数值(因为你用optimizableVariable('x',...)定义了变量名),也可以用table2array(x)将table转为数值数组。
  • 修复函数名引用:把bayesopt的第一个参数改为你定义的fun。
  • 可选优化:添加MaxObjectiveEvaluations参数控制迭代次数,避免无限制运行,同时保证收敛到足够接近最优解的结果(你的函数最小值在x=3处,值为5)。

内容的提问来源于stack exchange,提问作者user78333

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:33:33