4.24
所花时间:4小时
代码量:21
博客篇:1
工程数学
Newton法程序设计
一、实验目的
掌握Hesse矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。
二、实验内容
(1)求解无约束优化问题:;
(2)终止准则取;
(3)完成Newton法(牛顿法)的MATLAB编程、调试;
(4)选取几个与实验二中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);
(5)按照模板撰写实验报告,要求规范整洁。
三、算法步骤、代码、及结果
1. 算法步骤
步骤1:给定初始点 x0,及精度e 令
步骤2:若梯度的范数<e ,停止,极小点为xk ,否则转【3】;
步骤3:计算负梯度,海森矩阵,令 dk=负梯度*海森矩阵的逆
步骤4:令 xk+1 = xk + dk,k=k+1,转【2】。
2.代码
function [k,x,val] = dampnm(fun,gfun,Hess,x0,epsilon) % 输入:% fun - 被优化的函数% gfun - 目标函数的梯度% Hess - 目标函数的Hessian矩阵 % x0 - 初始点% epsilon - 收敛阈值 k = 1;% 初始化迭代计数器 gk = feval(gfun, x0);% 计算初始梯度 Gk = feval(Hess, x0);% 计算初始Hessian矩阵 while norm(gk) > epsilon% 检查初始梯度是否已满足收敛条件 dk = -Gk\gk;% 求解线性方程组以找到搜索方向 x0 = x0 + dk;% 更新点 gk = feval(gfun, x0); % 计算新点的梯度 Gk = feval(Hess, x0); % 计算新点的Hessian矩阵 k = k + 1;% 迭代计数器递增 if k > 10000 % 如果迭代次数太多,退出循环 warning('The method did not converge after 10000 iterations.'); break; end end % 输出最终迭代结果 x = x0; val = feval(fun, x0); end