基于非精确线搜索算法三准则实现步长因子的求解

news2024/11/24 4:34:10

0、前言

             朋友请我帮他做一个他们老师留的课堂作业,就自学了一下,我给他做了A准则和G准则的,W准则的留给他自己改了,也没有多难就是换一个判断条件就行了。

一、问题描述

二、要求

三、代码

3.1A准则加回退法
%帮别人做的小作业
clc
clear all
close all
t=-5:0.01:5;
[x111,y111] = meshgrid(t);
Z=100*(x111.^2-y111).^2+(x111-1).^2;
% f1=@(x1,y1) 100*(x1.^2-y1).^2+(x1-1).^2;%题中函数
% Z=f1(x11,y11);
% plot3(x11,y11,Z,'Color','#4F4F2F','Linewidth',1.5);
mesh(x111,y111,Z);
axis([-5 5 -5 5 -10 2000])%设置坐标范围
title('Line in 3-D Space');%标题
xlabel('X');ylabel('Y');zlabel('Z');%x,y,z轴标签
grid on;%开启网格线
hold on
f=@(x) 100*(x(1).^2-x(2)).^2+(x(1)-1).^2;%题中函数
grad_f=@(x) [400*x(1)*(x(1)^2-x(2))+2*(x(1)-1) -200*(x(1)^2-x(2)) ];%对题中函数求梯度
x=[-1; 1];%当前点
x_next(1,:)=x;
f_next(1)=f(x);
p=[1; -2];%搜索方向
c=0.1;%Armijo准则中的常数
c1=0.5;
max_iter=100;%最大迭代次数
max_alpha=0.005;%步长因子的最大值
alpha = 1; % 初始化步长因子
for iter = 1:max_iter
x_1=x;
x_next(iter+1,:)=x+alpha.* p;%下一个下降点的存储
x=x+alpha.* p%下一个下降点
f_next(iter+1)=f(x);%下一个下降点对应的函数值
scatter3(x_next(iter,1), x_next(iter,2), f_next(iter), 10,"yellow" , 'filled');
pause(1)
hold on; % 保持图形以添加更多的散点
if f(x) <= f(x_1) +c * alpha * grad_f(x_1)'* p'
break;
else
alpha = alpha*c1; % 回退法缩小步长因子
end
if alpha < max_alpha
break;
end
end
alpha%第三问下降方向的迭代步长的值
x_next(iter+1,:)=x+alpha.* p;
x_next(iter+1,:)%第三问下一个迭代点的坐标
x_next(iter+1,:)=x+alpha.* p;
x_next(iter+1,:)%第三问下一个迭代点的坐标
f_next(iter+1)=f(x_next(iter+1,:));
f_next(1,iter+1)
3.2G准则加回退法
%帮别人做的小作业
clc
clear all
close all

t=-10:0.01:10;
[x111,y111] = meshgrid(t);
Z=100*(x111.^2-y111).^2+(x111-1).^2;
% f1=@(x1,y1) 100*(x1.^2-y1).^2+(x1-1).^2;%题中函数
% Z=f1(x11,y11);
% plot3(x11,y11,Z,'Color','#4F4F2F','Linewidth',1.5);
mesh(x111,y111,Z);
axis([-10 10 -10 10 -10 2000])%设置坐标范围
title('Line in 3-D Space');%标题
xlabel('X');ylabel('Y');zlabel('Z');%x,y,z轴标签
grid on;%开启网格线
hold on
f=@(x) 100*(x(1).^2-x(2)).^2+(x(1)-1).^2;%题中函数
grad_f=@(x) [400*x(1)*(x(1)^2-x(2))+2*(x(1)-1) -200*(x(1)^2-x(2)) ];%对题中函数求梯度
x=[-1; 1];%当前点
x_next(1,:)=x;
f_next(1)=f(x);
p=[1; -2];%搜索方向
c=0.001;%Armijo准则中的常数
c1=0.5;
max_iter=100;%最大迭代次数
max_alpha=0.005;%步长因子的最大值
alpha = 1;  % 初始化步长因子
for iter = 1:max_iter
        x_1=x;
        x_next(iter+1,:)=x+alpha.* p;%下一个下降点的存储
        x=x+alpha.* p%下一个下降点
        f_next(iter+1)=f(x);%下一个下降点对应的函数值
        scatter3(x_next(iter,1), x_next(iter,2), f_next(iter), 10,"yellow" , 'filled');
