使用Bayesian Optimization Toolbox的Bayesopt函数遇输入类型错误求助
使用BayesOpt求解函数最小值时的'table'类型运算错误解决方法
错误原因分析
你的代码存在两个核心问题:
- 目标函数参数类型不匹配:
bayesopt会把优化变量包装成table对象传入目标函数,而不是直接传数值。原代码里直接对x做x-3运算,MATLAB无法处理table与数值的算术操作,因此抛出Undefined function 'minus' for input arguments of type 'table'错误。 - 函数名引用错误:调用
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
相关产品推荐
相关产品推荐

