工程数学实验四

代码

% 定义目标函数和梯度

f = @(x) 100*(x(1)^2 - x(2))^2 + (x(1) - 1)^2;

grad = @(x) [400*x(1)*(x(1)^2-x(2)) + 2*(x(1)-1); -200*(x(1)^2-x(2))];

 

% 设置初始点和迭代参数

x0 = [0; 0];

epsilon = 1e-6;

max_iter = 100;

 

% 初始化迭代计数器和搜索方向

k = 0;

d = -grad(x0);

 

% 迭代过程

while k < max_iter

    % 计算步长

    alpha = Armijo(f, grad, x0, d);

 

    % 更新迭代点

    x1 = x0 + alpha*d;

 

    % 计算Beta

    beta = norm(grad(x1))^2 / norm(grad(x0))^2;

 

    % 更新搜索方向

    d = -grad(x1) + beta*d;

 

    % 判断收敛

    if norm(grad(x1)) < epsilon

        break;

    end

 

    % 更新迭代计数器和迭代点

    k = k + 1;

    x0 = x1;

end

 

% 输出最优解和最优值

x_opt = x1;

f_opt = f(x_opt);

disp(['最优解 x_opt = [', num2str(x_opt(1)), ', ', num2str(x_opt(2)), ']']);

disp(['最优值 f_opt = ', num2str(f_opt)]);

disp(['迭代次数 k = ', num2str(k)]);

 

   3. 结果

初始点

实验二最优解

实验二最优值

实验二迭代次数

实验三最优解

实验三最优值

实验三迭代次数

本实验最优解

本实验最优值

本实验迭代次数

(0,0)

(0.99997,1)

2.89e-10

21

(0.99997,1)

2.89e-10

21

(0.99997,1)

2.89e-10

5

(1,1)

(0.99997,1)

2.88e-10

19

(0.99997,1)

2.88e-10

19

(0.99997,1)

2.88e-10

6

(2,2)

(0.99997,1)

2.89e-10

26

(0.99997,1)

2.89e-10

26

(0.99997,1)

2.89e-10

8

(-1,-1)

(0.99997,1)

2.89e-10

22

(0.99997,1)

2.89e-10

22

(0.99997,1)

2.89e-10

5

 

四、心得体会

从实验结果可以看出,共轭梯度法在解决这个无约束优化问题时,与实验二和实验三中的梯度下降法和牛顿法相比,无论是最优解、最优值还是迭代次数都表现更好。尤其是在初始点较远离最优解的情况下,共轭梯度法的收敛速度更快。这说明了共轭梯度法的高效性和可靠性,这也是它在大规模优化问题中被广泛应用的原因之一

posted @ 2023-05-29 10:55  云边上打盹  阅读(56)  评论(0)    收藏  举报