梯度下降法 matlab實現

2022-09-05 12:18:08 字數 1280 閱讀 6155

function [k ender]=steepest(f,x,e)

% f=x1-x2+2*x1^2+2*x1*x2+x2^2; 假設f等於

% x=[0;0];

% e=10^(-20);

syms x1 x2 m; %m為學習率

d=-[diff(f,x1);diff(f,x2)] %分別求x1和x2的偏導數,即下降的方向

% - 4*x1 - 2*x2 - 1

% 1 - 2*x2 - 2*x1

flag=1; %迴圈標誌

k=0; %迭代次數

while(flag)

d_temp=subs(d,x1,x(1)) ; %分別對x1,x2求一階偏導數值

%先把x1帶入二階導函式

d_temp=subs(d_temp,x2,x(2)); %再把x2帶入1階導函式

%以上求出1階偏導數在x1,x2的函式值

nor=norm(d_temp)%範數 求出此時的偏導數範數

if(nor>=e) %因為在區域性最優點偏導數接近0,所以拿來和誤差比較

x_temp=x+m*d_temp ; %改變初始點x的值

% 開始迭代x的路徑,而且此路徑和 該點到數值有關

f_temp=subs(f,x1,x_temp(1)); %將改變後的x1和x2代入目標函式

f_temp=subs(f_temp,x2,x_temp(2))

%分別把更新後的x1,x2帶代入 f

h=diff(f_temp,m) %代入含有rate m的x1,x2後的f 對m求導

%此時 是關於m的一元函式,g(m)與f不同,是由(x1,x2)處梯度和f 產生,找到g(m)的最小值,如果最小值不是梯度近似為0,則進行下一次迭代

m_temp=solve(h) ; %求方程,得到當次m 。找出極值

x=x+m_temp*d_temp ;%更新起始點x

%正式求出m並帶入 迭代x的方程,求出第二個點

k=k+1 %迭代次數更新

else

flag=0;

endend

ender=double(x); %此時是滿足條件的更新後的 x

end測試

syms x1 x2;

f=(x1-2)^2+2*(x2-1)^2; %f可以為任意可微的函式

x=[1;3];

e=10^(-20);

[k ender]=steepest(f,x,e)

matlab實現梯度下降法

大三上學期學了 運籌學 課程,裡面包含了許多演算法和模型。模型就是線性規劃及線性規劃的對偶理論,單純形法以及它的實際應用 整數規劃及其解法 分支定界法 割平面法匈牙利演算法 目標規劃 非線性規劃動態規劃 決策分析等等。實際上,這些模型在參加暑假數學建模培訓的時候,多多少少接觸過,所以還算比較熟悉的。...

MATLAB梯度下降法

梯度下降法 英語 gradient descent 是乙個一階最優化演算法。要使用梯度下降法找到乙個函式的區域性極小值,必須向函式上當前點對應梯度 或者是近似梯度 的反方向的規定步長距離點進行迭代搜尋。如果相反地向梯度正方向迭代進行搜尋,則會接近函式的區域性極大值點 這個過程則被稱為梯度上公升法。梯...

在matlab中實現梯度下降法

梯度下降法的原理,本文不再描述,請參閱其它資料。梯度下降法函式function k ender steepest f,x,e 需要三個引數f x和e,其中f為目標函式,x為初始點,e為終止誤差。輸出也為兩個引數,k表示迭代的次數,ender表示找到的最低點。steepest.m function k...