實驗要求
1、所屬課程名稱:
最優化方法
2、實驗日期:
2023年5月10日~2023年5月15日
3、實驗目的
掌握最速下降法,牛頓法和共軛梯度法的演算法思想,並能上機程式設計實現相應的演算法。
二、實驗要求
用matlab實現最速下降法,牛頓法和共軛梯度法求解例項。
四、實驗原理
最速下降法是以負梯度方向最為下降方向的極小化演算法,相鄰兩次的搜尋方向是互相直交的。牛頓法是利用目標函式在迭代點處的taylor展開式作為模型函式,並利用這個二次模型函式的極小點序列去逼近目標函式的極小點。共軛梯度法它的每乙個搜尋方向是互相共軛的,而這些搜尋方向僅僅是負梯度方向與上一次接待的搜尋方向的組合。
五.執行及結果如下:
最速下降法:
題目:f=(x-2)^2+(y-4)^2
m檔案:
function [r,n]=steel(x0,y0,eps)
syms x;
syms y;
f=(x-2)^2+(y-4)^2;
v=[x,y];
j=jacobian(f,v);
t=[subs(j(1),x,x0),subs(j(2),y,y0)];
temp=sqrt((t(1))^2+(t(2))^2);
x1=x0;y1=y0;
n=0;
syms kk;
while (temp>eps)
d=-t;
f1=x1+kk*d(1);f2=y1+kk*d(2);
ft=[subs(j(1),x,f1),subs(j(2),y,f2)];
fun=sqrt((ft(1))^2+(ft(2))^2);
mini=gold(fun,0,1,0.00001);
x0=x1+mini*d(1);y0=y1+mini*d(2);
t=[subs(j(1),x,x0),subs(j(2),y,y0)];
temp=sqrt((t(1))^2+(t(2))^2);
x1=x0;y1=y0;
n=n+1;
endr=[x0,y0]
呼叫**分割法:
m檔案:
function mini=gold(f,a0,b0,eps)
syms x;format long;
syms kk;
u=a0+0.382*(b0-a0);
v=a0+0.618*(b0-a0);
k=0;
a=a0;b=b0;
array(k+1,1)=a;array(k+1,2)=b;
while((b-a)/(b0-a0)>=eps)
fu=subs(f,kk,u);
fv=subs(f,kk,v);
if(fu<=fv)
b=v;
v=u;
u=a+0.382*(b-a);
k=k+1;
elseif(fu>fv)
a=u;
u=v;
v=a+0.618*(b-a);
k=k+1;
endarray(k+1,1)=a;array(k+1,2)=b;
endmini=(a+b)/2;
輸入:[r,n]=steel(0,1,0.0001)
r = 1.99999413667642 3.99999120501463
r = 1.99999413667642 3.99999120501463
n = 1
牛頓法:
題目:f=(x-2)^2+(y-4)^2
m檔案:
syms x1 x2;
f=(x1-2)^2+(x2-4)^2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
g=jacobian(df,v);
epson=1e-12;x0=[0,0]';g1=subs(df,,);g1=subs(g,,);k=0;mul_count=0;sum_count=0;
mul_count=mul_count+12;sum_count=sum_count+6;
while(norm(g1)>epson)
p=-g1\g1;
x0=x0+p;
g1=subs(df,,);
g1=subs(g,,);
k=k+1;
mul_count=mul_count+16;sum_count=sum_count+11;
end;
k x0
mul_count
sum_count
共軛梯度法:
題目:f=(x-2)^2+(y-4)^2
m檔案:
function f=conjugate_grad_2d(x0,t)
x=x0;
syms xi yi a
f=(xi-2)^2+(yi-4)^2;
fx=diff(f,xi);
fy=diff(f,yi);
fx=subs(fx,,x0);
fy=subs(fy,,x0);
fi=[fx,fy];
count=0;
while double(sqrt(fx^2+fy^2))>t
s=-fi;
if count<=0
s=-fi;
else
s=s1;
endx=x+a*s;
f=subs(f,,x);
f1=diff(f);
f1=solve(f1);
if f1~=0
ai=double(f1);
else
break
x,f=subs(f,,x),count
endx=subs(x,a,ai);
f=xi-xi^2+2*xi*yi+yi^2;
fxi=diff(f,xi);
fyi=diff(f,yi);
fxi=subs(fxi,,x);
fyi=subs(fyi,,x);
fii=[fxi,fyi];
d=(fxi^2+fyi^2)/(fx^2+fy^2);
s1=-fii+d*s;
count=count+1;
fx=fxi;
fy=fyi;
endx,f=subs(f,,x),count
輸入:conjugate_grad_2d([0,0],0.0001)
結果:x = 0.24998825499785 -0.24999998741273
f = 0.12499999986176
count = 10
ans = 0.12499999986176
6、結論如下:
最速下降法越接近極小值,步長越小,前進越慢。牛頓法要求二階導數,計算量很大。共軛梯度法是介於最速下降和牛頓法之間的演算法,克服了最速下降法的收斂速度慢的缺點,又避免了牛頓法的大計算量。
使用精確搜尋演算法確定步長的最速下降法
數學與計算科學學院 實驗報告 實驗專案名稱使用精確搜尋演算法確定步長的最速下降法 所屬課程名稱最優化方法 實驗型別演算法程式設計 實驗日期 201 班級學號 姓名成績 附錄1 源程式 附錄2 實驗報告填寫說明 1 實驗專案名稱 要求與實驗教學大綱一致.2 實驗目的 目的要明確,要抓住重點,符合實驗教...
成績下降反思
篇一 中學生成績下降檢討書 中學生成績下降檢討書 這次我懷著萬分的抱歉給你寫下了這份檢討書。因為期末考試我考的很不理想,和半期比起,下降了百位之多,讓我非常的驚訝,所以我在這份檢討書中說明了成績靠差了的原因。我首先從英語說起,在英語課上,我經常走神,而且還在你的不注意時偷偷做小動作或和同學說悄悄話,...
職業自測 選擇和你最速配的工作
曬曬自己最適合什麼工作,5分鐘職業自測 天說冷就冷,滿街的落葉,讓人有些許憂傷啊!閒來沒事,在一些職業社交 轉轉,找點好玩的和大家分享一下。今天給大家推薦個小測評,五分鐘就可以知道你最適合做什麼工作,據說準確率98 沒耐性的就不要做了!我做了一下,發現我適合做技術人員,現在我的工作是銷售,看來不太匹...