%         pause(1)延时一秒看数据动态变化
    hold on; % 保持图形以添加更多的散点
    f(x) <= f(x_1) +c * alpha * grad_f(x_1)'* p'
    A1=ans;
    f(x) >= f(x_1) +(1-c) * alpha * grad_f(x_1)'* p'
    A2=ans;
        if  all(A1,'all')&&all(A2,'all')
            break;
        else
            alpha = alpha*c1;  % 回退法缩小步长因子
        end
        if alpha < max_alpha
            break;
        end
end
alpha%第三问下降方向的迭代步长的值
x_next(iter+1,:)=x+alpha.* p;
x_next(iter+1,:)%第三问下一个迭代点的坐标
f_next(iter+1)=f(x_next(iter+1,:));
f_next(1,iter+1)

四、现象展示

         每次的下降点及函数的图像如图所示,下降点我用了黄色表示你们也可以换颜色,函数图像我是把这个曲面函数给画了出来。要求三中的迭代步长见下面这一句

alpha%第三问下降方向的迭代步长的值

 下一个迭代点的坐标为多少,以及下一 步的函数值为多少,见下面这两句

x_next(iter+1,:)=x+alpha.* p;

x_next(iter+1,:)%第三问下一个迭代点的坐标

f_next(iter+1)=f(x_next(iter+1,:));

f_next(1,iter+1)

4.1 A准则加回退法

4.2 G准则加回退法

五 总结 

这东西没难度,W准则的我就不写了留给读者们在我代码基础上改吧,如果有问题了可以加微信联系,我会尽力解答的。研究生阶段太忙了一般没时间来csdn看评论。微信联系方式每篇博文下面的微信名片里面都有。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

『MySQL快速上手』-⑤-数据类型

文章目录 1.数据类型有哪些2.数值类型2.1 tinyint 类型2.2 bit 类型2.3 小数类型2.3.1 float2.3.2 decimal 3.字符串类型3.1 char3.2 varchar3.2 char 和 varchar 比较 4.日期和时间类型5.enum和set 1.数据类型有哪些 MySQL支持多种数据类型&#xff0c;这些数据类型可用于定义…

第二证券:“闻”A股:注册制走深走实是活跃市场制度保障

不久前举办的中心金融工作会议明确要求“推动股票发行注册制走深走实”&#xff0c;无疑为本钱商场活泼进一步夯实制度保证。 上市公司是本钱商场的基石&#xff0c;其质量是决议本钱商场长期健康展开的重要因素之一。作为牵一发而动全身的重要革新&#xff0c;注册制的实施逐…

Pycharm加载项目时异常,看不到自己的项目文件

最近看到一个朋友问&#xff0c;他把项目导入pycharm为什么项目里的包不在项目里显示&#xff0c;只在projects file里显示&#xff1f;问题截图如下&#xff1a; Project里看不到自己的项目文件 只能在Project Files里看到自己的项目文件 问题解答 我也是偶然发现的这个方案…

CV计算机视觉每日开源代码Paper with code速览-2023.11.6

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【点云3D目标检测】&#xff08;NeurIPS2023&#xff09;…

NR SRS carrier switching

这篇看下SRS carrier switching的内容,这个feature 最早是LTE上提出的,在NR R15就引入了。个人没见过支持这个feature的UE,不过还是简单看下。 下面内容参照的是R17版本协议,顺序是背景->相关IE的配置结构及含义->DCI format 2_3->38.214中有关SRS carrier swtich…

代码随想录算法训练营第四十六天丨 动态规划part09

198.打家劫舍 思路 如果刚接触这样的题目&#xff0c;会有点困惑&#xff0c;当前的状态我是偷还是不偷呢&#xff1f; 仔细一想&#xff0c;当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 所以这里就更感觉到&#xff0c;当前状态和前面状态会有一种依赖关系…

使用数据分析,识别设备异常

设备健康监测系统在工业领域中扮演着至关重要的角色&#xff0c;它能够帮助企业及时发现设备异常&#xff0c;预防故障&#xff0c;提高设备使用寿命和生产效率。而异常诊断技术则是设备健康监测系统中的核心部分&#xff0c;能够实现对设备异常情况的准确判断。根据设备状态数…

05预测识别-依托YOLO V8进行训练模型的识别——对视频中的目标进行跟踪统计

上文中详细介绍了如何对视频进行抽帧,并对帧的图像进行目标识别。但在日常工作中,我们也会遇到需要对目标进行跟踪统计的情况,比如我们需要连续统计某一类目标有多少个的时候,如果单纯从帧中抽取图像的话,系统将无法判断是否为同一目标,从而造成目标数量统计的重复,导致…

研发效能认证学员作品:持续集成与持续部署:软件高质量的关键丨IDCF

