实用最优化方法Matlab程序设计.docx

上传人:b****5 文档编号:3032665 上传时间:2022-11-17 格式:DOCX 页数:30 大小:331.93KB
下载 相关 举报
实用最优化方法Matlab程序设计.docx_第1页
第1页 / 共30页
实用最优化方法Matlab程序设计.docx_第2页
第2页 / 共30页
实用最优化方法Matlab程序设计.docx_第3页
第3页 / 共30页
实用最优化方法Matlab程序设计.docx_第4页
第4页 / 共30页
实用最优化方法Matlab程序设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

实用最优化方法Matlab程序设计.docx

《实用最优化方法Matlab程序设计.docx》由会员分享,可在线阅读,更多相关《实用最优化方法Matlab程序设计.docx(30页珍藏版)》请在冰豆网上搜索。

实用最优化方法Matlab程序设计.docx

实用最优化方法Matlab程序设计

实用最优化方法Matlab程序设计

 

程序如下:

functionlambda=nonexact(x0,s0)

g0=grad(x0);

f0=f(x0);

a=0;

c1=0.1;

c2=0.5;

lambdak=1;

sk=s0;

d=-c1*lambdak*g0'*sk;

xk=x0+lambdak*sk;

f1=f(xk);

e=f0-f1;

whiled>e

lambdak=(lambdak+a)/2;

xk=x0+lambdak*sk;

fk=f(xk);

e=f0-fk;

d=-c1*lambdak*g0'*sk;

end

lambdak

functiong=grad(x)

g=zeros(2,1);

g

(1)=-4*x

(1)*(x

(2)-x

(1)^2)-2*(1-x

(1));

g

(2)=2*(x

(2)-x

(1)^2);

functionfa=f(x)

fa=(x

(2)-x

(1)^2)^2+(1-x

(1))^2;

在命令窗口中输入x0=[0;1];s0=[-1;1];nonexact(x0,s0)

输出结果为:

程序如下:

functionx_star=cong(x0,eps)

g0=grad(x0);

res0=norm(g0);

resk=res0;

k=0;

xk=x0;

whileresk>eps

k=k+1;

ifk==1

sk=-grad(xk);

else

sk=-grad(xk)+resk^2/res0^2*s0;

end

lambdak=step(xk,sk);

x0=xk;

xk=x0+lambdak*sk;

res0=resk;

resk=norm(grad(xk));

s0=sk;

fprintf('------the%d-thiteration,theresidualis%f,thelambdakis%f\n\n',k,resk,lambdak);

end

x_star=xk;

disp('theoptimalsolutionis');

x_star

%subfunctions

functiong=grad(x)

g=zeros(4,1);

g

(1)=2*x

(1)-2*x

(2)+2;

g

(2)=4*x

(2)-2*x

(1)-x(3)+3;

g(3)=2*x(3)-x

(2)-1;

g(4)=2*x(4);

functionlambda=step(x,s)

a=2*x

(1)*s

(1)-2*x

(2)*s

(1)-2*x

(1)*s

(2)+4*x

(2)*s

(2)+2*s(3)*x(3)+2*x(4)*s(4)-s

(2)*x(3)-s(3)*x

(2)+2*s

(1)+3*s

(2)-s(3);

b=2*s

(1)^2+4*s

(2)^2-4*s

(1)*s

(2)+2*s(3)^2+2*s(4)^2-2*s

(2)*s(3);

lambda=-a/b;

在命令窗口中输入x0=[0;0;0;0];eps=1e-6;cong(x0,eps)

输出结果为

-

=

程序如下:

functionx_star=dfph(x0,eps)

g0=grad(x0);

res0=norm(g0);

res=res0;

k=0;

xk=x0;

whileres>eps

k=k+1;

H=eye(length(x0));

sk=-H*grad(xk);

lambdak=nonexact(xk,sk);

x0=xk;

xk=x0+lambdak*sk;

res=norm(grad(xk));

fprintf('------the%d-thiteration,theresidualis%f,thelambdakis%f\n\n',k,res,lambdak);

end

x_star=xk;

disp('theoptimalsolutionis');

x_star

functionlambda=nonexact(x0,s0)

g0=grad(x0);

f0=f(x0);

a=0;

c1=0.1;

c2=0.5;

lambdak=1;

d=-c1*lambdak*g0'*s0;

xk=x0+lambdak*s0;

f1=f(xk);

e=f0-f1;

whiled>e

lambdak=(lambdak+a)/2;

xk=x0+lambdak*s0;

fk=f(xk);

e=f0-fk;

d=-c1*lambdak*g0'*s0;

end

lambda=lambdak;

functiong=grad(x)

g=zeros(2,1);

g

(1)=2*x

(1)*exp(x

(1)^2+x

(2)^2)+1;

g

(2)=4*x

(2)+2*x

(2)*exp(x

(1)^2+x

(2)^2);

functionfa=f(x)

fa=x

(1)+2*x

(2)^2+exp(x

(1)^2+x

(2)^2);

 

