首页 > 其他分享 >2021/6/8 日常练习

2021/6/8 日常练习

时间:2024-06-08 22:34:10浏览次数:28  
标签:dk Gk 练习 2021 fun x0 Hess gk 日常

一、实验目的

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)])

标签:dk,Gk,练习,2021,fun,x0,Hess,gk,日常
From: https://www.cnblogs.com/Lyh3012648079/p/18239033

相关文章

  • window下的随机数与随机数种子——[MTCTF 2021]Random
    题目 Die  IDA main函数 dword_1B336C 与 v7 ,是两个记录循环次数的计数器红框:加密逻辑,很简单绿框:成功条件,需要满足两个,第一个是 dword_1B336C==43 ,当 dword_1B336C 不等于43的时候进入else,然后需要满足条件 input[v9]==key[v8] 与 v7==42  key......
  • 靶机练习:born2root
    信息收集扫描全端口以发现服务发现端口80端口信息:SecretesCompany/robots.txt/Wordpress-blog访问80端口web服务AboutUs的用户名可以记录下来:MartinHadiJimmyrobots.txt有两个路径:/wordpress-blog/files分别访问一下好像暂时没什么东西,拿用户名可以先......
  • 2024/6/8 日程练习
    实验项目名称:实验四  Web综合应用程序设计 一、实验目的通过使用JavaMVC模式设计简单的数据库管理系统,巩固使用JDBC技术访问数据库的方法,学习使用Java语言对服务器端进行编程,深入理解MVC网站设计模式的基本概念和框架结构。二、实验内容和基本要求从以下列举的四个数据库......
  • 运筹学练习Python精解——运输和指派问题
    练习1如下表的运输问题中总需要量超过总供应量(方框中的数字是单位运费)。假定对销地\(B_1\)、\(B_2\)和\(B_3\)未满足需要量的单位罚款成本是5、3和2,试建立该问题的数学模型,并探讨能否将其转变为产销平衡运输问题。产地\销地B1B2B3供应量A151710A264......
  • 靶机练习:Gitroot
    信息收集扫描全端口以发现服务访问80端口,有hint尝试绑定域名到/etc/vuln,同时提示中存在用户名jen,可以尝试爆破ssh绑定后能访问站点了用wpscan能扫出wordpress的用户名接下来没爆破出密码尝试使用wfuzz扫描子域名wfuzz-c-uhttp://gitroot.vuln-H"HOST:FUZZ.gitroo......
  • Pyramid Vision Transformer, PVT(ICCV 2021)原理与代码解读
    paper:PyramidVisionTransformer:AVersatileBackboneforDensePredictionwithoutConvolutionsofficialimplementation:GitHub-whai362/PVT:OfficialimplementationofPVTseries存在的问题现有的VisionTransformer(ViT)主要设计用于图像分类任务,难以直接用......
  • 【机器学习】TensorFlow 202107090086
    【源代码】importtensorflowastfl2_reg=tf.keras.regularizers.l2(0.1)#设置模型model=tf.keras.models.Sequential([tf.keras.layers.Dense(30,activation='relu',kernel_initializer='he_normal',kernel_regula......
  • ChatGPT-4o在临床医学日常工作、数据分析与可视化、机器学习建模中的技术
    2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5,将人工智能的发展推向了一个新的高度。2023年11月7日,OpenAI首届开发者大会被称为“科技界的春晚”,吸引了全球广大用户的关注,GPT商店更是显现了OpenAI旨在构建AI生态......
  • [COCI2020-2021#2] Sjekira 题解
    题目大意:把一棵树完全分解,每次分解一条边的代价是这条边连接的两个连通块的最大点权之和,求最小代价。逆序模拟,既然题目要求将树完全分解,那我们就每次逆序连接当前权值最小的两个点,也就是贪心的思路。尝试将贪心的值写成一个表达式:$$\sum_{i=1}^na_i+\sum_{(u,v)\inE}\max(a......
  • 信息奥赛练习——3360相邻数之和
    【题目描述】请你编程求出二维数组中某点的相邻数之和。相邻数是指与该点邻接的 88 个元素,若该点在边角位置,则邻接元素相应减少。下图以 44 行 55 列二维数组 a为例:a[2][3]元素的值为 77,其邻接元素为 8,9,10,5,8,6,8,08,9,10,5,8,6,8,0 和为 5454 。再比如:a[1]......