首页 > 其他分享 >2023-07-22 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(七).md

2023-07-22 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(七).md

时间:2023-07-22 17:16:00浏览次数:39  
标签:epsil md end 07 22 epsilon xlog alpha x0

2023-07-22 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(七)

数值优化方法Matlab牛顿法

在前面我们研究了共轭方向法和共轭梯度法,两种方法都有二次终止性,那么是否可以在每次迭代的时候都用一个二次函数去近似目标函数呢?这就是牛顿法的基本思想。

我们知道函数处的二阶泰勒展开式为


其中. 考虑的极小点,即, 我们有

得到

即得到牛顿法迭代格式

其中下降方向为.

定理 1.11是二阶连续可微的, 黑塞矩阵的局部极小点附近是利普西茨连续的(常数为), 正定. 则牛顿法产生的点列满足

  1. 若初始点充分靠近, 则;
  2. 迭代点列二阶收敛于;
  3. 二阶收敛于0.

证明:由于附近利普西茨连续且正定,因此存在, 上是可逆的, 满足


, 当时,有

由于(这个不等式需要一定技术)

因此


即结论2成立.

的取值范围可知


因此对任意的, 都有.

反复带入上式,得到


即结论1成立.

注意到


我们有

由于, 所以

由于牛顿法的步长始终为1,在某些情况下可能不收敛,因此可以结合一维线搜索方法得到全局收敛性的牛顿法(阻尼牛顿法)
算法8 阻尼牛顿法
Step 1. 取初始点, 给定精度, 置.
Step 2. 检验, 若成立,则停,否则转下步.
Step 3. 计算牛顿方向


Step 4. 求一维线搜索
,
解得, 令, , 转Step 2.

修订了前面数值梯度算法中的一个错误

  1. %% 数值梯度 
  2. function [gd] = My_Gradient(f, x) 
  3. gd = x; 
  4. epsil = 1e-5; 
  5. d = [-2* epsil, -epsil 0 epsil 2*epsil]; 
  6. tz = [x x x x x]; 
  7. fx = [0,0,0,0,0]; 
  8. for i = 1:length(x) 
  9. tx = tz; 
  10. tx(i,:) = tx(i,:) + d; 
  11. for h = 1:5 
  12. fx(h) = f(tx(:,h)); 
  13. end 
  14. gf = gradient(fx) / epsil; 
  15. gd(i) = gf(3); 
  16. end 
  17. end 
  18.  
  19. %% 数值黑塞矩阵 
  20. function [mz] = My_Hessian(f, x) 
  21. % 计算以当前点为中心点的一张网格 
  22. % 根据网格数据计算最终Hessian矩阵 
  23. n = length(x); 
  24. mz = zeros(n,n); 
  25. mx = zeros(5,5); 
  26. epsil = 1e-5; 
  27. d = [-2* epsil, -epsil 0 epsil 2*epsil]; 
  28. for i = 1:n 
  29. for h = 1:n 
  30. % 针对i h方向生成网格 
  31. for j = 1:5 
  32. for k = 1:5 
  33. y = x; 
  34. y(i) = y(i) + d(j); 
  35. y(h) = y(h) + d(k); 
  36. mx(j,k) = f(y); 
  37. end 
  38. end 
  39. my = mx; 
  40. for j = 1:5 
  41. my(j,:) = gradient(mx(j,:)) / epsil; 
  42. end 
  43. myy = gradient(my(:,3)) / epsil; 
  44. mz(i,h) = myy(3); 
  45. end 
  46. end 
  47. end 
  48.  
  49. %% 主函数 
  50. % Fletcher-Reeves 共轭梯度法 
  51. function [x xlog] = Newton(f, x0, epsilon) 
  52. % f 目标函数,函数句柄 
  53. % g 梯度函数 函数句柄 
  54. % epsilon 精度要求 
  55. % method 线搜索方法 
  56. k = 0; 
  57. iter = 0; 
  58. maxIt = 1e4; 
  59. n = length(x0); 
  60. while iter <= maxIt 
  61. d1 = - inv(My_Hessian(f,x0)) * My_Gradient(f, x0); 
  62. [alpha tx] = SuccFa(f, 1, x0, d1, 1, epsilon, 1e4); 
  63. x1 = x0 + alpha * d1; 
  64. d2 = My_Gradient(f, x1); 
  65. xlog(iter+1) = norm(d2); 
  66. x = x1; 
  67. x0 = x1; 
  68. if norm(d2) < epsilon 
  69. break 
  70. end 
  71. iter = iter + 1; 
  72. end 
  73. end 
  74.  
  75. function [alphak xlog] = SuccFa(fun, alpha, x0, diff_x, h, epsil, maxIt) 
  76. k = 0; 
  77. xlog = alpha; 
  78. while k <= maxIt 
  79. alphak = alpha + h; 
  80. if fun(x0 + alphak * diff_x) < fun(x0 + alpha * diff_x) 
  81. h = 2 * h; 
  82. alpha = alphak; 
  83. else 
  84. h = - h / 4; 
  85. end 
  86. k = k + 1; 
  87. xlog(k) = alphak; 
  88. if abs(h) < epsil 
  89. break 
  90. end 
  91. end 
  92. end 

