本来想找一个现成的程序,结果找到的要么不能用,要么没有说明,索性自己编了一个。包括一个主程序和一个子程序。供大家分享
% Main program of steepest.
% 最速下降法主程序
%----------------------These lines only for ploting figures
%(前面几行是为了画图用的,可以不要)
clear
xx=-11:0.2:11; % 图中坐标的起始点
yy=-11:0.2:11;
[X,Y]=meshgrid(xx,yy);
for i=1:111
for j=1:111
y(1)=X(i,j);
y(2)=Y(i,j);
Z(i,j)=f_df(y); % z必须是网格化的数据
end
end
%mesh(X,Y,Z)
contour(X,Y,Z,50)
hold on
%-----------------------------------end for ploting figures
syms x1 x2 f lmda lm
x=[0;10]; % x的初值
xs=[x1; x2]; % 由于在求lmda过程中要用到符号函数的求导,故此定义符号运算的xs
[f0,g]=f_df(x); % 将x的初值代入,得到函数及其梯度的数值
[h, gs]=f_df(xs) % 将xs代入,得到符号表达式h
flag=999. % 用于控制循环
ii=0 % 用于循环计数<