我们这届的题目如下,下面是一些自己的小想法供大家参考。

第二篇大连理工大学 2021年最优化方法大作业(2)_JiangTesla的博客-CSDN博客

第二题在这大连理工大学2021最优化方法大作业(3)_JiangTesla的博客-CSDN博客

针对2022年的题目,做了个补充大连理工大学2022上半年最优化方法大作业_Jiang_Tesla的博客-CSDN博客

文章目录

  • 一、不精确一维线搜素-采用Wolfe-Powell准则
  • 二、最速下降法
  • 三 实现效果

一、不精确一维线搜索-采用Wolfe-Powell准则

要求的四个算法中,三个需要用到一维线搜索,实际算法中往往采用不精确搜索,题目要求采用Wolfe-Powell准则,这个准则就是,给定c1,c2两个常数,要求λ满足两个方程(大工的教材有P170)也就是我下面画的框图的两个判断条件,下面的流程图我是采用书上的直接法画的,通过看这个图,就可以开始编写我们的函数了。

可以看出,输入:初始点,方向,目标函数,目标函数梯度

常数:c1,c2,β1,β2,a,b

输出:λ

所以我们就可以写出采用Wolfe-Powell准则搜素λ的代码,用MATLAB实现

%这是题目的目标函数
function f = fun(x)
f = 10*(x(1)-1)^2 + (x(2)+1)^4;
end%这是题目目标函数的梯度,手算比计算机求导运行速度要快
function g = gradient(x)g = zeros(1,2); g(1)=20*(x(1)-1); g(2) = 4*(x(2)+1)^3;
end %wolfe-powell实现函数
%xk为起始点坐标,dk为搜索方向
function lamda = wolfe_powell(xk,dk)%对基本常数进行设置
c1 = 0.1;c2=0.5;
a = 0; b =Inf;
beita1 = 2;
beita2 = 1/2;
lamda = 1;%进入循环体
while(1)%判断是否符合条件1if ~(fun(xk+lamda*dk)-fun(xk) <= c1*lamda*gradient(xk)*dk)b = lamda;lamda = (lamda + a)*beita2continue;end
%判断是否符合条件2if ~(gradient(xk+lamda*dk)*dk >= c2*gradient(xk)*dk)a = lamda;lamda = min([beita1*lamda,(b+lamda)*beita2]);continue;endbreak;
end
end

二、最速下降法


书上有现成的流程图,我就不画了

可以看出 输入:精度ε,初始点x0

输出:最优解xk

写出代码如下

function start_zuisu(x0,eps) gk = gradient(x0);%目标函数梯度res = norm(gk);%梯度模长k = 0; while (res > eps && k < 2000)  %循环条件&&防止死循环,最多算2000次fprintf('The %d-th iteration, the residual is %f\n',k,res); %记录迭代次数fprintf('x=[%f,%f],min(f):%f\n',x0(1),x0(2),fun(x0));fprintf('**********************************************\n');dk = (-gk).'; %需要转置lamda1 = wolfe_powell(x0,dk);%调用上面的一维搜索函数x0 = x0 + lamda1*dk;gk = gradient(x0);res = norm(gk);k = k+1;endfprintf('The %d-th iteration, the residual is %f\n',k,res); fprintf('x=[%f,%f],min(f):%f\n',x0(1),x0(2),fun(x0));
end

三、实现效果

将上面代码写在一起,并且加上题目起始点与误差,即可得到结果,附上整体代码

x = [0;0];%起始点
eps = 0.0001;%精度
start_zuisu(x,eps);%下面是上面写过的函数了function f = fun(x)
f = 10*(x(1)-1)^2 + (x(2)+1)^4;
endfunction g = gradient(x)g = zeros(1,2); g(1)=20*(x(1)-1); g(2) = 4*(x(2)+1)^3;
end function lamda = wolfe_powell(xk,dk)
c1 = 0.1;c2=0.5;
a = 0; b =Inf;
beita1 = 2;
beita2 = 1/2;
lamda = 1;
while(1)if ~(fun(xk+lamda*dk)-fun(xk) <= c1*lamda*gradient(xk)*dk)b = lamda;lamda = (lamda + a)*beita2;continue;endif ~(gradient(xk+lamda*dk)*dk >= c2*gradient(xk)*dk)a = lamda;lamda = min([beita1*lamda,(b+lamda)*beita2]);continue;endbreak;
end
endfunction start_zuisu(x0,eps) gk = gradient(x0);res = norm(gk);k = 0; while (res > eps && k <=2000)  fprintf('The %d-th iteration, the residual is %f\n',k,res); fprintf('x=[%f,%f],min(f):%f\n',x0(1),x0(2),fun(x0));fprintf('**********************************************\n');dk = (-gk).';lamda1 = wolfe_powell(x0,dk);x0 = x0 + lamda1*dk;gk = gradient(x0);res = norm(gk);k = k+1;endfprintf('The %d-th iteration, the residual is %f\n',k,res); fprintf('x=[%f,%f],min(f):%f\n',x0(1),x0(2),fun(x0));
end

