如何在Matlab中结合for循环使用fminsearch求解函数最小值
Matlab循环固定变量调用fminsearch求解局部最小值实现方案
首先明确fminsearch的核心调用规则:第一个入参是仅包含待优化变量的函数句柄,第二个入参是优化的初始猜测值,返回结果依次为最优自变量取值、对应的最小函数值。
你需要每次固定y值后,将二元目标函数转换为仅关于x的一元函数再传入fminsearch,完整实现代码如下:
% 定义原始二元目标函数 obj = @(x,y) x^2 + x*y + y^2; % 初始化存储结果的数组:每一行对应y=k的结果,第一列存最优x,第二列存最小值 res = zeros(10, 2); % 循环y取值1到10 for y_val = 1:10 % 构造固定y后的一元目标函数 single_obj = @(x) obj(x, y_val); % 调用fminsearch,初始x猜测值设为0,可根据实际函数调整 [x_opt, f_min] = fminsearch(single_obj, 0); % 存储结果 res(y_val, :) = [x_opt, f_min]; end % 输出所有结果查看 disp('y值 | 最优x值 | 最小函数值') for i =1:10 fprintf('%d | %.4f | %.4f\n', i, res(i,1), res(i,2)); end
关键说明
- 示例中目标函数是凸函数,初始值选0就能得到全局最小值,如果你的实际函数存在多个局部极小,可以根据先验知识调整初始猜测值,避免陷入局部最优
- 如果需要修改y的取值范围,直接调整循环的上下限即可,同时对应修改结果存储数组的大小
- 如果你不需要存储所有历史结果,也可以直接在循环内打印每次的计算结果
内容的提问来源于stack exchange,提问作者Chang
相关产品推荐
相关产品推荐

