工程数学上机实验(三)

newton.m
| % 定义目标函数及其梯度和海森矩阵 | |
| f = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2; | |
| grad_f = @(x) [400*x(1)^3-400*x(1)*x(2)+2*x(1)-2; | |
| 200*(x(2)-x(1)^2)]; | |
| hes_f = @(x) [1200*x(1)^2-400*x(2)+2, -400*x(1); | |
| -400*x(1), 200]; | |
| % 初始值和终止准则 | |
| x0_list = [1.2, 1.2; -1.2, 1.2; -1.2, -1.2; 1.2, -1.2; 0, 0]; % 多个不同的初始点 | |
| tol = 1e-5; | |
| for i = 1:length(x0_list) | |
| x0 = x0_list(i,:); | |
| x = x0'; | |
| iter = 0; | |
| grad_norm = inf; % 初始化为正无穷 | |
| while grad_norm > tol | |
| iter = iter + 1; | |
| grad = grad_f(x); | |
| hes = hes_f(x); | |
| d = -hes \ grad; | |
| x_new = x + d; | |
| grad_norm = norm(grad); | |
| x = x_new; | |
| end | |
| fprintf('初始点 (%g, %g)\n', x0(1), x0(2)); | |
| fprintf('迭代次数: %d\n', iter); | |
| fprintf('最优解: (%g, %g)\n', x(1), x(2)); | |
| fprintf('最优函数值: %g\n', f(x)); | |
| fprintf('\n'); | |
| end |
运行结果:


浙公网安备 33010602011771号