​✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。

🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室

 👇 关注我领取海量matlab电子书和数学建模资料 

🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、笃行之,是为:博学慎思,明辨笃行。

🔥 内容介绍

一、引言

分数阶混沌系统由于其独特的动力学特性,在众多领域如通信、图像处理、生物医学等展现出巨大的应用潜力。准确地辨识分数阶混沌系统的结构和参数,对于深入理解其动力学行为以及实现相关应用至关重要。基于时域数据的稀疏辨识方法为解决这一问题提供了有效的途径,它能够从观测到的时域数据中挖掘出系统的本质特征,以稀疏表示的形式确定系统的模型。

二、分数阶混沌系统基础

(一)分数阶微积分

分数阶微积分是描述分数阶混沌系统的核心理论。与传统整数阶微积分不同,分数阶微积分能捕捉系统的非局部和记忆特性。常见的分数阶导数定义包括 Riemann - Liouville、Caputo 等。以 Caputo 分数阶导数为例,对于函数 y(t),其α阶导数定义为:

三、稀疏辨识的必要性与挑战

(一)必要性

  1. 模型简洁性:实际应用中,我们希望用尽可能简洁的模型来描述分数阶混沌系统。稀疏辨识能够从众多可能的模型项中筛选出最重要的部分,以稀疏表示的形式构建系统模型,避免过拟合,提高模型的泛化能力。

  2. 物理可解释性:稀疏模型中的非零项往往对应着系统的关键动力学特征,有助于我们理解系统的内在机制,为实际应用提供物理层面的解释。

(二)挑战

  1. 分数阶导数的复杂性:分数阶导数的非局部性和积分运算使得基于其的系统辨识变得复杂。与整数阶系统相比,分数阶混沌系统的动力学方程包含复杂的分数阶微积分运算,增加了参数估计和模型结构确定的难度。

  2. 数据噪声影响:实际采集的时域数据不可避免地包含噪声。噪声会干扰系统动力学特征的提取,使得在稀疏辨识过程中准确区分真实模型项和噪声引起的伪项变得困难,从而影响辨识结果的准确性。

四、基于时域数据的稀疏辨识方法

(一)数据预处理

  1. 降噪处理:为减少噪声对辨识结果的影响,首先对采集到的时域数据进行降噪处理。常见的方法包括滤波技术,如低通滤波、小波滤波等。以小波滤波为例,它能够将时域信号分解到不同频率子带,通过对噪声所在子带的系数进行阈值处理,有效去除噪声,保留信号的主要特征。

  2. 数据归一化:将时域数据进行归一化处理,使不同变量的数据在相同的尺度范围内。这有助于在辨识过程中平衡各变量的影响,提高算法的稳定性和收敛速度。例如,可以采用最小 - 最大归一化方法,将数据映射到[0,1]区间。

⛳️ 运行结果

📣 部分代码

%% Author : TAO ZHANG  * zt1996nic@gmail.com *

% Created Time : 2023-05-11 08:58

% Last Revised : TAO ZHANG ,2023-06-01

% Remark : Library of Parametric oscillator or Lorenz and so on

function [Theta,Sym]=LIBA(X,X_OrderMax,Trig_OrderMax,nonsmooth_OrderMax)

% 数据维度

[DataN,N_X]=size(X);

% 库对应的符号表示  存储符号

Sym_X=sym('x',[N_X,1]);

Sym_sin=sym('sin');

Sym_cos=sym('cos');

Sym_sign=sym('sign');

Theta=[];

%% 常数项表示

% Index=1;

% Theta(:,Index)=ones(DataN,1);

% Sym{1,Index}=1;

Index=0;

%% 位移代数表示

%一阶

if X_OrderMax>=1

    for i=1:N_X

        Index=Index+1;

        Theta(:,Index)=X(:,i);

        Sym{1,Index}=Sym_X(i,1);

    end

end

%二阶

if X_OrderMax>=2

    for i=1:N_X

        for j=i:N_X

            Index=Index+1;

            Theta(:,Index)=X(:,i).*X(:,j);

            Sym{1,Index}=Sym_X(i,1)*Sym_X(j,1);

        end

    end

end

%三阶

if X_OrderMax>=3

    for i=1:N_X

        for j=i:N_X

            for k=j:N_X

                Index=Index+1;

                Theta(:,Index)=X(:,i).*X(:,j).*X(:,k);

                Sym{1,Index}=Sym_X(i,1)*Sym_X(j,1)*Sym_X(k,1);

            end

        end

    end

end

%四阶

if X_OrderMax>=4

    for i=1:N_X

        for j=i:N_X

            for k=j:N_X

                for m=k:N_X

                    Index=Index+1;

                    Theta(:,Index)=X(:,i).*X(:,j).*X(:,k).*X(:,m);

                    Sym{1,Index}=Sym_X(i,1)*Sym_X(j,1)*Sym_X(k,1)*Sym_X(m,1);

                end

            end

        end

    end

end

%五阶

if X_OrderMax>=5

    for i=1:N_X

        for j=i:N_X

            for k=j:N_X

                for m=k:N_X

                    for p=m:N_X

                        Index=Index+1;

                        Theta(:,Index)=X(:,i).*X(:,j).*X(:,k).*X(:,m).*X(:,p);

                        Sym{1,Index}=Sym_X(i,1)*Sym_X(j,1)*Sym_X(k,1)*Sym_X(m,1)*Sym_X(p,1);

                    end

                end

            end

        end

    end

end

%% 三角函数表示

% sinx cosx

if Trig_OrderMax>=1

    for i=1:N_X

        Index=Index+1;

        Theta(:,Index)=sin(X(:,i));

        Sym{1,Index}=Sym_sin*Sym_X(i,1);

    end

    for i=1:N_X

        Index=Index+1;

        Theta(:,Index)=cos(X(:,i));

        Sym{1,Index}=Sym_cos*Sym_X(i,1);

    end

end

%% 非光滑表示

% sign 

if nonsmooth_OrderMax>=1

    for i=1:N_X

        Index=Index+1;

        Theta(:,Index)=sign(X(:,i));

        Sym{1,Index}=Sym_sign*Sym_X(i,1);

    end

end

🔗 参考文献

🍅更多免费数学建模和仿真教程关注领取

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