梯度下降法(最速下降法):
求解無約束最優化問題的一種最常用的方法,當目標函數是凸函數時,梯度下降法的解是全局最優解.一般情況下,其解不保證是全局最優解.梯度下降法的收斂速度也未必是很快的.
###############################Matlab###############################
%% 最速下降法圖示
% 設置步長為0.1,f_change為改變前后的y值變化,僅設置了一個退出條件。
%syms x;%求f=x^2最小值
f=x^2;
step=0.1;x=2;k=0; %設置步長,初始值,迭代記錄數
f_change=x^2; %初始化差值
f_current=x^2; %計算當前函數值
ezplot(@(x,f)f-x.^2) %畫出函數圖像
axis([-2,2,-0.2,3]) %固定坐標軸
hold on
while f_change>0.000000001 %設置條件,兩次計算的值之差小於某個數,跳出循環
x=x-step*2*x; %-2*x為梯度反方向,step為步長,!最速下降法!
f_change = f_current - x^2; %計算兩次函數值之差
f_current = x^2 ; %重新計算當前的函數值
plot(x,f_current,'ro','markersize',7) %標記當前的位置
drawnow;pause(0.2);
k=k+1;
end
hold off
fprintf('在迭代%d次后找到函數最小值為%e,對應的x值為%e\n',k,x^2,x)
############################## Matlab ########################################
%最速下降法,求解線性方程組Ax=b
x=初值;
r=b-A*x;
while norm(r)>1e-10
alpha=r’*r/r’*A*r;
x=x+alpha*r;
r=b-A*x;
end