优化方法上机大作业
                    学    院:
                    姓    名:
                    学    号:
                    指导老师: 肖  现  涛
第一题
源程序如下:
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小时内删除。