优化方法上机大作业
学 院:
姓 名:
学 号:
指导老师: 肖 现 涛
第一题
源程序如下:
function zy_x = di1ti(x)
%di1ti是用来求解优化作业第一题的函数。
x0=x; yimuxulong=0.000001;
g0=g(x0);s0=-g0;
A=2*ones(100,100);
k=0;
while k<100
lanmed=-(g0)'*s0/(s0'*A*s0);
x=x0+lanmed*s0;
g=g(x);
k=k+1;
if norm(g)<yimuxulong
zy_x=x;
fprintf('After %d iterations,obtain the optimal solution.\n \n The optimal solution is \n %f.\n\nThe optimal "x" is "ans".',k,f(x) )
lambda编程 break;
end
miu=norm(g)^2/norm(g0)^2;
s=-g+miu*s0;
g0=g; s0=s;x0=x;
end
function f=f(x)
f=(x'*ones(100,1))^2-x'*ones(100,1);
function g=g(x)
g=(2*x'*ones(100,1))*ones(100,1)-ones(100,1);
代入x0,运行结果如下:
>> x=zeros(100,1);
>> di1ti(x)
After 1 iterations,obtain the optimal solution.
The optimal solution is
-0.250000.
The optimal "x" is "ans".
ans =0.005*ones(100,1).
第二题
1.最速下降法。
源程序如下:
function zy_x=di2titidu(x)
%该函数用来解大作业第二题。
x0=x; yimuxulong=1e-5; k=0;
g0=g(x0); s0=-g0;
while k>=0
if norm(g0)<yimuxulong
break;
else
lanmed=10;c=0.1;i=0;
while i>=0&i<100
x=x0+lanmed*s0;
if f(x)>(f(x0)+c*lanmed*g0'*s0)
lanmed=lanmed/2;
i=i+1;
else
break;
end
end
x=x0+lanmed*s0;
x0=x;
g0=g(x);
s0=-g0;
k=k+1;
end
end
zy_x=x;
zyj=f(x);
fprintf('after %d iterations,obtain the optimal solution.\n\nThe optimal solution is %f.\n\n The optimal "x" is "ans".\n',k,zyj);
function f=f(x)
x1=[1 0 0 0]*x;
x2=[0 1 0 0]*x;
x3=[0 0 1 0]*x;
x4=[0 0 0 1]*x;
f=(x1-1)^2+(x3-1)^2+100*(x2-x1^2)^2+100*(x4-x3^2)^2;
function g=g(x)
x1=[1 0 0 0]*x;
x2=[0 1 0 0]*x;
x3=[0 0 1 0]*x;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论