工程数学实验三
function [x_opt, f_opt, iter] = newton_method() % 定义目标函数 f = @(x) 100*(x(1)^2 - x(2))^2 + (x(1) - 1)^2; % 计算目标函数的梯度和Hessian矩阵 grad_f = @(x) [400*x(1)*(x(1)^2 - x(2)) + 2*(x(1) - 1); -200*(x(1)^2 - x(2))]; hessian_f = @(x) [1200*x(1)^2 - 400*x(2) + 2, -400*x(1); -400*x(1), 200]; % 定义终止准则 epsilon = 1e-5; % 设置初始点 x0_list = [0, 0; -1, 1; 2, -2]; % 与上面的最速下降法使用相同的初始点 for k = 1:size(x0_list, 1) % 初始化变量 iter = 0; x_opt = x0_list(k, :)'; f_opt = f(x_opt); grad_norm = norm(grad_f(x_opt)); % 牛顿法迭代过程 while grad_norm >= epsilon % 计算搜索方向 p = -hessian_f(x_opt)\grad_f(x_opt); % 更新变量 x_opt = x_opt + p; f_opt = f(x_opt); grad_norm = norm(grad_f(x_opt)); % 更新迭代次数 iter = iter + 1; end % 输出结果 fprintf('初始点:%s\n', mat2str(x0_list(k, :))); fprintf('最优解:%s\n', mat2str(x_opt)); fprintf('最优值:%f\n', f_opt); fprintf('迭代次数:%d\n', iter); disp('----------------------'); end end
% 调用牛顿法函数
[x_opt, f_opt, iter] = newton_method();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?