时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解

目录

    • 时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解
      • 效果一览
      • 基本介绍
      • 程序设计
      • 参考资料

效果一览

时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解_第1张图片
时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解_第2张图片

时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解_第3张图片
时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解_第4张图片
时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解_第5张图片
时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解_第6张图片

基本介绍

PSO-VMD粒子群算法PSO优化VMD变分模态分解 可直接运行 分解效果好 适合作为创新点(Matlab完整源码和数据),适应度函数为样本熵
1.利用粒子群算法优化vmd中的参数k、a,分解效果好,包含边际谱、频率图、收敛曲线等图,满足您的需求,使用者较少,适合作为创新点。
2.包含VMD超参数优化迭代过程图,凸显每次迭代过程的变化。
3.粒子群算法(PSO)是一种群智能优化算法,具有收敛速度快、寻优能力强等优点。
4.数据为excel数据,方便替换,运行主程序main即可,可直接运行matlab程序。

程序设计

  • 完整源码和数据获取方式私信博主回复:Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解

%% 定义粒子群算法参数
% N 种群 T 迭代次数 
%% 随机初始化种群
D=dim;                   %粒子维数
c1=1.5;                 %学习因子1
c2=1.5;                 %学习因子2
w=0.8;                  %惯性权重

Xmax=ub;                %位置最大值
Xmin=lb;               %位置最小值
Vmax=ub;                %速度最大值
Vmin=lb;               %速度最小值
%%
%%%%%%%%%%%%%%%%初始化种群个体(限定位置和速度)%%%%%%%%%%%%%%%%

x=rand(N,D).*(Xmax-Xmin)+Xmin;
v=rand(N,D).*(Vmax-Vmin)+Vmin;
%%%%%%%%%%%%%%%%%%初始化个体最优位置和最优值%%%%%%%%%%%%%%%%%%%
p=x;
pbest=ones(N,1);
for i=1:N
    pbest(i)=fobj(x(i,:)); 
end
%%%%%%%%%%%%%%%%%%%初始化全局最优位置和最优值%%%%%%%%%%%%%%%%%%
g=ones(1,D);
gbest=inf;
for i=1:N
    if(pbest(i)<gbest)
        g=p(i,:);
        gbest=pbest(i);
    end
end
%%%%%%%%%%%按照公式依次迭代直到满足精度或者迭代次数%%%%%%%%%%%%%
for i=1:T
    i
    for j=1:N
        %%%%%%%%%%%%%%更新个体最优位置和最优值%%%%%%%%%%%%%%%%%
        if (fobj(x(j,:))) <pbest(j)
            p(j,:)=x(j,:);
            pbest(j)=fobj(x(j,:)); 
        end
        %%%%%%%%%%%%%%%%更新全局最优位置和最优值%%%%%%%%%%%%%%%
        if(pbest(j)<gbest)
            g=p(j,:);
            gbest=pbest(j);
        end
        %%%%%%%%%%%%%%%%%跟新位置和速度值%%%%%%%%%%%%%%%%%%%%%
        v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))...
            +c2*rand*(g-x(j,:));
        x(j,:)=x(j,:)+v(j,:);
        %%%%%%%%%%%%%%%%%%%%边界条件处理%%%%%%%%%%%%%%%%%%%%%%
        if length(Vmax)==1
            for ii=1:D
                if (v(j,ii)>Vmax)  |  (v(j,ii)< Vmin)
                    v(j,ii)=rand * (Vmax-Vmin)+Vmin;
                end
                if (x(j,ii)>Xmax)  |  (x(j,ii)< Xmin)
                    x(j,ii)=rand * (Xmax-Xmin)+Xmin;
                end
            end           
        else
            for ii=1:D
                if (v(j,ii)>Vmax(ii))  |  (v(j,ii)< Vmin(ii))
                    v(j,ii)=rand * (Vmax(ii)-Vmin(ii))+Vmin(ii);
                end
                if (x(j,ii)>Xmax(ii))  |  (x(j,ii)< Xmin(ii))
                    x(j,ii)=rand * (Xmax(ii)-Xmin(ii))+Xmin(ii);
                end
            end
        end
            
    end

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/129215161
[2] https://blog.csdn.net/kjm13182345320/article/details/128105718

你可能感兴趣的:(时序分解,PSO-VMD,粒子群算法优化,变分模态分解,时间序列,信号分解)