作者&#xff1a;李明君&#xff08;现就职某金融机构&#xff09; 研发效能&#xff08;DevOps&#xff09;工程师&#xff08;中级&#xff09;认证 在当今数字化时代&#xff0c;软件开发已经成为几乎所有行业的核心。随着市场的快速变化和客户需求的不断演进&#xff0c;软…

三国志14信息查询小程序(历史武将信息一览)制作更新过程06-复现小程序

0&#xff0c;所需文件 所需全部文件下载 文件总览&#xff1a; 代码&#xff1a; 数据库&#xff1a; 1&#xff0c;前期准备 假定你已经看过前面的文章&#xff0c;并完成了下列准备&#xff1a; &#xff08;1&#xff09;一台有公网IP的云服务器&#xff0c;服务器上…

day63--单调栈3

第一题&#xff1a;柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 直接单调栈&#xff1a; 接雨水利用的是3个柱子形成一个凹槽…

Power Apps-使用用户信息

插入一个文本组件&#xff0c;点击该组件&#xff0c;点击右侧边栏中的文本&#xff0c;在上方函数中写入如下内容就可以获取到用户信息了 "Hello!"&User().FullName//字符串拼接

华为交换机端口 access、trunk和hybrid收发数据规则

文章目录 1. 三个端口类型处理数据帧的汇总表2. access 端口3. trunk端口4. Hybrid 端口&#xff08;交换机的默认端口类型&#xff09;常用命令 1. 三个端口类型处理数据帧的汇总表 端口类型收到不带VLAN标签的帧的处理规则收到带VLAN标签的帧的处理规则发送帧时的处理规则用…

利用AI快速跨过新手区:用DevChat编写Python程序-CSV导入TDengine

还在用百度搜索编程吗&#xff1f; 直接上 AI&#xff0c;帮助小白快速跨过新手区。 以下用一个物联网最常见的场景做示例演示如何利用 AI 快速编程。 ChatGPT4 是目前最火的 AI 了&#xff0c;但是国内却用不了。不过现在新出的 DevChat 可以让大家尝鲜一番。 以下介绍来自B…

rabbitmq入门学习

写在前面 本文看下rabbit mq的基础概念以及使用。 1&#xff1a;简单介绍 为了不同进程间通信的解耦&#xff0c;出现了消息队列&#xff0c;为了规范消息队列的具体实现&#xff0c;Java制定了jms规范&#xff0c;这是一套基于接口的规范&#xff0c;因此是绑定语言的&…

Xcode15更新内容

参考博客&#xff1a; 【WWDC 2023】Xcode 15 更新内容 文章目录 1. xcode15起&#xff0c;项目内创建的图片可以使用点语法访问2.2. UIKit项目也可以使用预览功能3. Xcode新增标签功能4.Log分类 1. xcode15起&#xff0c;项目内创建的图片可以使用点语法访问 2.2. UIKit项目也…

台达PLC和触摸屏之间无线MODBUS通讯

今天&#xff0c;我们来一起学下下台达PLC与触摸屏之间无线通信的实现方法。其中触摸屏作为主站&#xff0c;台达PLC作为从站&#xff0c;并采用日系PLC专用无线通讯终端DTD435MC&#xff0c;作为实现无线通讯的硬件设备。 台达PLC和触摸屏通讯关键是对于通讯参数的设置。 触…

C++入门学习(4)引用 (讲解拿指针比较)

上期回顾 在学习完函数重载之后&#xff0c;我们可以使用多个重名函数进行操作&#xff0c;会发现C真的是弥补了好多C语言的不足之处&#xff0c;真的不禁感概一下&#xff0c;时代的进步是需要人去做出改变的&#xff0c;而不是一味的使用啊&#xff01;所以我们今天继续学一下…

从白日梦到现实:推出 Elastic 的管道查询语言 ES|QL

作者&#xff1a;George Kobar, Bahubali Shetti, Mark Settle 今天&#xff0c;我们很高兴地宣布 Elastic 的新管道查询语言 ES|QL&#xff08;Elasticsearch 查询语言&#xff09;的技术预览版&#xff0c;它可以转换、丰富和简化数据调查。 ES|QL 由新的查询引擎提供支持&am…

企业如何通过CRM系统赢得客户?

在CRM客户管理系统中&#xff0c;我们可以将培养客户关系简单理解为提供良好的客户体验。这对于企业来说非常重要&#xff0c;不仅可以赢得客户实现成交&#xff0c;更可以塑造口碑&#xff0c;带来更多的新客户。下面我们说说&#xff0c;如何通过CRM系统快速赢得客户&#xf…