在命令窗口中输入x0=[0;1];eps=1e-3;dfph(x0,eps)

输出结果为:

程序如下:

functionx_star=newton1(x0,eps)

g0=grad(x0);

res0=norm(g0);

res=res0;

k=0;

xk=x0;

whileres>eps

k=k+1;

H=inv(GRAND(xk));

sk=-H*grad(xk);

lambdak=nonexact(xk,sk);

x0=xk;

xk=x0+lambdak*sk;

res=norm(grad(xk));

fprintf('------the%d-thiteration,theresidualis%f,thelambdakis%f\n\n',k,res,lambdak);

end

x_star=xk;

disp('theoptimalsolutionis');

x_star

functionlambda=nonexact(x0,s0)

g0=grad(x0);

f0=f(x0);

a=0;

c1=0.1;

c2=0.5;

lambdak=1;

d=-c1*lambdak*g0'*s0;

xk=x0+lambdak*s0;

f1=f(xk);

e=f0-f1;

whiled>e

lambdak=(lambdak+a)/2;

xk=x0+lambdak*s0;

fk=f(xk);

e=f0-fk;

d=-c1*lambdak*g0'*s0;

end

lambda=lambdak;

functiong=grad(x)

g=zeros(2,1);

g

(1)=2*x

(1)*exp(x

(1)^2+x

(2)^2)+1;

g

(2)=4*x

(2)+2*x

(2)*exp(x

(1)^2+x

(2)^2);

functionfa=f(x)

fa=x

(1)+2*x

(2)^2+exp(x

(1)^2+x

(2)^2);

functionG=GRAND(x)

G=zeros(2,2);

G

(1)=2*exp(x

(1)^2+x

(2)^2)+4*x

(1)^2*exp(x

(1)^2+x

(2)^2);

G

(2)=4*x

(1)*x

(2)*exp(x

(1)^2+x

(2)^2);

G(3)=4*x

(1)*x

(2)*exp(x

(1)^2+x

(2)^2);

G(4)=4+(2+4*x

(2)^2)*exp(x

(1)^2+x

(2)^2);

在命令窗口中输入x0=[0;1];eps=1e-3;newton1(x0,eps)

输出结果为:

为BFGS公式时:

程序如下:

functionx_star=bfgs1(x0,eps)

g0=grad(x0);

res0=norm(g0);

res=res0;

k=0;

xk=x0;

whileres>eps

k=k+1;

ifk==1

H=eye(length(x0));

else

H0=H;

mu=1+dg'*H0*dg/(dx'*dg);

H=H0+(mu*dx*dx'-H0*dg*dx'-dx*dg'*H0)/(dx'*dg);

end

sk=-H*grad(xk);

lambdak=nonexact(xk,sk);

x0=xk;

xk=x0+lambdak*sk;

dx=xk-x0;

dg=grad(xk)-grad(x0);

res=norm(grad(xk));

fprintf('------the%d-thiteration,theresidualis%f,thelambdakis%f\n\n',k,res,lambdak);

end

x_star=xk;

fm=f(xk);

disp('theoptimalsolutionis');

x_star

fm

functionlambda=nonexact(x0,s0)

g0=grad(x0);

f0=f(x0);

a=0;

c1=0.1;

c2=0.5;

lambdak=1;

d=-c1*lambdak*g0'*s0;

xk=x0+lambdak*s0;

f1=f(xk);

e=f0-f1;

whiled>e

lambdak=(lambdak+a)/2;

xk=x0+lambdak*s0;

fk=f(xk);

e=f0-fk;

d=-c1*lambdak*g0'*s0;

end

lambda=lambdak;

functiong=grad(x)

g=zeros(2,1);

g

(1)=2*x

(1)*exp(x

(1)^2+x

(2)^2)+1;

g

(2)=4*x

(2)+2*x

(2)*exp(x

(1)^2+x

(2)^2);

functionfa=f(x)

fa=x

(1)+2*x

(2)^2+exp(x

(1)^2+x

(2)^2);

在命令窗口中输入x0=[0;1];eps=1e-3;bfgs1(x0,eps)

输出结果为:

程序如下:

functionx=qpact(H,c,Ae,be,Ai,bi,x0)

epsilon=1.0e-9;

err=1.0e-6;

k=0;

x=x0;

n=length(x);

kmax=1.0e3;

ne=length(be);

ni=length(bi);

lamk=zeros(ne+ni,1);

index=ones(ni,1);

for(i=1:

ni)

if(Ai(i,:

)*x>bi(i)+epsilon)

index(i)=0;

end

end

while(k

Aee=[];

if(ne>0)

Aee=Ae;

end

for(j=1:

ni)

if(index(j)>0)

Aee=[Aee;Ai(j,:

)];

end

end

gk=H*x+c;

[m1,n1]=size(Aee);

[dk,lamk]=qsubp(H,gk,Aee,z

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

当前位置:首页 > 表格模板 > 合同协议

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

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