大连理工优化作业matlab源程序.docx

上传人:b****3 文档编号:5429051 上传时间:2022-12-16 格式:DOCX 页数:13 大小:16.63KB
下载 相关 举报
大连理工优化作业matlab源程序.docx_第1页
第1页 / 共13页
大连理工优化作业matlab源程序.docx_第2页
第2页 / 共13页
大连理工优化作业matlab源程序.docx_第3页
第3页 / 共13页
大连理工优化作业matlab源程序.docx_第4页
第4页 / 共13页
大连理工优化作业matlab源程序.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

大连理工优化作业matlab源程序.docx

《大连理工优化作业matlab源程序.docx》由会员分享,可在线阅读,更多相关《大连理工优化作业matlab源程序.docx(13页珍藏版)》请在冰豆网上搜索。

大连理工优化作业matlab源程序.docx

大连理工优化作业matlab源程序

2000年11月9日

%第二章第17题,修正单纯形法解习题11

(1)

clc;

clear;

A=[212;331];

[m,n]=size(A);

b=[4;3];

r=[411];

c=[411];

bs=[2:

3];

nbs=[1:

1];a1=A(:

1);

T=A(:

bs);

a2=inv(T)*a1;

b=inv(T)*b;

A=[a2,eye(m)];

B=eye(m);

xb=B\b;

cb=c(bs);%

cn=c(nbs);

con=1;

M=zeros

(1);

whilecon

M=M+1;

t=cb/B;

r=c-t*A;

ifall(r>=0)

x(bs)=xb;

x(nbs)=0;

fx=cb*xb;

disp(['当前解是最优解,minz=',num2str(fx)])

disp('当前解为')

disp(x)

break

end

rnbs=r(nbs);

kk=find(rnbs==min(rnbs));

k=kk

(1);

Anbs=A(:

nbs);

yik=B\Anbs(:

k);%yik

xb=B\b;%yi0

ifall(yik<=0)

disp('此LP问题无有限的最优解,计算结束',x)

disp(xb)

break

else

i=find(yik>0);

w=abs(xb(i,1)./yik(i,1));

l=find(w==min(w));

rr=min(l);

yrrk=yik(rr,1);

Abs=A(:

bs);

D=Anbs(:

k);

Anbs(:

k)=Abs(:

rr);

Abs(:

rr)=D;

F=bs(rr);

bs(rr)=nbs(k);

nbs(k)=F;

AA=[Anbs,Abs];

EE=eye(m);

EE(:

rr)=-yik./yrrk;

Errk=EE;

Errk(rr,rr)=1/yrrk;

BB=Errk/B;

B=inv(BB);

cb=c(:

bs);

xb=Errk*xb;

x(bs)=xb;

x(nbs)=0;

fx=cb*xb;

end

ifM>=1000

disp('此问题无有限最优解')

break

end

end

%第二章第17题修正单纯型法解第11

(2)

A=[1-12-1;21-31;1111];

[m,n]=size(A);

b=[2;6;7];

r=[21-1-1];

c=[21-1-1];

bs=[1:

3];

nbs=[4:

4];

a1=A(:

4);

T=A(:

bs);

a2=inv(T)*a1;

b=inv(T)*b;

A=[eye(m),a2];

B=eye(m);

xb=B\b;

cb=c(bs);%

cn=c(nbs);

con=1;

M=zeros

(1);

whilecon

M=M+1;

t=cb/B;

r=c-t*A;

ifall(r>=0)

x(bs)=xb;

x(nbs)=0;

fx=cb*xb;

disp(['当前解是最优解,minz=',num2str(fx)])

disp('对应的最优解为,x=')

disp(x)

break

end

rnbs=r(nbs);

kk=find(rnbs==min(rnbs));

k=kk

(1);

Anbs=A(:

nbs);

yik=B\Anbs(:

k);

xb=B\b;%yi0

ifall(yik<=0)

disp('此LP问题无有限的最优解,计算结束',x)

disp(xb)

break

else

i=find(yik>0);

w=abs(xb(i,1)./yik(i,1));

l=find(w==min(w));

rr=min(l);

yrrk=yik(rr,1);

Abs=A(:

bs);

D=Anbs(:

k);

