MATLAB求解二元函数局部极小值、极大值及拐点问题求助
问题说明
你需要求解给定二元函数的局部极小值点、局部极大值点与拐点,目标函数如下:
你编写的原始MATLAB代码如下:
syms [x1,x2] f = 3*x1.^2+2*x1.*x2+2*x2.^2+7; G = gradient(f,[x1,x2]); S = solve(G(1),G(2)); [S.x1 S.x2] %settting gradient to zero givens x=(0, 0) as the only candidate minimum point H = hessian(f,[x1,x2])
运行后得到的结果异常:
问题原因
代码的核心语法错误出在符号变量定义行:MATLAB中syms定义多个符号变量不需要加中括号,直接用空格分隔变量名即可,错误的变量定义方式导致后续梯度、海森矩阵的计算维度匹配错误,输出结果异常。
此外你目前的代码仅完成了驻点求解,还缺少极值类型判断、拐点判断的逻辑。
修复后的完整代码
% 正确定义符号变量 syms x1 x2 % 定义目标函数 f = 3*x1^2 + 2*x1*x2 + 2*x2^2 + 7; % 计算梯度,求驻点 G = gradient(f, [x1, x2]); S = solve(G(1) == 0, G(2) == 0); disp('驻点坐标:') disp([double(S.x1), double(S.x2)]) % 计算海森矩阵判断极值类型 H = hessian(f, [x1, x2]); disp('海森矩阵:') disp(double(H)) % 计算海森矩阵特征值判断正定性 eig_H = eig(H); disp('海森矩阵特征值:') disp(eig_H)
结果分析
- 驻点计算结果为
(0, 0),是该函数唯一的驻点 - 海森矩阵计算结果为$\begin{bmatrix}6 & 2 \ 2 & 4\end{bmatrix}$,两个特征值均为正数,海森矩阵正定,因此
(0, 0)是该函数的局部极小值点,同时也是全局极小值点 - 该函数是凸二次函数,不存在局部极大值点,也不存在拐点
内容的提问来源于stack exchange,提问作者Mansoor Rahami
相关产品推荐
相关产品推荐