测试用例

  1. f = @(x) sin(x(1)) + cos(x(2)); 
  2. x0 = [1, 1]'; 
  3. epsilon = 1e-6; 
  4. [x xlog] = Newton(f, x0, epsilon) 
  5.  
  6. %% 书上的例子 
  7. f = @(x) 2*x(1)^4 - 4 * x(1)^2*x(2) + x(1)^2 + 2* x(2)^2-2*x(1)+5; 
  8. x0 = [0 ,0]'; 
  9. epsilon = 1e-6; 
  10. [x xlog] = Newton(f, x0, epsilon) 

牛顿法的收敛速度比前面的共轭梯度法更快,因为使用了二阶梯度信息以及线搜索方法,但是数值黑塞矩阵的计算比较复杂,如果提前知道黑塞矩阵的具体表达式则可接受.

标签:epsil,md,end,07,22,epsilon,xlog,alpha,x0
From: https://www.cnblogs.com/NEFPHYS/p/17573701.html

相关文章

  • 7/22·afternoon
    1272:【例9.16】分组背包  http://ybt.ssoier.cn:8088/problem_show.php?pid=1272#include<bits/stdc++.h>usingnamespacestd;structqwert{intw,v;}a[13][31];intV,N,T;intcnt[13],f[203];intmain(){cin>>V>>N>>T;for(inti=1......
  • 7.22做题记录
    1//树状数组单点修改和区间查询2#include<bits/stdc++.h>3usingnamespacestd;4intn,m,f[1000005];5intlowbit(intx)6{7returnx&-x;8}9voidadd(intx,intk)10{11while(x<=n)12{13f[x]+=k;14x+=lowb......
  • 「刷题记录」[JSOI2007] 文本生成器
    第一道AC自动机+DP题。题目链接:P4052[JSOI2007]文本生成器-洛谷|计算机科学教育新生态(luogu.com.cn)利用容斥原理的思想,答案就是所有串的数量减去不可读的串的数量。设\(dp\left(i,j\right)\)表示串长为\(i\),在AC自动机上走到编号为\(j\)时不经过单词结......
  • 2023.7.22-假期周进度报告
    本周(7.16-7.22)主要学习大数据相关的最基本知识。下周准备进行休息。周日,进行VMware的下载和虚拟机镜像的下载和安装,完成了VMware的下载和安装,虚拟机的下载和安装,VMnet8虚拟网卡的基本配置,虚拟机主机名和ip地址的配置,遇到了虚拟机镜像下载慢的问题,解决方法是从所看课程中给的资料......
  • 2023/7/22(2)宽搜练习马走日
     #include<bits/stdc++.h>usingnamespacestd;intqwq[12][2]={{1,2},{1,-2},{-1,2},{-1,-2},{-2,-1},{-2,1},{2,1},{2,-1},{2,2},{-2,-2},{2,-2},{-2,2}};intax,ay,bx,by;boolmp[105][105];structnode{intx,y,step;node(){}node(constint......
  • 230722 做题记录 // 网络流二十四题 (1/24)
    知耻而后勇,物极必反。A.星际转移问题http://222.180.160.110:1024/contest/3952/problem/1如果就按照题目给的路线图,我们显然无法考虑到飞船到达的时刻。同时\(n\)和\(m\)又很小,我们就知道了,「人不能两次踏进同一条河流」,1时刻的站\(p\)和2时刻的站\(p\)也不能是......
  • 总结2023-07-22
    求两个数的最小公倍数解题思路,两个数的乘积除以两个数的最大公约数为最小公倍数//packagePTACZW;importjava.util.Scanner;importjava.math.BigInteger;publicclassMain{publicstaticvoidmain(String[]args){Scannerinput=newScanner(Syst......
  • 【大联盟】20230707 xor(xor) CF1456E 【XOR-ranges】
    就我不会*3500/kel题目描述here。题解做法考虑从高位往低位处理,由于有限制的数它的值数确定的,没限制的数值不需要管,因为肯定可以是答案为\(0\)。所以我们考虑区间DP,我们令\(f_{i,l,r,0/1,0/1}\)表示从高往低到第\(i\)位,最左侧\(l\)还有限制,第一个\(0/1\)表示\(x......
  • 7/22上午
    1212LETTERShttp://ybt.ssoier.cn:8088/problem_show.php?pid=1212#include<bits/stdc++.h>usingnamespacestd;intmaxs=0;boola[25][25],b[10005];charc[25][25];intR,S;intx[4]={1,0,-1,0};inty[4]={0,1,0,-1};voiddfs(intm,intn,ints){......
  • 7/22·morning
    1269:【例9.13】庆功会  http://ybt.ssoier.cn:8088/problem_show.php?pid=1269#include<bits/stdc++.h>usingnamespacestd;intn,m;intw[503],v[503],s[503];intdp[6007];intmain(){cin>>n>>m;for(inti=1;i<=n;i++){cin>&......