您的位置:首页 > 编程语言 > MATLAB

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 函数