工程数学上机实验(三)
Newton 法程序设计
代码:
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
运行结果:
本文作者:万事胜意k
本文链接:https://www.cnblogs.com/ysk0904/p/17401187.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步