Anbs(:

k)=Abs(:

rr);

Abs(:

rr)=D;

F=bs(rr);

bs(rr)=nbs(k);

nbs(k)=F;

AA=[Anbs,Abs];

EE=eye(m);

EE(:

rr)=-yik./yrrk;

Errk=EE;

Errk(rr,rr)=1/yrrk;

BB=Errk/B;

B=inv(BB);

cb=c(:

bs);

xb=Errk*xb;

x(bs)=xb;

x(nbs)=0;

fx=cb*xb;

end

ifM>=1000

disp('此问题无有限最优解')

break

end

end

 

%这是第三章十一题

%f(x)=x^2+exp(-x);

%x=[-2,3]

%采用0.618法

clc;

clear;

a=-2;

b=3;%

cout=1;

MAX=100;

k=0.618;

e=0.00001;

x1=a+(1-k)*(b-a);

x2=a+k*(b-a);

while(cout

if(b-a

xx=0.5*(b+a);

disp('最优解x=')

disp(xx)

disp('最优值为f(x)=')

disp(exp(-xx)+xx^2)

break;

elseif(b-a>e)

if((x1^2+exp(-x1))>(x2^2+exp(-x2)))

a=x1;

b=b;

x1=x2;

x2=a+k*(b-a);

cout=cout+1;

elseif((x1^2+exp(-x1))<=(x2^2+exp(-x2)))

a=a;

b=x2;

x2=x1;

x1=a+(1-k)*(b-a);

cout=cout+1;

end

end

end

 

%这是第三章第15题,要求采用不精确一维搜索算法二解问题

clc;

clear;

symsx1x2k

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

v=[x1x2];%X(i)

g=jacobian(y,v);

z=subs(y,{x1,x2},{x1+k,x2+k});%X(i)+k*S(i)

z1=subs(z,{x1,x2},{-1,1});

z2=diff(z1,k);

k1=0;

k2=100;

k3=inf;

cout=1;

MAX=1000;

c1=0.1;

c2=0.5;

T=0.1;

s=[1;1];

while(cout

y1=subs(y,{x1,x2},{-1,1});

y2=subs(z1,k,k2);%f(x(i+1))

g1=subs(g,{x1,x2},{-1,1});

g3=subs(g,{x1,x2},{x1+k,x2+k});

g2=subs(g3,{x1,x2,k},{-1,1,k2});

if((y1-y2)>=(-c1*k2*(g1*s))&&(g2*s)>=c2*(g1*s))

KK=k2;

disp('最小步长=')

disp(KK)

break;

elseif((y1-y2)<(-c1*k2*(g1*s))||(g2*s)

u1=subs(z1,k,k1);

u2=subs(z1,k,k2);

uu=subs(g,{x1,x2},{-1+k1,1+k1})*s;

u=k1+0.5*(k2-k1)/(1+(u1-u2)/((k2-k1)*uu));

%u=k1+(k2-k1)/((u2-u1)/((k2-k1)*uu)-1);

if(u>k1&&u

k3=k2;

k2=u;

elseif(u>=k2&&u

k1=k2;

k2=u;

elseif(u<=k1)

u=k1+T*(k3-k1);

k2=u;

elseif(u>=k3)

u=k3-T*(k3-k1);

k2=u;

end

m=[k1k2k3ucout];

cout=cout+1;

end

end

%这是第三章第19题,要求采用阻尼牛顿法计算函数的极小值

clc;

clear;

symsx1x2k

m=3;

n=2;

e=0.000000000000000000000001;

MAX=10;

cout=1;

%y=x1^2+x2^2+x1*x2-3*x1;

y=ff(x1,x2);

y1=diff(y,x1);

y2=diff(y,x2);

y11=diff(y1,x1);

y12=diff(y1,x2);

y21=diff(y2,x1);

y22=diff(y2,x2);

while(cout

df1=subs(y1,{x1,x2},{m,n});

df2=subs(y2,{x1,x2},{m,n});

if((double(df1))^2+(double(df2))^2>e)

A=[y11y12;y21y22];

B=[df1;df2];

C=inv(A);

S=-C*B;

z=ff(x1+k*S(1,1),x2+k*S(2,1));

z1=subs(diff(z,k),{x1,x2},{m,n});

kk=solve(z1,k);

S2=[m+kk*S(1,1);n+kk*S(2,1)];

m=S2(1,1);

n=S2(2,1);

cout=cout+1;

elseif((double(df1))^2+(double(df2))^2<=e)

X=eye

(2)*S2;

disp('最优解,x=')

disp(X);

disp('最优值,f(x)=')

disp(subs(y,{x1,x2},{X(1,1),X(2,1)}))

cout=cout+1;

break;

end

end

%函数文件,单独成文件

functiony=ff(a,b)

y=a^2+b^2+a*b-3*a;

clc;

clear;

symsx1x2k

e=0.000001;

MAX=300;

cout=1;

m=2;

n=0;

X0=[m;n];

temp=1;

y=myBFGS(x1,x2);

H0=eye

(2);

y1=diff(y,x1);

y2=diff(y,x2);

mmm=0;

G0=subs([y1;y2],{x1,x2},{m,n});

while(cout

df1=subs(y1,{x1,x2},{X0(1,1),X0(2,1)});

df2=subs(y2,{x1,x2},{X0(1,1),X0(2,1)});

m=X0(1,1);

n=X0(2,1);

if((double(df1))^2+(double(df2))^2>e)

S0=-H0*G0;

z=myBFGS(x1+k*S0(1,1),x2+k*S0(2,1));

z1=diff(z,k);

z2=subs(z1,{x1,x2},{m,n});

k1=double(solve(z2,k));

kk=1;

fori=1:

numel(k1)

if(imag(k1(i))==0)

if(k1(i)<1&&k1(i)>0)

if(k1(i)

kk=k1(i);

end

end

end

end

X1=[m+kk*S0(1,1);n+kk*S0(2,1)];XX=subs(X1-X0,{x1,x2},{m,n});

G1=subs([y1;y2],{x1,x2},{X1(1,1),X1(2,1)});GG=G1-G0;

u=1+GG'*H0*GG/(XX'*GG);

H1=H0+(u*XX*XX'-H0*GG*XX'-XX*GG'*H0)/(XX'*GG);

G0=G1;

X0=X1;

H0=H1;

cout=cout+1;

elseif((double(df1))^2+(double(df2))^2<=e)

disp('最优解为,x=')

disp(X0);

break;

end

end

functiony=myBFGS(a,b)

y=(a-1)^2+5*(b-a^2)^2;%这是26题的函数

%第三章第31题,BFGS法解习题27

clc;

clear;

symsx1x2k

e=0.000001;

MAX=300;

cout=1;

m=1;

n=0;

X0=[m;n];

y=myBFGS(x1,x2);

H0=eye

(2);

y1=diff(y,x1);

y2=diff(y,x2);

mmm=0;

G0=subs([y1;y2],{x1,x2},{m,n});

while(cout

df1=subs(y1,{x1,x2},{X0(1,1),X0(2,1)});

df2=subs(y2,{x1,x2},{X0(1,1),X0(2,1)});

m=X0(1,1);

n=X0(2,1);

if((double(df1))^2+(double(df2))^2>e)

S0=-H0*G0;

z=myBFGS(x1+k*S0(1,1),x2+k*S0(2,1));

z1=diff(z,k);

z2=subs(z1,{x1,x2},{m,n});

k1=double(solve(z2,k));

kk=0;

fori=1:

numel(k1)

if(imag(k1(i))==0)

kk=k1(i);

end

end

X1=[m+kk*S0(1,1);n+kk*S0(2,1)];

XX=subs(X1-X0,{x1,x2},{m,n});

G1=subs([y1;y2],{x1,x2},{X1(1,1),X1(2,1)});

GG=G1-G0;

u=1+GG'*H0*GG/(XX'*GG);

H1=H0+(u*XX*XX'-H0*GG*XX'-XX*GG'*H0)/(XX'*GG);

G0=G1;

X0=X1;

H0=H1;

cout=cout+1;

elseif((double(df1))^2+(double(df2))^2<=e)

disp('最优解为,x=')

disp(X0);

break;

end

end

%M函数文件,单独文件

functiony=myBFGS(a,b)

y=a+2*b^2+exp(a^2+b^2);%这是27题的函数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1