当前位置: 首页 > news >正文

【Matlab算法】粒子群算法求解一维非线性函数问题(附MATLAB代码)

MATLAB求解一维非线性函数问题

  • 前言
  • 正文
  • 函数实现(可视化处理)
    • 可视化结果

前言

一维非线性函数是指函数的自变量和因变量都是一维实数,而且函数的形式是非线性的,也就是不符合线性函数的形式。在一维非线性函数中,自变量和因变量之间的关系通常是曲线状的,而不是直线状的。这种函数形式很常见,可以描述很多实际问题,如物理学、工程学、生物学等领域的各种现象和过程。常见的一维非线性函数包括二次函数、指数函数、对数函数、三角函数等。这些函数形式都不是线性的,其函数值与自变量之间的关系并不满足线性关系,因此需要使用不同的数学方法来求解最优解。
下面几个常见的一维非线性函数的例子:

幂函数:y=x2y=x^2y=x2y=x3y=x^3y=x3y=x4y=x^4y=x4等;
指数函数:y=exy=e^xy=exy=2xy=2^xy=2xy=10xy=10^xy=10x等;
对数函数:y=ln⁡(x)y=\ln(x)y=ln(x)y=log⁡2(x)y=\log_2(x)y=log2(x)y=log⁡10(x)y=\log_{10}(x)y=log10(x)等;
三角函数:y=sin⁡(x)y=\sin(x)y=sin(x)y=cos⁡(x)y=\cos(x)y=cos(x)y=tan⁡(x)y=\tan(x)y=tan(x)等;
双曲函数:y=sin⁡(x)y=\sin(x)y=sin(x)y=cos⁡(x)y=\cos(x)y=cos(x)y=tan⁡(x)y=\tan(x)y=tan(x)等;
逻辑斯蒂函数:y=11+e−xy = \frac{1}{1+e^{-x}}y=1+ex1,常用于分类问题中的概率计算。

这些非线性函数的特点是函数图像不是一条直线,而是具有弯曲或曲线变化的形状,其导数也不是常数而是变化的。在优化问题中,非线性函数的优化往往比线性函数更加复杂和困难。

粒子群算法(Particle Swarm Optimization,PSO) 是一种启发式优化算法,它源于对鸟群捕食行为的研究。在粒子群算法中,被优化的问题被视为一个多维空间中的目标函数,算法通过模拟群体中每个粒子在空间中的搜索行为来寻找目标函数的全局最优解。

每个粒子在搜索空间中的位置表示一个潜在解,其速度表示了搜索方向和步长。每个粒子具有一个适应度值,该适应度值根据目标函数的表现来计算。粒子群算法通过协同粒子的行为来优化目标函数。粒子的速度和位置在每个迭代中被更新,使其朝着群体中的最佳位置和全局最佳位置移动。

粒子群算法的运行过程如下:

  1. 初始化粒子群,包括每个粒子的初始位置和速度,并设置全局最佳位置和全局最佳适应度值为初始值。
  2. 计算每个粒子的适应度值,更新全局最佳位置和全局最佳适应度值。
  3. 更新每个粒子的速度和位置,根据每个粒子当前位置与全局最佳位置之间的差异来调整速度和位置。
  4. 重复步骤23,直到达到指定的停止准则,如达到最大迭代次数或满足收敛要求。

在实践中,粒子群算法经常与其他优化算法结合使用,例如遗传算法、模拟退火等。这些算法的组合可以提高搜索效率和准确性,从而提高优化问题的解决效率。

正文

优化如下的三角函数:y=sin⁡(x)+cos⁡(2x)y=\sin(x)+\cos(2x)y=sin(x)+cos(2x)
其中,xxx 为变量,范围为 [−π,π][-\pi, \pi][π,π]

具体优化步骤如下:

  1. 初始化粒子群:随机生成一些粒子的位置和速度。
  2. 计算每个粒子的适应度:根据粒子的位置计算目标函数值。
  3. 更新全局最优解和个体最优解:记录历史最优解,并更新全局最优解和个体最优解。
  4. 更新粒子的速度和位置:根据全局最优解和个体最优解来更新粒子的速度和位置。
  5. 检查终止条件:检查是否满足终止条件,如果不满足则返回第3步。

在实际的实现中,我们需要选择合适的参数,如粒子数、迭代次数、惯性权重、加速度系数等,以及相应的初始值。此外,我们还需要考虑如何处理边界问题,如何控制算法的收敛速度等。
最后,通过绘制目标函数的图像来观察算法的优化效果,即目标函数值随着迭代次数的变化情况。

函数实现(可视化处理)

