中科大《優(yōu)化設(shè)計(jì)》課程大作業(yè)之無約束優(yōu)化實(shí)驗(yàn)報(bào)告(共17頁)
《中科大《優(yōu)化設(shè)計(jì)》課程大作業(yè)之無約束優(yōu)化實(shí)驗(yàn)報(bào)告(共17頁)》由會員分享,可在線閱讀,更多相關(guān)《中科大《優(yōu)化設(shè)計(jì)》課程大作業(yè)之無約束優(yōu)化實(shí)驗(yàn)報(bào)告(共17頁)(17頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、精選優(yōu)質(zhì)文檔-----傾情為你奉上 無約束優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告 力學(xué)系 型號:聯(lián)想y470 CPU:i5-2450M 內(nèi)存:2GB 系統(tǒng):win7-64位 如下是三個(gè)目標(biāo)函數(shù)(包括自定義函數(shù))以及初值和精度選?。? 1.minf(x)=x1^2+2*x2^2-2*x1*x2-4*x1 初值x0=[1,1]’;精度為:0.1 2.minf(x, y)=x^4-2*x*x*y-2*x*y+x^2+2*y*y+4.5*x-4*y+4 初值為(-2.5,4.25);精度為0.01 3.minf(x)=x1^2+x2^2+x3^2 初值為(3,2,1);精度為0.01
2、 如下是運(yùn)算結(jié)果: 目標(biāo)函數(shù) 無約束方法 一維搜索 所需時(shí)間 迭代次數(shù) 極值點(diǎn) 極值 1 最速下降法 黃金分割法 5.81 8 (3.9,1.9) -8.0 牛頓法 2.61 8 (3.9,1.9) -8.0 不精確法 2.96 8 (3.9,1.9) -8.0 阻尼牛頓法 黃金分割法 1.66 1 (4.0,2.0) -8.0 牛頓法 1.02 1 (4.0,2.0) -8.0 不精確法 0.76 1 (4.0,2.0) -8.0 共軛梯度法 黃金分割法 14.65 24 (3.9,2.
3、0) -8.0 牛頓法 7.91 24 (4.0,2.0) -8.0 不精確法 11.28 27 (3.9,2.0) -8.0 鮑維爾法 黃金分割法 9.53 2 (4.0,2.0) -8.0 牛頓法 2.86 2 (4.0,2.0) -8.0 不精確法 -- -- -- -- 變尺度法 黃金分割法 8.04 2 (4.0,2.0) -8.0 牛頓法 1.24 2 (4.0,2.0) -8.0 不精確法 1.35 3 (4.0,2.0) -8.0 單形替換法 無 0.02 9 (4.1,2.2)
4、-8.0 目標(biāo)函數(shù) 無約束方法 一維搜索 所需時(shí)間 迭代次數(shù) 極值點(diǎn) 極值 2 最速下降法 黃金分割法 20.76 21 (1.90,3.73) 0.99 牛頓法 3.23 6 (1.93,3.82) 0.99 不精確法 10.49 27 (1.94,3.84) 0.99 阻尼牛頓法 黃金分割法 3.50 3 (-1.05,1.03) -0.51 牛頓法 1.61 3 (-1.05,1.03) -0.51 不精確法 1.58 4 (-1.05,1.03) -0.51 共軛梯度法 黃金
5、分割法 25.06 30 (-1.05,1.03) -0.51 牛頓法 24.40 35 (-1.05,1.03) -0.51 不精確法 19.80 33 (1.94,3.86) 0.99 鮑維爾法 黃金分割法 11.49 3 (-1.05,1.03) -0.51 牛頓法 6.17 3 (-1.05,1.03) -0.51 不精確法 4.75 1 (-1.50,4.25) 17.31 變尺度法 黃金分割法 3.94 3 (1.94,3.85) 0.99 牛頓法 2.39 3 (1.94,3.85) 0.99 不
6、精確法 2.46 6 (1.94,3.84) 0.99 單形替換法 無 0.01 16 (1.92,3.81) 0.99 目標(biāo)函數(shù) 無約束方法 一維搜索 所需時(shí)間 迭代次數(shù) 極值點(diǎn) 極值 3 最速下降法 黃金分割法 2.70 2 (0,0,0) 0 牛頓法 0.76 1 (0,0,0) 0 不精確法 0.78 1 (0,0,0) 0 阻尼牛頓法 黃金分割法 1.61 1 (0,0,0) 0 牛頓法 0.66 1 (0,0,0) 0 不精確法 0.65 1 (0,0,0) 0 共軛梯度法
7、 黃金分割法 3.15 3 (0,0,0) 0 牛頓法 0.40 0 (0,0,0) 0 不精確法 0.44 0 (0,0,0) 0 鮑維爾法 黃金分割法 7.17 1 (0,0,0) 0 牛頓法 1.99 1 (0,0,0) 0 不精確法 4.08 0 (3.00,2.00,1.00) 14.00 變尺度法 黃金分割法 2.69 2 (0,0,0) 0 牛頓法 0.67 1 (0,0,0) 0 不精確法 0.77 1 (0,0,0) 0 單形替換法 無 0.01 24 (-0.01,0.0
8、3,-0.08) 0.01 總結(jié)及比較: 根據(jù)上面三個(gè)函數(shù)的表格可以看出:首先,從迭代時(shí)間來看,三種一維搜索方法中黃金分割法所用時(shí)間最久,牛頓法和不精確法所用時(shí)間較少,這兩種方法相比較而言牛頓法所用時(shí)間更少一些。而六種無約束方法中,由于單形替代法不需要使用一維搜索方法,故迭代時(shí)間最少,緊接著在使用一維搜索的五種方法中以阻尼牛頓法迭代時(shí)間相對較少,共軛梯度法迭代時(shí)間最久;然后,從迭代次數(shù)來看,共軛梯度法往往需要較多的迭代次數(shù),從而所需時(shí)間也最久;接著,從計(jì)算結(jié)果的精度來看,阻尼牛頓法的結(jié)果精度最高,而單形替換法的精度最低;最后,從編程來看,在編好一維搜索方法的情況下,最速
9、下降法和阻尼牛頓法編程簡單容易,而共軛梯度法、變尺度法和單形替代法需要兩重循環(huán)實(shí)現(xiàn),鮑威爾法和單形替換法則需要編程者對矩陣的操作能力有較高的要求,故編程較難。 同時(shí),從上面的結(jié)果也可以發(fā)現(xiàn),鮑威爾法在使用不精確的一維搜索方法時(shí),對函數(shù)1無法收斂,對函數(shù)2、3收斂到錯(cuò)誤的結(jié)果,所以鮑威爾法是依賴于精確的一維搜索過程的,而其他幾個(gè)則不依賴于精確一維搜索過程。精確的一維搜索方法通常需要花費(fèi)很大的工作量,特別是當(dāng)?shù)c(diǎn)遠(yuǎn)離問題的解時(shí),精確的求解一個(gè)一維子問題通常不是十分有效率的。因此,只要保證目標(biāo)函數(shù)值在每一步都有滿意的下降,使用不是非常精確的一維搜索,就可以大大節(jié)省工作量。 在分析函數(shù)2的計(jì)算
10、結(jié)果時(shí),可以發(fā)現(xiàn)存在兩個(gè)收斂結(jié)果,當(dāng)然這兩個(gè)結(jié)果都是極值,因?yàn)楹瘮?shù)2是二元四次函數(shù),存在多個(gè)極值。故為了驗(yàn)證正確性,自己曾將初始點(diǎn)(-2.5,4.25)調(diào)成(2.5,4.25),分別代入程序中計(jì)算,計(jì)算結(jié)果都收斂于極值為0.99的這個(gè)點(diǎn)上。所以,在存在多個(gè)極值點(diǎn)的情況下結(jié)果是和初始點(diǎn)的選取有關(guān)。 對于單形替換法,這種方法不需要一維搜索最佳步長,故沒有一維搜索方法反復(fù)地計(jì)算最佳步長的計(jì)算時(shí)間,程序運(yùn)行效率快。但它的收斂條件不好選擇,通過查找文獻(xiàn)資料總結(jié)出以下三個(gè)收斂條件:1.利用最壞點(diǎn)函數(shù)值與最好點(diǎn)函數(shù)值之差判別;2. 利用相鄰兩次函數(shù)值差值的絕對值判別;3. 利用各點(diǎn)的函數(shù)值與最好點(diǎn)函數(shù)值
11、之差的均方根判別。為了保證程序的執(zhí)行可靠性,這三種常用的方法中自己選擇了判別3,即: 綜上所述,阻尼牛頓法是無約束方法中最有效的方法。不僅編程簡單,而且迭代次數(shù)較少,運(yùn)行時(shí)間較短,結(jié)果的精度也較高。 在程序的運(yùn)行方面,分別設(shè)置了可變的函數(shù)選擇、無約束方法選擇、一維搜索方法選擇、起始點(diǎn)、精度這五個(gè)輸入,故可以在命令窗口運(yùn)行主程序main,再根據(jù)提示要求分別輸入這五個(gè)參數(shù)的所需值,就可以得到運(yùn)行結(jié)果。 程序如下: 1、 主函數(shù) clear; global k; k=0; disp('1.f(x)=x1^2+2*x2^2-2*x1*x2-4*x1'); disp('2
12、.f(x,y)=x^4-2*x*x*y-2*x*y+x^2+2*y*y+4.5*x-4*y+4'); disp('3.f(x)=x1^2+x2^2+x3^2'); while 1 n0=input('請輸入上面所想選擇函數(shù)的編號(1、2、3):'); if n0==1||n0==2||n0==3 break; end disp('此次輸入無效.'); end disp(' '); disp('1.最速下降法'); disp('2.阻尼牛頓法'); disp('3.共軛梯度法'); disp('4.鮑威爾法'); disp('5.變尺度法')
13、; disp('6.單純形法'); while 1 m0=input('請輸入上面所想選擇無約束方法的編號(1、2、3、4、5、6):'); if m0==1||m0==2||m0==3||m0==4||m0==5||m0==6 break; end disp('此次輸入無效.'); end disp(' '); disp('1.黃金分割法'); disp('2.牛頓法'); disp('3.不精確一維搜索法'); while 1 m1=input('請輸入上面所想選擇一維搜索方法的編號(1、2、3):'); if m1==1||
14、m1==2||m1==3 break; end disp('此次輸入無效.'); end disp(' '); s=input('請輸入用空格隔開的初始值坐標(biāo)向量(如:1.1 2.0):','s'); x=str2num(s); x=x'; disp(' '); while 1 e=input('請輸入精度(建議0.1或0.01):'); if e>0 break; end disp('此次輸入無效.'); end disp(' '); disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15、~~~~~~~~~~'); [xx,yy]=fmins(m0,m1,n0,x,e); fprintf('迭代次數(shù)為: %8.0f\n', k); disp('所求極值點(diǎn)的坐標(biāo)向量為:'); fprintf(' %16.5f\n', xx); fprintf('所求函數(shù)的極值為: %16.5f\n', yy); 2、 外部多維的調(diào)用函數(shù) function [xx,yy]=fmins(m0,m1,n0,x,e) %UNTITLED 此處顯示有關(guān)此函數(shù)的摘要 % 此處顯示詳細(xì)說明 if m0==1 tic;[xx,yy]=z
16、uisu(m1,n0,x,e);toc; elseif m0==2 tic;[xx,yy]=zuni(m1,n0,x,e);toc; elseif m0==3 tic;[xx,yy]=gonge(m1,n0,x,e);toc; elseif m0==4 tic;[xx,yy]=powell(m1,n0,x,e);toc; elseif m0==5 tic;[xx,yy]=bianchi(m1,n0,x,e);toc; elseif m0==6 tic;[xx,yy]=danxing(n0,x,e);toc; end end
17、
3、 最速法
function [xx,yy]=zuisu(m1,n0,x,e)
%UNTITLED2 此處顯示有關(guān)此函數(shù)的摘要
% 此處顯示詳細(xì)說明
global k;
[g,ss]=gra(n0);
while 1
d=-double(subs(g,ss,x));
a=fmin(m1,n0,x,d,e);
x1=x+a*d;
if norm(x1-x) 18、 阻尼法
function [xx,yy]=zuni(m1,n0,x,e)
%UNTITLED 此處顯示有關(guān)此函數(shù)的摘要
% 此處顯示詳細(xì)說明
global k;
[g,ss]=gra(n0);
h=jacobian(g',ss);
while 1
d=-double(subs(h,ss,x)^(-1)*subs(g,ss,x));
a=fmin(m1,n0,x,d,e);
x1=x+a*d;
if norm(x1-x) 19、xx=x1;
yy=f0(n0,xx);
end
5、 共軛梯度法
function [xx,yy]=gonge(m1,n0,x,e)
%UNTITLED2 此處顯示有關(guān)此函數(shù)的摘要
% 此處顯示詳細(xì)說明
global k;
if n0==1
n=2;
elseif n0==2
n=4;
elseif n0==3
n=2;
end
[g,ss]=gra(n0);
while 1
kk=0;
d=-double(subs(g,ss,x));
while 1
a=fmin(m1,n0, 20、x,d,e);
x1=x+a*d;
gx=double(subs(g,ss,x));
gx1=double(subs(g,ss,x1));
if norm(gx1) 21、kk+1;
end
if norm(gx1) 22、n,n+1);
xk=zeros(n,n+1);
deta=zeros(n,1);
for j=1:n
d(j,j)=1;
end
while 1
xt=x;
for i=1:n
a=fmin(m1,n0,xt,d(:,i),e);
xk(:,i)=xt+a*d(:,i);
deta(i)=f0(n0,xt)-f0(n0,xk(:,i));
xt=xk(:,i);
end
xt=x;
xk(:,n+1)=2*xk(:,n)-x;
ff0=f0( 23、n0,x);
ff2=f0(n0,xk(:,n));
ff3=f0(n0,xk(:,n+1));
md=max(deta);
m=find(deta==md);
if (ff3 24、 d(:,i)=d(:,i+1);
end
else
if ff2 25、ED 此處顯示有關(guān)此函數(shù)的摘要
% 此處顯示詳細(xì)說明
global k;
if n0==1
n=2;
elseif n0==2
n=2;
elseif n0==3
n=3;
end
[g,ss]=gra(n0);
while 1
gx=double(subs(g,ss,x));
h=eye(n);
kk=0;
while 1
d=-h*gx;
a=fmin(m1,n0,x,d,e);
xk=x+a*d;
if norm(xk-x) 26、
break;
end
if kk==n
break;
end
gxk=double(subs(g,ss,xk));
yk=gxk-gx;
sk=xk-x;
h=h+(sk*sk')/(sk'*yk)-((h*yk)*yk'*h)/(yk'*h*yk);
x=xk;
gx=gxk;
kk=kk+1;
k=k+1;
end
if n 27、orm(xk-x) 28、
h=2*eye(n);
xk(:,1)=x;
for i=1:n
xk(:,i+1)=x+h(:,i);
end
while 1
for i=1:n+1
f(i)=f0(n0,xk(:,i));
end
while 1
f(n+2)=nan;
f(n+3)=nan;
f(n+4)=nan;
f(n+5)=nan;
fl=min(f);
xll=find(f==fl);
xl=xll(1);
29、 fh=max(f);
xhh=find(f==fh);
xh=xhh(1);
fff=f;
fff(xh)=[];
fg=max(fff);
fz=0;
for i=1:n+1
fz=fz+(f(i)-f(xl))^2;
end
fz=sqrt(fz/n);
if fz 30、 for i=1:n
xkk=xkk+xk(:,i+1);
end
xk(:,n+2)=(xkk-xk(:,xh))/n;
xk(:,n+3)=2*xk(:,n+2)-xk(:,xh);
f(n+3)=f0(n0,xk(:,n+3));
if f(n+3) 31、 if f(n+4) 32、
else
if f(n+3)>=fh
xk(:,n+3)=xk(:,xh);
end
xk(:,n+5)=xk(:,n+2)+0.5*(xk(:,n+3)-xk(:,n+2));
f(n+5)=f0(n0,xk(:,n+5));
if f(n+5) 33、 f(xh)=f(n+5);
else
for i=1:n+1
xk(:,i)=(xk(:,i)+xk(:,xl))/2;
end
break;
end
end
end
k=k+1;
end
if fz 34、
k=k+1;
end
xx=xk(:,xl);
yy=f0(n0,xx);
end
9、 內(nèi)部循環(huán)一維調(diào)用函數(shù)
function xx=fmin(m1,n0,x,d,e)
x0=0;%初始步長默認(rèn)為0
[amin,amax]=range1(n0,x,d,x0);
if m1==1
xx=gold(n0,x,d,amin,amax,e);
elseif m1==2
xx=newton(n0,x,d,amax,e);
elseif m1==3
xx=wolfe(n0,x,d);
end
end
10、一維搜索確定區(qū)間函 35、數(shù)
function [amin,amax] = range1(n0,x,d,x0)
%UNTITLED5 此處顯示有關(guān)此函數(shù)的摘要
% 此處顯示詳細(xì)說明
h=1;
a1=x0;y1=f_1(n0,x,d,a1);
a2=a1+h;y2=f_1(n0,x,d,a2);
if y2>y1
h=-h; a3=a1;y3=y1;
a1=a2;
a2=a3;y2=y3;
end
a3=a2+h;y3=f_1(n0,x,d,a3);
while y3 36、a3=a2+h;y3=f_1(n0,x,d,a3);
end
amin=min(a1,a3);
amax=max(a1,a3);
end
11、黃金一維法
function xx=gold(no,x,d,amin,amax,e)
%UNTITLED6 此處顯示有關(guān)此函數(shù)的摘要
% 此處顯示詳細(xì)說明
a1=amax-0.618*(amax-amin);
y1=f_1(no,x,d,a1);
a2=amin+0.618*(amax-amin);
y2=f_1(no,x,d,a2);
while abs(amax-amin)>=e
if y1>=y2
37、 amin=a1;
a1=a2;
y1=y2;
a2=amin+0.618*(amax-amin);
y2=f_1(no,x,d,a2);
else
amax=a2;
a2=a1;
y2=y1;
a1=amax-0.618*(amax-amin);
y1=f_1(no,x,d,a1);
end
end
xx=(amax+amin)/2;
end
12、牛頓一維法
function xx=n 38、ewton(n0,x,d,amax,e)
%UNTITLED9 此處顯示有關(guān)此函數(shù)的摘要
% 此處顯示詳細(xì)說明
syms s;
z=x+s*d;
if n0==1
a=z(1);
b=z(2);
f=a^2+2*b^2-2*a*b-4*a;
elseif n0==2
a=z(1);
b=z(2);
f=a^4-2*a*a*b-2*a*b+a*a+2*b*b+4.5*a-4*b+4;
elseif n0==3
a=z(1);
b=z(2);
c=z(3);
f=a*a+b*b+c 39、*c;
end
x0=amax;
while(1)
if subs(diff(diff(f,s),s),x0)==0
break;
end
x0 = x0-double(subs(diff(f,s),x0)/subs(diff(diff(f,s),s),x0));
if abs(double(subs(diff(f,s),x0))) 40、 syms a b;
f=a^2+2*b^2-2*a*b-4*a;
g=gradient(f);
xx=[a;b];
elseif n0==2
syms a b;
f=a^4-2*a*a*b-2*a*b+a*a+2*b*b+4.5*a-4*b+4;
g=gradient(f);
xx=[a;b];
elseif n0==3
syms a b c;
f=a*a+b*b+c*c;
g=gradient(f);
xx=[a;b;c];
end
u=0.1; q=0.4; aa= 41、0; bb=inf; alf=1;
fx=double(subs(f,xx,x));
gx=double(subs(g,xx,x));
while 1
xk=x+alf*d;
h=-u*alf*gx'*d;
while fx-double(subs(f,xx,xk))< h
bb=alf;
alf=(alf+aa)/2;
h=-u*alf*gx'*d;
xk=x+alf*d;
end
gk=double(subs(g,xx,xk));
if gk'*d < 42、q*gx'*d
aa=alf;
alf=min(2*alf,(alf+bb)/2);
else
break;
end
end
14、求導(dǎo)函數(shù)
function [g,ss]=gra(n0)
%UNTITLED 此處顯示有關(guān)此函數(shù)的摘要
% 此處顯示詳細(xì)說明
if n0==1
syms a b;
f=a^2+2*b^2-2*a*b-4*a;
g=gradient(f);
ss=[a;b];
elseif n0==2
syms a b;
f 43、=a^4-2*a*a*b-2*a*b+a*a+2*b*b+4.5*a-4*b+4;
g=gradient(f);
ss=[a;b];
elseif n0==3
syms a b c;
f=a*a+b*b+c*c;
g=gradient(f);
ss=[a;b;c];
end
end
15、f0函數(shù)
function yy=f0(n0,xx)
%UNTITLED2 此處顯示有關(guān)此函數(shù)的摘要
% 此處顯示詳細(xì)說明
if n0==1
a=xx(1);
b=xx(2);
yy=a^2+2* 44、b^2-2*a*b-4*a;
elseif n0==2
a=xx(1);
b=xx(2);
yy=a^4-2*a*a*b-2*a*b+a*a+2*b*b+4.5*a-4*b+4;
elseif n0==3
a=xx(1);
b=xx(2);
c=xx(3);
yy=a*a+b*b+c*c;
end
end
16、f_1函數(shù)
function yy=f_1(n0,x,d,xx)
syms s;
z=x+s*d;
if n0==1
a=z(1);
b=z(2);
f=a^2+2*b^2-2*a*b-4*a;
elseif n0==2
a=z(1);
b=z(2);
f=a^4-2*a*a*b-2*a*b+a*a+2*b*b+4.5*a-4*b+4;
elseif n0==3
a=z(1);
b=z(2);
c=z(3);
f=a*a+b*b+c*c;
end
yy=double(subs(f,s,xx));
end
專心---專注---專業(yè)
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備采購常用的四種評標(biāo)方法
- 車間員工管理須知(應(yīng)知應(yīng)會)
- 某公司設(shè)備維護(hù)保養(yǎng)工作規(guī)程
- 某企業(yè)潔凈車間人員進(jìn)出管理規(guī)程
- 企業(yè)管理制度之5S管理的八個(gè)口訣
- 標(biāo)準(zhǔn)化班前會的探索及意義
- 某企業(yè)內(nèi)審員考試試題含答案
- 某公司環(huán)境保護(hù)考核管理制度
- 現(xiàn)場管理的定義
- 員工培訓(xùn)程序
- 管理制度之生產(chǎn)廠長的職責(zé)與工作標(biāo)準(zhǔn)
- 某公司各級專業(yè)人員環(huán)保職責(zé)
- 企業(yè)管理制度:5S推進(jìn)與改善工具
- XXX公司環(huán)境風(fēng)險(xiǎn)排查及隱患整改制度
- 生產(chǎn)車間基層管理要點(diǎn)及建議