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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

程序如下:

function lambda=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;

while d>e

lambdak=(lambdak+a)/2;

xk=x0+lambdak*sk;

fk=f(xk);

e=f0-fk;

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

end

lambdak

function g=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);

function fa=f(x)

fa=(x(2)-x(1)^2)^2+(1-x(1))^2;

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

程序如下:

function x_star=cong(x0,eps)

g0=grad(x0);

res0=norm(g0);

resk=res0;

k=0;

xk=x0;

while resk>eps

k=k+1;

if k==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-th iteration,the residual is%f,the lambdak is%f\n\n', k,resk,lambdak);

end

x_star=xk;

disp('the optimal solution is');

x_star

%sub functions

function g=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);

function lambda=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)

输出结果为

-

H=2I时

k

程序如下:

function x_star=dfph(x0,eps)

g0=grad(x0);

res0=norm(g0);

res=res0;

k=0;

xk=x0;

while res>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-th iteration,the residual is%f,the lambdak is%f\n\n', k,res,lambdak);

end

x_star=xk;

disp('the optimal solution is');

x_star

function lambda=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;

while d>e

lambdak=(lambdak+a)/2;

xk=x0+lambdak*s0;

fk=f(xk);

e=f0-fk;

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

end

lambda=lambdak;

function g=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);

function fa=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)输出结果为:

相关文档
最新文档