%%
clear
close all
warning off
clc
%% 调用粒子群算法求解
x_min = -pi;
x_max = pi;
n_pop = 50;
n_iter = 100;
w = 0.8;
c1 = 1.5;
c2 = 1.5;
[gbest, gbest_val] = pso(@objfun, x_min, x_max, n_pop, n_iter, w, c1, c2);% 输出结果
fprintf('最优解:x = %f,最优值:%f\n', gbest, gbest_val);% 可视化处理
x = linspace(-pi, pi, 1000);
y = sin(x) + cos(2*x);
plot(x, y);
hold on;
plot(gbest, gbest_val, 'ro', 'MarkerSize', 10);
title('PSO for Nonlinear Function Optimization');
xlabel('x');
ylabel('y');
legend('Objective Function', 'Optimal Solution');
hold off;% 目标函数
function y = objfun(x)y = sin(x) + cos(2*x);
end% 粒子群算法
function [gbest, gbest_val] = pso(objfun, x_min, x_max, n_pop, n_iter, w, c1, c2)% 参数设置x_range = x_max - x_min;v_min = -x_range;v_max = x_range;% 初始化粒子pop = x_min + rand(n_pop, 1) * x_range;v = v_min + rand(n_pop, 1) * (v_max - v_min);pbest = pop;pbest_val = objfun(pop);[gbest_val, gbest_idx] = min(pbest_val);gbest = pbest(gbest_idx);% 迭代for i = 1:n_iter% 更新速度和位置r1 = rand(n_pop, 1);r2 = rand(n_pop, 1);v = w*v + c1*r1.*(pbest-pop) + c2*r2.*(gbest-pop);pop = pop + v;% 边界处理pop(pop < x_min) = x_min;pop(pop > x_max) = x_max;% 更新个体历史最优和全局历史最优pbest_val_new = objfun(pop);pbest_update_idx = pbest_val_new < pbest_val;pbest(pbest_update_idx) = pop(pbest_update_idx);pbest_val(pbest_update_idx) = pbest_val_new(pbest_update_idx);[gbest_val_new, gbest_idx_new] = min(pbest_val);if gbest_val_new < gbest_valgbest = pbest(gbest_idx_new);gbest_val = gbest_val_new;endend
end

可视化结果

请添加图片描述

相关文章:

【Matlab算法】粒子群算法求解一维非线性函数问题(附MATLAB代码)

MATLAB求解一维非线性函数问题前言正文函数实现&#xff08;可视化处理&#xff09;可视化结果前言 一维非线性函数是指函数的自变量和因变量都是一维实数&#xff0c;而且函数的形式是非线性的&#xff0c;也就是不符合线性函数的形式。在一维非线性函数中&#xff0c;自变量…...

2023 最新发布超全的 Java 面试八股文,整整 1000道面试题,太全了

作为一名优秀的程序员&#xff0c;技术面试都是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 2023 年的互联网行业竞争越来越严峻&#xff0c;面试也是越来越难&#xff0c;很多粉丝朋友私信希望我出一篇面试专题或…...

产品经理面经|当面试官问你还有什么问题?

相信很多产品经理在跳槽面试的时候&#xff0c;在面试尾声都会遇到这样的环节&#xff0c;面试官会问你有什么问题要问的&#xff0c;一般来说大家都能随时随地甩出几个问题来化解&#xff0c;但其实在这个环节对于应聘者来说也是一个很好的机会来展现自己的能力&#xff0c;甚…...

单链表的基本操作

目录 一.链表的基本概念和结构 二.链表的分类 三.单链表的基本操作 1.创建一个节点 2.打印 3.尾插 4.头插 5.尾删 6.头删 7.查找 8.指定位置插入 9.指定位置删除 10.销毁 一.链表的基本概念和结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结…...

【微信小程序-原生开发】系列教程目录(已完结)

01-注册登录账号&#xff0c;获取 AppID、下载安装开发工具、创建项目、上传体验 https://sunshinehu.blog.csdn.net/article/details/128663679 02-添加全局页面配置、页面、底部导航 https://sunshinehu.blog.csdn.net/article/details/128705866 03-自定义底部导航&#x…...

JavaEE--Thread 类的基本用法(不看你会后悔的嘿嘿)

Thread类是JVM用来管理线程的一个类,换句话说,每个线程都唯一对应着一个Thread对象. 因此,认识和掌握Thread类弥足重要. 本文将从 线程创建线程中断线程等待线程休眠获取线程实例 等方面来进行具体说明. 1)线程创建 方法1:通过创建Thread类的子类并重写run () 方法 class M…...

MySQL数据库基本使用(二)-------数据库及表的增删改查及字符集修改

1.MySQL数据库的使用演示 1.1创建自己的数据库 命令格式如下&#xff08;创建的数据库名称不能与已经存在的数据库重名&#xff09;&#xff1a; mysql> create database 数据库名;例如&#xff1a; mysql> create database atguigudb; #创建atguigudb数据库&#xf…...

互联网摸鱼日报(2023-03-17)

互联网摸鱼日报&#xff08;2023-03-17&#xff09; InfoQ 热门话题 开源新生代的成长之路&#xff1a;从校园到开源&#xff0c;需要迈过哪些挑战&#xff1f; 从 Clickhouse 到 Apache Doris&#xff0c;慧策电商 SaaS 高并发数据服务的改造实践 刚刚&#xff0c;百度文心…...