后面的方法大同小异,后续更新。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

大连理工大学 2021年最优化方法大作业(1)相关推荐

  1. 大连理工大学2022上半年最优化方法大作业

    收到校友的提问,这次的题目跟我当时不太一样,要求的精确线搜索,而且维数很高,之前的代码需要修改.为此专门写了这个博客,时间仓促,可能会有问题,有啥问题欢迎私信和评论,由于我要做其他事情,其他的请读者看 ...

  2. 大连理工大学2021最优化方法大作业(3)

    前面无约束优化问题的解法在这:大连理工大学 2021年最优化方法大作业(1)_JiangTesla的博客-CSDN博客 大连理工大学 2021年最优化方法大作业(2)_JiangTesla的博客-CS ...

  3. 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc

    昆明理工大学大一C语言大作业题目 综合性实践排序求平均值(包括将数拆散求最大最小值).函数ReadDat()随机产生100个存放到数组aa中00个jsSort()函数的功能是:进行降序排列.最后调用函 ...

  4. 哈工大 2021春 计算机系统 大作业程序人生

    计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算机 学 号 1190200828 班 级 1936601 学 生 赵英帅 指 导 教 师 刘宏伟 计算机科学与技术学院 202 ...

  5. 2021哈工大计算机系统大作业——程序人生-Hello’s P2P

    计算机系统 大作业 题     目 程序人生-Hello's P2P 计算机科学与技术学院 2021年6月 摘  要 本文介绍了hello的整个生命过程.利用gcc,gdb,edb,readelf,H ...

  6. 哈工大2021春计算机系统大作业 程序人生-Hello’s P2P

          计算机系统 大作业 题     目 程序人生-Hello's P2P 专       业 计算机类 学     号 1190200613 班     级 1903004 学       生 ...

  7. 哈工大 2021春 计算机系统 大作业 L190201101-朴仁洪

    @ 计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算机类 学 号 L190201101 班 级 1903005 学 生 朴仁洪 指 导 教 师 史先俊 计算机科学与技术学院 ...

  8. 2021春计算机系统大作业

    计算机系统 大作业 题     目 程序人生-Hello's P2P 专       业 计算学部 学    号 1190201420 班    级 1903004 学       生 马立凡 指 导 ...

  9. 大连理工大学概率与统计上机作业

    第一次上机作业 1 a=normrnd(0,1,[1 1000]) meana=mean(a) vara=var(a) hist(a) 2.a b=poissrnd(2,1,100) meanb=me ...

最新文章

  1. 2018程序员必备碎片化学习工具(年度精选)
  2. 明明安装了模块,还是出现 错误 ImportError: No module named ‘pandas‘ 原因LINUX上安装了多个python环境,将脚本中python 改为python3问题解
  3. 华中科技大学计算机考研408,【21计算机考研】华中科技大学不改408了?燕山大学官宣408!...
  4. sql 只取一条记录_后端程序员必备:书写高质量SQL的30条建议
  5. 两个有序数组的中位数(第k大的数)
  6. [唐胡璐]Java操作Sql Server 2008数据库
  7. 数据分析师可不是啥好工作
  8. Git简介及其下载 安装 卸载
  9. json字符串导入oracle,如何在Oracle中将JSON字符串转换为JSON
  10. Thread.join()
  11. windows操作笔记
  12. 用Python把github上非常实用的数据全部抓取下来! 留给自己备用
  13. Laravel核心解读--HTTP内核
  14. oracle12c报ora28000,ORA-28000: the account is locked用户锁定问题排查解决
  15. 常用类 (一) ----- Arrays数组工具类
  16. 如何用 200 行 JavaScript 代码实现人脸检测?
  17. 基于python的图像识别
  18. 第八十六章 Caché 函数大全 $ZDATETIMEH 函数
  19. 如何将一个数字转换为字符串并且按照指定格式显示?--TO_CHAR
  20. 学校教务管理系统(第二弹

热门文章

  1. linux内核arp访欺骗配置,Linux防止ARP欺骗攻击
  2. linux防火墙arp攻击,解决linux下arp攻击的方法
  3. Java语言的26个细节
  4. 口语中使用频率相当高的俚语
  5. JavaScript专题(五)深浅拷贝
  6. 小心SKYPE骗局!!!
  7. 阿里云 qW3xT.4 挖矿病毒问题
  8. 获取ShellExecuteEx执行后的进程pid
  9. 视频教程-七天学会Photoshop视频教程-Photoshop
  10. SIGPIPE and EPIPE