2021/6/8 日常练习

一、实验目的

1、基本要求

掌握 Hesse 矩阵的计算方法和 Newton 法的基本思想及其迭代步骤;学会运用 MATLAB 编程实现

常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。

 

二、实验内容

(1)求解无约束优化问题: ;

(2)终止准则取 ;

(3)完成 Newton 法(牛顿法)的 MATLAB 编程、调试;

(4)选取几个与实验二中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优 值、收敛速度(迭代次数)等方面进行比较);

(5)按照模板撰写实验报告,要求规范整洁。

3、操作要点

(1)通过编程实现牛顿法;

(2)使用 MTALAB 调试程序,并将实验结果保存到文件中;

(3)撰写实验报告

 

 

三、算法步骤、代码、及结果

   1. 算法步骤

步0:确定终止误差e=(0~1),初始点x0,=(0~1),=(0,0.5),令k=0

步1:计算gk=f(xk).若||gk||<=e,停算,输出xk作为最优解。否则,转步2

步2:计算Gk=^2f(xk),并解出方程组:Gk*dk=-gk,解得dk,其中Gk在xk处要正定

步3:求步长k=^mk,m的值从0开始

若f(xk+ ^m*dk)<=f(xk)+*^m*gk'dk

则 mk=m,步长 k=^mk,若不满足上式,则m=m+1,直到满足上述不等式为止

步4:令Xk+1=xk+ k*dk,k=k+1,转步1

2. 代码

 


1 1、牛顿法
2
3 function [x,val,k] =dampnm(fun,gfun,Hess,x0)
4 %功能:用阻尼牛顿法求解无约束问题minif(x)
5 %dampnm是阻尼的意思
6 %输入:fun,gfun,Hess分别是目标函数,梯度,二阶导数,x0是初始点
7 %输出:x,val分别是近似极小点和近似最优值,k是迭代次数
8 maxk=100;
9 rho=0.55;
10 sigma=0.4;
11 k=0;
12 e=1e-5;%精度要求
13 while(k<maxk)
14 gk=feval(gfun,x0);
15 if(norm(gk)<=e),break;end
16 Gk=feval(Hess,x0);
17 dk=-Gk\gk;%右除,解方程Gk*dk=-gk
18 m=0;
19 mk=0;
20 while(m<20)
21 if(feval(fun,x0+rho^m*dk)<feval(fun,x0)+sigma*rho^m*gk'*dk);
22 mk=m;
23 break;
24 end
25 m=m+1;
26 end
27 x0=x0+dk*rho^m;
28 k=k+1;
29 end
30 x=x0;
31 val=feval(fun,x0);
32 end
33
34 2.目标函数
35
36 function f= fun(x)
37 %目标函数
38 f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
39 end
40
41 3.目标函数梯度
42
43 function g=gfun(x)
44 %目标函数的梯度
45 g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';
46 end
47
48 4.目标函数的Hess阵
49
50 function f = Hess(x)
51 %n=length(x);
52 %f=zero(n,n);
53 f=[1200*x(1)^2-400*x(2)+2,-400*x(1);
54 -400*x(1), 200];
55 5.主函数
56
57 %这个问题的精确值是x=(1,1)',f(x)=0;
58 clear all
59 clc
60 x0=[-1,1]';
61 [x,val,k]=dampnm('fun','gfun','Hess',x0);
62
63 fprintf('初始点 (%g, %g)\n', x0(1), x0(2));
64 fprintf('迭代次数: %d\n', k);
65 fprintf('最优点: (%g, %g)\n', x(1), x(2));
66 disp(['最优函数值: f(x) = ',num2str(val)])

posted @   新晋软工小白  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示