【前后端】低代码平台Jeecg-Boot 3.2宝塔云服务器部署流程

1 后端 部署流程 修改配置文件 更改数据库、redis的配置。 在system子模块中的target文件夹下生成 jar 包jeecg-boot-module-system-3.2.0.jar。 复制到云服务器 生成数据库 在这里插入图片描述 使用命令运行后端程序 java -jar ./jeecg-boot-module-system-3.2.0.jar宝…...

leetcode todolist

数组 数组的改变、移动 453. 最小移动次数使数组元素相等 665. 非递减数列 283. 移动零 数组的旋转 189. 旋转数组 396. 旋转函数 统计数组中的元素 645. 错误的集合 697. 数组的度 448. 找到所有数组中消失的数字 442. 数组中重复的数据 41. 缺失的第一个正数 数…...

改进YOLO系列 | CVPR2023最新 PConv | 提供 YOLOv5 / YOLOv7 / YOLOv7-tiny 模型 YAML 文件

DWConv是Conv的一种流行变体,已被广泛用作许多神经网络的关键构建块。对于输入 I ∈ R c h w I \in R^{c \times h \times w} I∈...

像ChatGPT玩转Excel数据

1.引言 最近ChatGPT的出现&#xff0c;把人工智能又带起了一波浪潮。机器人能否替代人类又成了最近热门的话题。 今天我们推荐的一个玩法和ChatGPT有点不一样。我们的课题是“让用户可以使用自然语言从Excel查询到自己想要的数据”。 要让自然语言可以从Excel中查数据&#…...

云原生之docker容器监控详解(cAdvisor、node exporter、prometheus)

docker容器监控一、前言二、cAdvisor2.1、安装cAdvisor2.2、使用Prometheus监控cAdvisor2.3、cAdvisor暴露的Prometheus指标三、Node Exporter3.1、安装Node Exporter3.2、指标四、Prometheus4.1、安装4.2、规则配置4.3、报警管理器五、grafana一、前言 cAdvisor源码 node exp…...

<Linux>进程概念

文章目录一、什么是进程1.进程概念2.进程描述 – PCB3.task_struct内容分类二、进程的基本操作1.查看进程2.结束进程3.通过系统调用获取进程标示符4.通过系统调用创建子进程(fork)三、进程状态1.普遍的操作系统状态2.Linux操作系统状态四、两种特殊的进程1.僵尸进程2.孤儿进程五…...

数据结构——顺序表

文章目录&#x1f428;0. 前言&#x1f388;1. 顺序表的概念及定义&#x1fa81;2. 接口的声明&#x1fa84;3. 接口的实现&#x1f345;3.1 为何使用断言&#xff1f;&#x1f352;3.2 初始化与销毁&#x1f353;3.3 尾插与尾删&#x1f349;3.4 头插与头删&#x1f379;3.5 指…...

闪存系统性能优化方向集锦?AC timing? Cache? 多路并发?

1. 从Flash系统的性能提升说起从消费级产品到数据中心企业级场景&#xff0c;NAND Flash凭借其高性能、大容量、低功耗以及低成本等特性大受欢迎&#xff0c;是目前应用最为广泛的半导体非易失存储介质。为了满足业务场景越来越严苛的性能要求&#xff0c;人们想了许多方法来提…...

【每日一题】——网购

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e2; 读书笔记 &#x1f7e1; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…...

百度终于要出手了?文心一言

文心一言 百度全新一代知识增强大语言模型&#xff0c;文心大模型家族的新成员&#xff0c;能够与人对话互动&#xff0c;回答问题&#xff0c;协助创作&#xff0c;高效便捷地帮助人们获取信息、知识和灵感。 前几天炒的风风火火的ChatGPT&#xff0c;虽然 ChatGPT 很强大&a…...

8年Java架构师面试官教你正确的面试姿势,10W字面试题带你成功上岸大厂

从最开始的面试者变成现在的面试官&#xff0c;工作多年以及在面试中&#xff0c;我经常能体会到&#xff0c;有些面试者确实是认真努力工作&#xff0c;但坦白说表现出的能力水平却不足以通过面试&#xff0c;通常是两方面原因&#xff1a; 1、“知其然不知其所以然”。做了多…...

Mybatis-Plus详解

简介MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。特性&#xff08;官网提供&#xff09;无侵入&#xff1a;只做增强…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...

Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集

目录 一、引言&#xff1a;当爬虫遭遇"地域封锁"二、背景解析&#xff1a;分布式爬虫的两大技术挑战1. 传统Scrapy架构的局限性2. 地域限制的三种典型表现 三、架构设计&#xff1a;Scrapy-Redis 代理池的协同机制1. 分布式架构拓扑图2. 核心组件协同流程 四、技术实…...

npm install 相关命令

npm install 相关命令 基本安装命令 # 安装 package.json 中列出的所有依赖 npm install npm i # 简写形式# 安装特定包 npm install <package-name># 安装特定版本 npm install <package-name><version>依赖类型选项 # 安装为生产依赖&#xff08;默认&…...