MATLAB最速下降法(梯度法)程序
? 看报道吗? matlab最速下降法
2010-08-18 17:13
functionx=% fsxsteep(f,e,a,b ) fsxsteep函数最速下降法(% fsxsteep ) f,e,a,b )是输入函数f是允许误差,a,b )是初始点;
% fsx TJPU 2008.6.15
x1=a; x2=b; q=fsxhesse(f,x1,x2 ); x0=[x1 x2] '; FX1=diff(f,' x1 ' ); 对%x1求偏导数FX2=diff(f,' x2 ' ); (对于x2,偏导数g=[fx1 fx2] ); %梯度G1=subs(g; 将%符号变量转换为数值d=-g1; while(ABS(norm(G1 ) )=e ) t=(-d ) ) d/) (-d ) ) *Q*d; t=(-d ) ) d/)-d ) ) *Q*d ); 求出%搜索方向x0=x0-t*g1; %已搜索的点v=x0; a=[1 0]*x0; b=[0 1]*x0; x1=a; x2=b; G1=Subs(G ); d=-g1; 结束; x=v;
函数x=fsx hesse (f,a,b ) % fsxhesse函数求函数的Hesse矩阵; %本程序是单纯求二次函数的hesse矩阵! %x=fsxhesse(f )表示输入函数f为二次函数x1、x2为自变量;
% fsx TJPU 2008.6.15
x1=a; x2=b; FX=diff(f,' x1 ' ); 求出针对%x1的f偏导数fy=diff(f,' x2 ' ); 求出(f对x2偏导数FXX=diff ) FX,' x1 ' ); (求出二阶偏导数对x1,进而针对x1导出fxy=diff ) FX、x2); (求出二阶偏导数对x1,并进一步导出x2fyx=diff(fy,x1); 求%二阶偏导数对x2,进而求出x1fyy=diff(fy,' x2 ' ); (求出二阶偏导数对x2,并进一步求出x2fxx=subs(fxx ); 将%符号变量变换为数值fxy=subs(fxy ); fyx=subs(fyx ); FYY=subs(FYY ); x=[fxx,fxy; fyx,fyy ); 求hesse矩阵
syms x1 x2; X=[x1,x2]; FX=x(1)2) x )2) ) 2; z=fsxsteep(FX,0.001,1,1 ) ) ) ) ) ) )。