在matlab中實現梯度下降法

2021-09-06 18:42:29 字數 1539 閱讀 3340

梯度下降法的原理,本文不再描述,請參閱其它資料。

梯度下降法函式function [k ender]=steepest(f,x,e),需要三個引數f、x和e,其中f為目標函式,x為初始點,e為終止誤差。輸出也為兩個引數,k表示迭代的次數,ender表示找到的最低點。

steepest.m:

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

%梯度下降法,f為目標函式(兩變數x1和x2),x為初始點,如[3;4]

syms x1 x2 m; %m為學習率

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

flag=1; %迴圈標誌

k=0; %迭代次數

while(flag)

d_temp=subs(d,x1,x(1)); %將起始點代入,求得當次下降x1梯度值

d_temp=subs(d_temp,x2,x(2)); %將起始點代入,求得當次下降x2梯度值

nor=norm(d_temp); %範數

if(nor>=e)

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

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

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

h=diff(f_temp,m); %對m求導,找出最佳學習率

m_temp=solve(h); %求方程,得到當次m

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

k=k+1;

else

flag=0;

endendender=double(x); %終點

end

呼叫示例1:

syms x1 x2;

f=(x1-2)^2+2*(x2-1)^2;

x=[1;3];

e=10^(-20);

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

結果:

k =

27ender =

21

呼叫示例2:

syms x1 x2;

f=x1-x2+2*x1^2+2*x1*x2+x2^2;

x=[0;0];

e=10^(-20);

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

結果:

k =

58ender =

-1.0000

1.5000

呼叫示例3:

syms x1 x2;

f=3/2*x1^2+1/2*x2^2-x1*x2-2*x1;

x=[0;0];

e=10^(-2);

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

結果:

k =

9ender =

0.9959

0.9877

matlab實現梯度下降法

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

梯度下降法 matlab實現

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

MATLAB梯度下降法

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