大连理工大学研究生优化方法上机作业

大连理工大学研究生优化方法上机作业

废话不多说,直接上题解!!!

第一题

分别编写最速下降法、阻尼Newton法、共轭梯度法、BFGS算法的程序求解第三章课后第20题。

目标函数

function f = fun(x)
f=100*(x(2)-x(1)^2)^2+(x(1)-1)^2;
end

目标函数梯度

function gf = gfun( x )
gf=[-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1));200*(x(2)-x(1)^2)];
end

目标函数 Hesse 阵

function He = Hess( x )
He=[1200*x(1)^2-400*x(2)+2,-400*x(1);-400*x(1),200];
end

1. 最速下降法

function [ k,x,val ] = grad( fun,gfun,x0,epsilon )
maxk=5000;
beta=0.5; sigma=0.4;
k=0;
while(k

运行结果如下,其中 k 为迭代次数,x 为最优解, val 为最优值。

大连理工大学研究生优化方法上机作业_第1张图片

2. 阻尼 Newton 法

function [ k,x,val ] = zuninewton( fun,gfun,x0,epsilon )
maxk=5000;
beta=0.5; sigma=0.4;
k=0;
while(k

运行结果如下,其中k为迭代次数,x为最优解,val为最优值。

大连理工大学研究生优化方法上机作业_第2张图片

3. 共轭梯度法

function [ k,x,val ] = frcg( fun,gfun,x0,epsilon,N )
if nargin<5,N=1000;end
if nargin<4,epsilon=1e-4;end
beta=0.6;sigma=0.4;
n=length(x0);k=0;
while(k=0),dk=-gk;end
    end
    if(norm(gk)

运行结果如下,其中k为迭代次数,x为最优解,val为最优值,N为最大循环次数。

大连理工大学研究生优化方法上机作业_第3张图片

3. BFGS

function [ k,x,val ] = bfgs( fun,gfun,x0,varargin )
N=1000;
epsilon=1e-4;
beta=0.55;sigma=0.4;
n=length(x0);Bk=eye(n);
k=0;
while(k

运行结果如下,其中k为迭代次数,x为最优解,val为最优值。

大连理工大学研究生优化方法上机作业_第4张图片

第二题

第四章课后第9题(编写程序)

7(2)程序如下:

7(2)目标函数

function f_x = fun7_2( x )
f_x=-x(1)*x(2);
end

7(2)不等数约束函数

function gi_x = gi7_2( x,i )
switch i
    case 1
        gi_x=-(-x(1)-x(2)^2+1);
    case 2
        gi_x=-(x(1)+x(2));
    otherwise
end
end

7(2)惩罚函数

function sumt = sumtfun7_2( x,M )
sumt=fun7_2(x);
for i=1:2
    sumt=sumt+M*max(0,gi7_2(x,i))^2;
end
end

7(2)惩罚函数梯度

function sumtgfun = sumtgfun7_2( x,M )
sumtgfun=[-x(2);-x(1)];
if(gi7_2(x,1)>0)
    sumtgfun=sumtgfun+M*[2*(x(1)+x(2)^2-1);2*x(2)*2*(x(1)+x(2)^2-1)];
end
if(gi7_2(x,2)>0)
    sumtgfun=sumtgfun+M*[2*(x(1)+x(2));2*(x(1)+x(2))];
end
end

7(2)SUMT 外点法求解

function [ k,x,val,t ] = SUMT7_2( x0,M )
epsilon=1e-3;
c=2;k=1;
while(k<50)
[~,xi,~]=bfgs('sumtfun7_2','sumtgfun7_2',x0,M);    
t1=gi7_2(xi,1);
    t2=gi7_2(xi,2);
    t=max(t1,t2);
    if(t

运行结果如下,其中k为迭代次数,x为最优解,val为最优值,M为惩罚因子,t用于判断迭代是否停止。
大连理工大学研究生优化方法上机作业_第5张图片



7(3)程序如下:

7(3)目标函数

function f_x = fun7_3( x )
f_x=4*x(1)-x(2)^2-12;
end

7(3)等式函数约束

function he = hf7_3( x )
he=25-x(1)^2-x(2)^2;
end

7(3)不等式函数约束

function gi_x = gi7_3( x,i )
switch i
    case 1
        gi_x=-(10*x(1)-x(1)^2+10*x(2)-x(2)^2-34);
    case 2
        gi_x=-x(1);
    case 3
        gi_x=-x(2);
    otherwise
end
end

7(3)惩罚函数

function sumt = sumtfun7_3( x,M )
sumt=fun7_3(x)+M*hf7_3(x)^2;
for i=1:3
    sumt=sumt+M*max(0,gi7_3(x,i))^2;
end
end
 

7(3) 惩罚函数梯度

function sumtgfun = sumtgfun7_3( x,M )
sumtgfun=[4;-2*x(2)]+M*[-2*x(1)*2*(25-x(1)^2-x(2)^2);-2*x(2)*2*(25-x(1)^2-x(2)^2)];
if(gi7_3(x,1)>0)
    sumtgfun=sumtgfun+M*[(10-2*x(1))*2*(10*x(1)-x(1)^2+10*x(2)-x(2)^2-34);(10-2*x(2))*2*(10*x(1)-x(1)^2+10*x(2)-x(2)^2-34)];
end
if(gi7_3(x,2)>0)
    sumtgfun=sumtgfun+M*[2*x(1);0];
end
if(gi7_3(x,3)>0)
    sumtgfun=sumtgfun+M*[0;2*x(2)];
end
end

7(3)SUMT 外点法求解

function [ k,x,val,t ] = SUMT7_3( x0,M )
epsilon=1e-3;
c=2;k=1;
while(k<50)
    [~,xi,~]=bfgs('sumtfun7_3','sumtgfun7_3',x0,M);
    t1=hf7_3(xi);
    t2=gi7_3(xi,1);
    for i=2:3
        t2=max(t2,gi7_3(xi,i));
    end
    t=max(t1,t2);
    if(t

运行结果如下,其中k为迭代次数,x为最优解,val为最优值,M为惩罚因子,t用于判断迭代是否停止。

大连理工大学研究生优化方法上机作业_第6张图片

你可能感兴趣的:(matlab)