Hessian矩阵判定极值之MATLAB实现符号解
2016-01-09 09:30
411 查看
By WC 1.9 .2015
1.Hessian矩阵
其定义如下:
如果函数f在D区域内二阶连续可导,那么黑塞矩阵H(f) 在 D 内为对称矩阵。原因是:如果函数f连续,则二阶偏导数的求导顺序没有区别,即
如果该函数的驻点处Hessian阵为正定阵,则在该点取为极小值;如果该函数的驻点处Hessian阵为负定阵,则在该点取为极大值;如果该函数的驻点处Hessian阵为不定阵,则在该点不是极值点。
附录:
驻点:使下式成立的点 fx(x,y)=0fy(x,y)=0
正定阵的判定:
判定定理1:对称阵A为正定的充分必要条件是:A的特征值全为正。
特征值:
,这里的
为特征值
判定定理2:对称阵A为正定的充分必要条件是:A的各阶顺序主子式都为正。
顺序主子式:对一个三阶(3x3)矩阵
a b c
d e f
g h i
一阶顺序主子式
a
二阶顺序主子式
a b
d e
三阶顺序主子式
a b c
d e f
g h i
其他阶的与此3阶类似
判定定理3:任意阵A为正定的充分必要条件是:A合同于单位阵E
2.Matlab实现
eg:求多元函数f(x,y) = x^3 - y^3 + 3x^2 + 3y^2 - 9x
求得驻点为:(1,0),(1,2),(-3,0),(-3,2)
在求Hessian阵
(1) (1,0)使Hessian阵为正定阵(判定定理3),故(1,0)为极小值点,极小值为f(1,0)=-5
(2) (1,2),(-3,0)使Hessian阵为不定阵(判定定理3),非极值点。
(1) (-3,2)使Hessian阵为负定阵(证明请百度),故(-3,2)为极大值点,极大值为f(-3,2)=31。
其图形为:
MATLAB程序见如下所示:
clear,clc;close all; t=-10:1:10; [x,y]=meshgrid(t,t); z=x.^3-y.^3+3*x.^2+3*y.^2-9*x; surf(x,y,z) %set(gcf,'unit','normalized','position',[0,0,1,1]); title('王晨绘制') legend('z=x.^3-y.^3+3*x.^2+3*y.^2-9*x'); grid on text(1,0,-5,'极小值'); text(-3,2,31,'极大值'); xlabel('x');ylabel('y');zlabel('z');
2.MATLAB实现该问题(无约束极值问题)
clc,clear syms x y f %定义符号对象 f=x^3-y^3+3*x^2+3*y^2-9*x; df=jacobian(f);%求雅克比矩阵,即一阶偏导数 d2f=jacobian(df);%求Hessian矩阵 [xx,yy]=solve(df); %求驻点 xx=int8(xx);yy=int8(yy);%将符号对象转化为数值型数据 for i=1:length(xx) a=subs(d2f,{x,y},{xx(i),yy(i)}) ; %将xx(i),yy(i)置换x,y带入d2f中 b=eig(a) ;%求矩阵的特征值 f=subs(f,{x,y},{xx(i),yy(i)}) ;%求驻点处的极值 f=int8(f); if all(b>0) fprintf('(%d,%d)是极小值点。极小值为%d \n',xx(i),yy(i),f); elseif all(b<0) fprintf('(%d, %d)是极大值点,极大值为%d \n',xx(i),yy(i),f); else fprintf('(%d, %d)不是极值点 \n',xx(i),yy(i)); end end
相关文章推荐
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- PowerShell函数简明教程
- SQL Server中的RAND函数的介绍和区间随机数值函数的实现