求解方法之梯度下降法


梯度下降法(最速下降法):

求解無約束最優化問題的一種最常用的方法,當目標函數是凸函數時,梯度下降法的解是全局最優解.一般情況下,其解不保證是全局最優解.梯度下降法的收斂速度也未必是很快的.

###############################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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM