精华内容
下载资源
问答
  • 相空间重构

    2017-10-10 21:37:10
    相空间重构 分形维数 主要用于故障诊断模式识别等领域
  • 相空间重构模型

    2020-11-29 17:43:05
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、像空间...示例:相空间重构是一种:由已知的时间序列,来恢复并刻画原动力系统的方法。 二、使用步骤 1.引入库 代码如下(示例)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


    前言

    对于混沌时间序列,无论是:
    1.混沌不变量的计算,
    2.混沌模型的建立
    还是:
    3.预测,
    都在相空间中进行。
    因此:相空间重构是混沌时间序列处理中的重要步骤。


    注意:
    1. 这里的时间序列由一个确定的非线性动力系统产生

    一、像空间重构是什么?

    相空间重构是一种:由已知的时间序列,来恢复并刻画原动力系统的方法。

    简而言之:由时间序列恢复原系统的方法

    二、相空间重构的方法

    最常用的方法是利用takens的延迟嵌入定理:
    对于无限长,无噪声的dd^{'}维混沌吸引子的一维标量时间序列{x(i),i=1,,n} \left\{ \text{x}\left( \text{i} \right) ,\text{i}=1,\cdots ,\text{n} \right\},都可以在拓扑不变的意义下找到一个dd维的嵌入相空间,如果维数d2d+1d\geqslant 2d^{'}+1

    1.观测非线性系统,得到测量值:

    {x(i),i=1,,n} \left\{ \text{x}\left( \text{i} \right) ,\text{i}=1,\cdots ,\text{n} \right\}
    这称做混沌序列。

    • 非线性系统不一定是混沌系统,混沌系统一定是非线性系统

    2.相空间重构——参数的确定——介绍

    相空间重构技术有两个关键的参数:

    • 嵌入的维数dd
    • 延迟时间τ\tau(时滞)

    由于:

    • Takens 嵌入定理只在理论上证明了嵌入维数和延迟时间的存在性,并没有给出具体的表达式;
    • 实际应用中时间序列都是有噪声的有限序列。

    因此:
    嵌入维数和时间延迟必须要根据实际的情况来选取合适的值。
    代码如下(示例):

    3.延迟时间间隔τ\tau的确定

    有两种方法:

    • 线性自相关函数法(自相关系数法)
    • 平均互信息法(交互信息法)

    1.自相关系数法:

    在这里插入图片描述
    虽然:自相关函数法简便有效,但是:
    它仅仅能提取时间序列的线性相关性。
    在这里插入图片描述
    2. 互信息法
    在这里插入图片描述

    4.嵌入维dd的确定(有的文章中记作m)

    1.虚假最邻近点法
    在这里插入图片描述

    在这里插入图片描述


    总结

    提示:这里对文章进行总结:
    例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

    展开全文
  • 基于相空间重构的乐器分类算法
  • 相空间重构可以对混沌信号进行混沌特性分析,已经验证过,可以直接使用
  • 相空间重构matlab程序

    2014-02-17 13:49:06
    相空间重构matlab代码,经过实验可用。
  • 基于子空间自适应进化近似的不完全相空间重构方法
  • 相空间重构matlab实现

    千次阅读 热门讨论 2020-08-31 17:31:17
    相空间重构 对于相空间重构需要确定的嵌入维数(m)和时间延迟(τττ) 使用C-C法可同时确定m和τττ,也可使用求自相关系数当ACF的值低于1−e−11-e ^{-1}1−e−1,从而确定时间延迟。然后通过G-P算法确定m。由于...

    相空间重构

    对于相空间重构需要确定的嵌入维数(m)和时间延迟(ττ)
    使用C-C法可同时确定m和ττ,也可使用求自相关系数当ACF的值低于1e11-e ^{-1},从而确定时间延迟。然后通过G-P算法确定m。由于使用G-P算法所需时间较长。故本文直接使用C-C法确定两个参数。
    时间窗口tm=(m1)τt_m=(m-1)*τ
    本文所给的函数是自己编写的,故大家可用于参考,对于相空间理论部分,懒得编写了,直接百度即可。

    确定参数tmt_mττ的主函数

    clc;clear
    % C-C方法的主程序
    data=xlsread('all_data7.xlsx','all_data','b1:b20000');
    [ACF,lags,bounds]=autocorr(data,100);
    tau=59;
    m=15;
    [D,MEAN,STD]=zscore(data);
    r1=0.5*STD;
    N=length(data);
    [a,b]=find(ACF<ACF(1)*(1-exp(-1)));
    beifen=data;
    %% 求统计量S
    SS=[];
    DTS=[];
    COR=[];
    T=[];
    NN=1:6000;
    for t=1:100
       sums=0;
       sumdts=0;
    %     if mod(N,t)~=0
    %         [a,b]=find(mod(NN,t)==0);
    %         data=beifen(1:b(end));
    %     end
           for i=1:t
               eval(['datat',num2str(i),'=[];'])
               for j=1:N/t
                   eval(['tran=data(',num2str(i),'+',num2str(t),'*(',num2str(j),'-1));'])
                   eval(['datat',num2str(i),'=[datat',num2str(i),';tran];'])
               end
           end
           for m=2:5
               ds=[];
               for k=1:4
                   S=[];
                   for i=1:t
                       eval(['S',num2str(i),'=[];'])
                       eval(['datat=datat',num2str(i),';'])
                       r=r1*k;
                       C1=C(m,N/t,r,t,datat);%%计算关联积分
                       C2=C(1,N/t,r,t,datat);
                       eval(['S',num2str(i),'=[S',num2str(i),',C1-C2];'])%% 计算检验统计量
                       eval(['S=[S;S',num2str(i),'];'])
                   end
                   S=sum(S)/t;
                   ds=[ds,S];
                   sums=sums+S;
               end
               dts=max(ds)-min(ds);%% 求ΔS
               sumdts=sumdts+dts;
           end
           sums=sums/16;
           sumdts=sumdts/4;
           scor=sumdts+abs(sums);
           T=[T;t];
    %     S=S/t;
       SS=[SS;sums];
       DTS=[DTS;sumdts];
       COR=[COR;scor];
    end
    % xieru=["datat1","datat2","datat3","datat4","datat5"];
    % for i=1:t
    %     eval(['tran=datat',num2str(i),';'])
    %     xlswrite('xkjcg.xlsx',tran,xieru(i));
    % end
    tt=1:100;
    plot(tt,SS,tt,DTS,tt,COR)
    legend('SS','DTS','COR')
    
    

    C子程序

     %% 相空间重构确定嵌入维数和时间延迟
    function [C]=C(m,N,r,t,data)
    
    %% 将原始数据 重构相空间
    M=N-(m-1)*t;%% M为重构相空间中相点的个数
    x=[];%x用于保存相空间重构的结果
    for i=1:M
        for j=1:m
            x(i,j)=[data(i+(j-1)*t)];
        end
    end
    sumM=0;
    for j=1:M
        for i=1:j
            dij=sum(abs(x(i,:)-x(j,:)));
            if (r-dij)<0
                th=0;
            else
                th=1;
            end
            sumM=sumM+th;
        end
    end
    C=2*sumM/(M*(M-1));
    end
    
    展开全文
  • 一种改进的选择相空间重构参数的方法,12、一种改进的选择相空间重构参数的方法12、一种改进的选择相空间重构参数的方法
  • 介绍了多变量时间序列相空间重构理论. 提出一种新的基于平均预测误差最小化的重构参数确定方法, 阐 述了该方法的算法过程及一些重要特点. 此方法考虑了所有重构参数对平均预测误差的影响, 能够同时确定重构系...
  • 基于混沌信号和噪声在相空间轨道的动力和几何特性,提出一种相空间重构的匹配追踪混沌去噪方法。该方法利用相空间重构产生与混沌信号微分同胚的相空间集,采用匹配追踪方法将信号分解为匹配信号结构的时频原子的线性和...
  • 相空间重构C-C法,含数据 。。
  • 相空间重构代码-matlab

    热门讨论 2011-02-10 18:41:15
    用matlab实现混沌理论中的相空间重构代码,很好用的工具!
  • 基于相空间重构的航空电弧故障识别方法.pdf
  • 优化的相空间重构,可实现准确的乐器信号分类
  • 基于相空间重构与独立分量分析的局部独立投影降噪算法,黄艳林,李友荣,针对故障分析信号中存在噪声问题,提出一种将相空间重构与独立分量分析相结合的局部独立投影降噪算法。其中相空间重构的目的在于
  • 相空间重构 最近有人在Twitter上问我,如果不理解代码的工作原理,如何重构。 我回答说,这是“通过重构学习”。 然后我尝试用Google搜索它,却一无所获。 我很惊讶。 对我来说,重构似乎是研究源代码的最有效,最...
    相空间重构

    相空间重构

    最近有人在Twitter上如果不理解代码的工作原理,如何重构。 回答说,这是“通过重构学习”。 然后我尝试用Google搜索它,却一无所获 我很惊讶。 对我来说,重构似乎是研究源代码的最有效,最明显的方法。 这是我通常以九个面向对象的步骤执行的操作。

    理查德·谢泼德(Dom Hemingway)(2013)

    根据Wikipedia的说法,代码重构是“重构现有计算机代码的过程-更改因子分解-而无需更改其外部行为。” 重构的目的是使代码更具可读性并适合于修改。

    这是我不知道代码但需要对其进行修改时通常要做的事情。 从最简单的技术开始,按照复杂性的顺序对技术进行排序。

    删除IDE红色斑点

    当我使用自定义settings.jar在IntelliJ IDEA中打开Cactoos的源代码时,我看到的是这样的:

    当我打开诸如Spring Boot的源代码时,我看到类似这样的内容(它是osbImageBanner它是从一千个看起来非常相似的其他类中随机选择的):
    看到不同?

    当我看到别人的代码时,我要做的第一件事就是使它对我的IDE来说是“红色斑点”。 这些红色斑点中的大多数很容易消除,而其他一些将需要一些时间进行重构。 在这样做的同时,我学到了很多关于废话我必须处理的程序。

    删除空行

    我前段时间写道,方法主体中的空行是不好的事情。 它们是冗余复杂性的明显指标。 程序员倾向于将它们添加到他们的方法中以简化内容。

    这是来自Apache Maven代码RepositoryUtils一种方法(随机选择类RepositoryUtils ,但几乎所有其他类的格式都相同):<

    除了“全红”之外,他们的代码还充满了空行。 删除它们将使代码更易读,也将帮助我理解它的工作方式。 更大的方法将需要重构,因为如果没有空行,它们将变得几乎完全不可读。 因此,我主要通过将它们分解为更小的方法来压缩,理解并缩小它们。

    使名字更短

    我通常赞成对变量使用简短的一名词名称,对于方法使用简短的一动词名称。 相信更长的“复合”名称可以指示不必要的代码复杂性。

    例如,我在Spring Boot的osbweuUndertowServletWebServerFactory类中找到了方法registerServletContainerInitializerToDriveServletContextInitializers (69个字符!)。 我不知道为什么笔者跳过couldYouPlease前缀和otherwiseThrowAnException后缀。

    除了笑话,这么长的方法名称清楚地表明代码太复杂了,无法用简单的register甚至registerContainer来解释。 似乎有许多不同的容器,初始化程序,servlet和其他需要以某种方式注册的生物。 当我加入一个项目并看到一个使用该名称的方法时,我正为大麻烦做准备。

    当开始使用外来代码或旧代码时,使名称更短是我必须执行的重构步骤。

    添加单元测试

    大多数类(和方法)都没有任何文档,特别是当我们谈论的是闭源商业代码时。 如果这些班级或多或少具有描述性的名称并且规模小且具有凝聚力,我们将很幸运。

    但是,我更喜欢处理单元测试,而不是文档。 他们更好地解释了代码并证明它有效。 当我不理解类的工作原理时,我尝试为其编写单元测试。 在大多数情况下,由于许多原因,这是不可能的。

    删除多个退货

    之前写过,在单个方法中存在多个return语句并不是鼓励面向对象的编程。 相反,方法必须始终具有单个出口点,就像函数编程中的那些函数一样。

    从Spring Boot的osbcpbBinder类中查看此方法(那里有很多类似的示例,我随机选择了一个):

    这么小的方法有五个return语句。 对于面向对象的代码来说太多了。 程序代码没关系,我有时也会写。 例如,我们的这个Groovy脚本也有五个return关键字:

    但这是Groovy,不是一门课。 这只是一个过程,一个脚本。

    重构和删除多个return语句肯定有助于使代码更整洁。 通常是因为没有它们,则有必要使用if/then/else语句的更深层嵌套,然后代码开始看起来很难看,除非您将其分解成小块。

    摆脱NULL

    是邪恶的,这是众所周知的事实。 但是,它们仍然无处不在。 例如,Spring Boot v2.0.0.RELEASE和243K LoC中有4,100个Java文件,其中包含null关键字7,055次。 这意味着每35行大约有一个null

    相反,我几年前创建的Takes Framework具有771个Java文件,15.4万个LoC和58个null关键字。 每2700行大约有一个null 看到不同?

    当您删除NULL时,代码会变得更整洁,但这并不是那么容易。 有时甚至是不可能的。 这就是为什么我们在Takes中仍然有58个null情况。 我们根本无法删除它们,因为它们来自JDK。

    使对象不变

    正如我前段时间所展示的不变性有助于缩小对象。 我在处理的外部代码中看到的大多数类都是可变的。 和大。

    如果查看jpeek分析的任何工件,您会发现在大多数对象中,大约80%的类是可变的。 从可变性到不可变性是面向对象编程中的一个巨大挑战,如果解决,它将带来更好的代码。

    使事物不可变的重构步骤纯粹是有利可图的。

    移除静电

    如果您是过程程序员,则静态方法和属性很方便。 如果您的代码是面向对象的,则它们必须消失 在Spring Boot中,有7,482个static关键字,这意味着每32行代码需要一个。 相反,在Takes中,我们有310个static -s,每496行为1。

    将这些数字与有关NULL的统计数据进行比较,您会发现摆脱static是一项更为复杂的任务。

    应用静态分析

    这是最后一步,也是最复杂的一步。 这很复杂,因为我将静态分析器配置为最大或什至更大的潜力。 我正在使用Qulice ,它是Checkstyle,PMD和FindBugs的聚合器。 这些家伙本身很坚强,但Qulice使他们变得更坚强,增加了几十个定制支票。

    我用于静态分析的原理是0/100。 这意味着要么整个代码库都是干净的,没有Qulice投诉,要么是肮脏的。 中间什么都没有。 这不是查看静态分析的非常典型的方法。 大多数程序员使用这些工具只是为了收集有关其代码的“意见”。 我将它们用作重构指南。

    观看此视频,该视频演示了Qulice对Spring Boot中的spring-boot-project/spring-boot子模块的投诉(该视频无休止,因为我在等待中失去了耐心):

    当Qulice说一切都干净时,我认为代码库已准备就绪,可以进行维护和修改。 至此重构已经完成。

    翻译自: https://www.javacodegeeks.com/2018/04/nine-steps-of-learning-by-refactoring.html

    相空间重构

    展开全文
  • 本文以Takens 的坐标延迟嵌入理论为基础, 研究了混沌时间序列的相空间重构问题, 并用互信息量法计算 延迟, 假邻近法(FNN ) 和L iangyue Cao 方法的联合方法计算最小嵌入维数。最后通过Lo renz 时间序列进行仿真实验,...
  • 基于相空间重构和遗传优化SVR的机械设备状态趋势预测
  • 根据笼型异步电动机断条故障的基本规律及相空间重构和模糊聚类的物理意义,利用相空间重构把非线性时间序列重构成低阶非线性系统的组合,对三相电流信号进行分析、提取信号特征,对重构后的电流轨迹进行辨识和定量分析,...
  • 为了提高城市交通流的预测精度,克服单一预测模型不能很好反映交通流本质特征的缺点,在交通流混沌特性的基础上,提出将卡尔曼滤波理论与相空间重构原理相耦合的方法,建立基于相空间重构的卡尔曼滤波交通流预测模型...
  • 针对矿井涌水量典型的非线性特征,应用相空间重构与支持向量机耦合方法进行预测。将矿井涌水量的时间序列作相空间重构,并以最小嵌入维数作为支持向量机的输入节点,根据支持向量机原理建立矿井涌水量的预测模型。实例...
  • 该压缩包pypsr-master.zip:为Python编写的PSR(相空间重构的一个实例),用于做信号处理,混沌分析。
  • 针对网络流量非线性、突变性和混沌性特点,利用相空间重构和支持向量机参数的天然联系,提出一种相空间重构和支持向量机相融合的网络流量预测方法。将网络流量预测精度作为建模目标,采用粒子群算法对空间重构和支持...
  • 时间序列模型之相空间重构

    万次阅读 多人点赞 2015-10-10 13:20:21
    时间序列模型之相空间重构

    一般的时间序列主要是在时间域中进行模型的研究,而对于混沌时间序列,无论是混沌不变量的计算,混沌模型的建立和预测都是在所谓的相空间中进行,因此相空间重构就是混沌时间序列处理中非常重要的一个步骤。所谓混沌序列,可以看作是考察混沌系统所得到的一组随着时间而变化的观察值。假设时间序列是{x(i):i=1,,n}, 那么吸引子的结构特性就包含在这个时间序列之中。为了从时间序列中提取出更多有用的信息,1980年Packard等人提出了时间序列重构相空间的两种方法:导数重构法和坐标延迟重构法。而后者的本质则是通过一维的时间序列{x(i)}的不同延迟时间τ来构建d维的相空间矢量

    y(i)=(x(i),...,x(i+(d1)τ)),1in(d1)τ.

    1981年Takens提出嵌入定理:对于无限长,无噪声的d维混沌吸引子的一维标量时间序列{x(i):1in}都可以在拓扑不变的意义下找到一个d维的嵌入相空间,只要维数d2d+1. 根据Takens嵌入定理,我们可以从一维混沌时间序列中重构一个与原动力系统在拓扑意义下一样的相空间,混沌时间序列的判定,分析和预测都是在这个重构的相空间中进行的,因此相空间的重构就是混沌时间序列研究的关键。

    1. 相空间重构

    相空间重构技术有两个关键的参数:嵌入的维数d和延迟时间τ. 在Takens嵌入定理中,嵌入维数和延迟时间都只是理论上证明了其存在性,并没有给出具体的表达式,而且实际应用中时间序列都是有噪声的有限序列,嵌入维数和时间延迟必须要根据实际的情况来选取合适的值。

    关于嵌入维数d和延迟时间τ的取值,通常有两种观点:第一种观点认为dτ是互不相关的,先求出延迟时间之后再根据它求出合适的嵌入维数。求出延迟时间τ比较常用的方法主要有自相关法,平均位移法,复自相关法和互信息法等,关键的地方就是使得原时间序列经过时间延迟之后可以作为独立的坐标来使用。同时寻找嵌入维数的方法主要是几何不变量方法,虚假最临近法(False Nearest Neighbors)和它改进之后的Cao方法等。第二种观点则是认为延迟时间和嵌入维数是相关的。1996年Kugiumtzis提出的时间窗长度则是综合考虑两者的重要参数。1999年,Kim等人提出了C-C方法,该方法使用关联积分同时估计出延迟时间和时间窗。

    (1) 延迟时间τ的确定:
    如果延迟时间τ太小,则相空间向量

    y(i)=(x(i),,x(i+(d1)τ),1in(d1)τ

    中的两个坐标分量x(i+jτ)x(i+(j+1)τ)在数值上非常接近,以至于无法相互区分,从而无法提供两个独立的坐标分量;但是如果延迟时间τ太大的话,则两个坐标分量又会出现一种完全独立的情况,混沌吸引子的轨迹在两个方向上的投影就毫无相关性可言。因此需要合适的方法来确定一个合适的延迟时间τ, 从而在独立和相关两者之间达到一种平衡。

    (1.1) 自相关系数法:
    自相关函数是求延迟时间τ比较简单的一种方法,它的主要理念就是提取序列之间的线性相关性。对于混沌序列x(1),x(2),,x(n), 可以写出其自相关函数如下:

    R(τ)=1nnτi=1x(i)x(i+τ).

    此时就可以使用已知的数据x(1),x(n)来做出自相关函数R(τ)随着延迟时间τ变化的图像,当自相关函数下降到初始值R(0)1e1时,i.e. R(τ)=(1e1)R(0), 所得到的时间τ也就是重构相空间的延迟时间。虽然自相关函数法是一种简便有效的计算延迟时间的方法,但是它仅仅能够提取时间序列的线性相关性。根据自相关函数法可以让x(i),x(i+τ)以及x(i+τ),x(i+2τ)之间不相关,但是x(i),x(i+2τ)之间的相关性可能会很强。这一点意味着这种方法并不能够有效的推广到高维的研究。而且选择下降系数1e1时,这一点可能有点主观性,需要根据具体的情况做适当的调整。因此再总结了自相关法的不足之后,下面介绍一种判断系统非线性关系性的一种方法:交互信息法。

    (1.2) 交互信息法:
    在考虑了以上方法的局限性之后,Fraser和Swinney提出了交互信息法(Mutual Information Method)。假设两个离散信息系统{s1,,sm},{q1,,qn}所构成的系统SQ。通过信息论和遍历论的知识,从两个系统中获得的信息熵分别是:

    H(S)=mi=1PS(si)log2PS(si),

    H(Q)=nj=1PQ(qj)log2PQ(qj).

    其中PS(si),PQ(qi)分别是SQ中事件siqi的概率。交互信息的计算公式是:

    I(S,Q)=H(S)+H(Q)H(S,Q),

    其中H(S,Q)=mi=1nj=1PS,Q(si,qj)log2PS,Q(si,qj).

    这里的PS,Q(si,qj)称为事件si和事件qj的联合分布概率。交互信息标准化就是

    I(S,Q)=I(S,Q)/H(S)×H(Q).

    现在,我们通过信息论的方法来计算延迟时间τ. 定义(S,Q)=(x(i),x(i+τ)),1inτ, 也就是S代表时间x(i), Q代表时间x(i+τ). 那么I(S,Q)则是关于延迟时间τ的函数,可以写成I(τ). I(τ)的大小表示在已知系统S,也就是x(i)的情况下,系统Q也就是x(i+τ)的确定性的大小。I(τ)=0表示x(i)x(i+τ)是完全不可预测的,也就是说两者完全不相关。而I(τ)的第一个极小值,则表示了x(i)x(i+τ)是最大可能的不相关,重构时使用I(τ)的第一个极小值最为最优的延迟时间τ.

    交互信息法的关键在于怎么计算联合概率分布PS,Q(si,qj)以及SQ系统的概率分布PS(si)PQ(qj). 这里采取的方法是等间距格子法,其方法简要概述如下。

    (S,Q)=(x(i),x(i+τ)),1inτ,(S,Q)平面用一个矩形包含上面所有的点。将矩形S方向上等分成M1份,Q方向等分成M2份(注:M1,M2取值100~200之间即可)。那么在S方向上格子的长度就是ϵ1, Q方向上格子的长度就是ϵ2. 假设(a,b)(S,Q)平面矩形左下角的顶点坐标。

    如果(i1)ϵ1sa<iϵ1, 那么s在第i个格子中,对Row[i]做一次记录;

    如果(j1)ϵ2sb<jϵ2, 那么q在第j个格子中,对Col[j]做一次记录。x(i)x(i+τ)序列的总数都是nτ, 那么

    PS(i)=Row[i]/(nτ),1iM1,

    PQ(j)=Col[j]/(nτ),1jM2.

    如果(i1)ϵ1sa<iϵ1(j1)ϵ2qb<jϵ2,(s,q)在标号为(i,j)的格子中,对Together[i][j]做一次记录。那么

    PS,Q(i,j)=Together[i][j]/(nτ)2,1iM1,1jM2.

    根据以上信息论的公式,可以得到:

    H(S)=M1i=1PS(i)log2PS(i),

    H(Q)=M2j=1PQ(j)log2PQ(j),

    H(S,Q)=M1i=1M2j=1PS,Q(i,j)log2PS,Q(i,j).

    I(S,Q)=H(S)+H(Q)H(S,Q),

    I(S,Q)=I(S,Q)/H(S)×H(Q).

    交互信息曲线I(τ)=I(S,Q)第一次下降到极小值所对应的延迟时间τ则是最佳延时时间。

    (2) 嵌入维数d的确定:
    (2.1) 几何不变量法:
    为了确定嵌入维数d, 实际应用中通常的方法是计算吸引子的某些几何不变量(如关联维数,Lyapunov指数等)。选择好延迟时间τ之后逐渐增加维数d, 直到他们停止变化为止。从Takens嵌入定理分析可知,这些几何不变量具有吸引子的几何性质,当维数d大于最小嵌入维数的时候,几何结构已经被完全打开,此时这些几何不变量与嵌入的维数无关。基于此理论,可以选择吸引子的几何不变量停止变化时的嵌入维数d作为重构的相空间维数。

    (2.2) 虚假最临近点法:
    从几何的观点来看,混沌时间序列是高维相空间混沌运动的轨迹在一维空间的投影,在这个投影的过程中,混沌运动的轨迹就会被扭曲。高维相空间并不相邻的两个点投影到一维空间上有的时候就会成为相邻的两点,也就是虚假邻点。重构相空间,实际上就是从混沌时间序列中恢复混沌运动的轨迹,随着嵌入维数的增大,混沌运动的轨道就会被打开,虚假邻点就会被逐渐剔除,从而整个混沌运动的轨迹得到恢复,这个思想就是虚假最临近点法的关键。

    d维相空间中,每一个矢量

    yi(d)=(x(i),,x(i+(d1)τ),1in(d1)τ

    都有一个欧几里德距离的最邻近点yn(i,d)(d),(n(i,d)i,1n(i,d)n(d1)τ) 其距离是

    Ri(d)=||yi(d)yn(i,d)(d)||2.

    当相空间的维数从d变成d+1时,这两个点的距离就会发生变化,新的距离是Ri(d+1), 并且

    (Ri(d+1))2=(Ri(d))2+||x(i+dτ)x(n(i,d)+dτ)||22.

    如果Ri(d+1)Ri(d)大很多,那么就可以认为这是由于高维混沌吸引子中两个不相邻得点投影到低维坐标上变成相邻的两点造成的,这样的临近点是虚假的,令

    a1(i,d)=||x(i+dτ)x(n(i,d)+dτ)||2/Rd(i).

    如果a1(i,d)>Rτ[10,50], 那么yn(i,d)(d)就是yi(d)的虚假最临近点。这里的Rτ是阀值。

    对于实际的混沌时间序列,从嵌入维数的最小值2开始,计算虚假最临近点的比例,然后逐渐增加维数d, 直到虚假最临近点的比例小于5%或者虚假最临近点的不再随着d的增加而减少时,可以认为混沌吸引子已经完全打开,此时的d就是嵌入维数。在相空间重构方面,虚假最临近点法(FNN)被认为是计算嵌入维数很有效的方法之一。

    (2.3) 虚假最临近点法的改进-Cao方法:
    虚假最临近点法对数据的噪声比较敏感,而且实际操作中需要选择阀值Rτ, 具有很强的主观性。此时Cao Liangyue教授提出了改进的FNN方法,此方法计算时只需要延迟时间τ一个参数,用较小的数据量就可以求的嵌入维数d.

    假设我们有时间序列x(1),,x(n). 那么基于延迟时间τ所构造的向量空间就是:yi(d)=(x(i),x(i+(d1)τ)),i=1,2,,n(d1)τ, 这里的d是作为嵌入维数,τ是作为嵌入时间。yi(d)则表示第id维重构向量。与虚假最临近点法类似,定义变量

    a(i,d)=||yi(d+1)yn(i,d)(d+1)||/||yi(d)yn(i,d)(d)||,i=1,2,ndτ,

    这里的||||是最大模范数。其中yi(d+1)是第id+1维的重构向量,i.e. yi(d+1)=(x(i),,x(i+dτ)). n(i,d){1,,ndτ}是使得yn(i,d)(d)d维相空间里面,在最大模范数下与yi(d)最近的向量,并且n(i,d)i,显然n(i,d)id所决定。

    定义

    E(d)=(ndτ)1ndτi=1a(i,d).

    E(d)与延迟时间τ和嵌入维数d有关。为了发现从dd+1,该函数变化了多少,可以考虑E1(d)=E(d+1)/E(d).d大于某个值d0时,E1(d)不再变化,那么d0+1则是我们所寻找的最小嵌入维数。除了E1(d), 还可以定义一个变量E2(d)如下。令

    E(d)=(ndτ)1ndτi=1|x(i+dτ)x(n(i,d)+dτ)|,

    这里的n(i,d)和上面的定义一样,也就是使得yn(i,d)(d)yi(d)最近的整数,并且n(i,d)i. 定义E2(d)=E(d+1)/E(d). 对于随机序列,数据之间没有相关性,E2(d)1. 对于确定性的序列,数据点之间的关系依赖于嵌入维数d的变化,总存在一些值使得E2(d)1.

    2. 相空间的预测

    通过前面的相空间重构过程,一个混沌时间序列x(1),,x(n)可以确定其延迟时间τ和嵌入维数d, 形成n(d1)τd维向量:

    y⃗ 1=y1(d)=(x(1),,x(1+(d1)τ)),

    y⃗ 2=y2(d)=(x(2),,x(2+(d1)τ)),

    y⃗ i=yi(d)=(x(i),,x(i+(d1)τ)),

    y⃗ n(d1)τ=yn(d1)τ(d)=(x(n(d1)τ),,x(n)).

    这样我们就可以在d维欧式空间Rd建立一个动力系统的模型如下:

    y⃗ i+1=F(y⃗ i), 其中F是一个连续函数。

    (1) 局部预测法:
    假设N=n(d1)τ, 根据连续函数的性质可以知道:如果y⃗ Ny⃗ j非常接近,那么y⃗ N+1y⃗ j+1也是非常接近的,可以用x(j+1+(d1)τ)作为x(N+1+(d1)τ)=x(n+1)的近似值。

    (1.1) 局部平均预测法:

    考虑向量y⃗ Nk个最临近向量y⃗ t1,,y⃗ tk. i.e. 也就是从其他的N1个向量中选取前k个与y⃗ N最临近的向量,此处用欧几里德范数||||2或者最大模范数||||. 根据局部预测法的观点,可以得到x(n+1)的近似值:

    x(n+1)k1kj=1x(tj+1+(d1)τ).

    也可以引入权重的概念来计算近似值:

    x(n+1)kj=1x(tj+1+(d1)τ)ω(y⃗ tj,y⃗ N).

    其中ω(y⃗ tj,y⃗ N)=Kh(||y⃗ tjy⃗ N||)/kj=1Kh(||y⃗ tjy⃗ N||),1jk,

    K(x)=exp(x2/2),

    Kh(x)=h1K(h1x)=h1exp(x2/(2h2)).

    (1.2) 局部线性预测法:
    假设N=n(d1)τ, 则有yN(d)=(x(N),,x(n)).

    局部线性预测模型为

    x^(n+1)=c0x(N)+c1x(N+τ)++cd1x(N+(d1)τ)+cd,

    其中ci,0id是待定系数。假设向量y⃗ Nk个最临近向量是y⃗ t1,,y⃗ tk. 此处可以用欧几里德范数||||2或者最大模范数||||. 这里使用最小二乘法来求出ci,0id的值。也就是求ci使得

    ||AbY||22=kj=1(x^(tj+1+(d1)τ)x(tj+1+(d1)τ))2

    =kj=1(c0x(tj)+c1x(tj+τ)++cd1x(tj+(d1)τ)+cdx(tj+1+(d1)τ))2

    取得最小值,其中Y=(x(t1+1+(d1)τ),x(t2+1+(d1)τ),x(tk+1+(d1)τ))T, b=(c0,c1,,cd)T, 矩阵A的第j行是d+1维向量(x(tj),,x(tj+(d1)τ),1),1jk. 根据最小二乘法可以得到待定系数向量b=(ATA)1ATY是最小二乘解。

    (1.3) 局部多项式预测法:
    (2) 全局预测法:
    (2.1) 神经网络
    (2.2) 小波网络
    (2.3) 遗传算法
    3. 实验数据

    这里使用Lorenz模型来作为测试数据,

    dx/dt=σ(yx),

    dy/dt=x(ρz)y,

    dz/dt=xyβz,

    其中x,y,z是系统的三个坐标,σ,ρ,β是三个系数。在这里,我们取ρ=28,σ=10,β=8/3.在解这个常微分方程的时候,使用了经典的Runge-Kutta数值方法。

    测试数据1:
    使用1300个点,预测未来100个点,绿色曲线表示Lorenz模型在z坐标上的实际数据,红线右侧表示开始预测,蓝色曲线表示使用相空间重构模型所预测的数据。根据统计学分析可以得到:在红色线条的右侧,蓝色曲线的点和绿色曲线的点的Normalized Root Mean Square Error<8%, Mean Absolute Percentage Error<5.3%, 相关系数>97%.

    n=1300 1

    把红线附近的图像放大可以看的更加清楚:

    n=1300 2

    测试数据2:
    使用1800个点,预测未来100个点,绿色曲线表示Lorenz模型在x坐标上的实际数据,红线右侧表示开始预测,蓝色曲线表示使用相空间重构模型所预测的数据。根据统计学分析可以得到:在红色线条的右侧,蓝色曲线的点和绿色曲线的点的Normalized Root Mean Square Error<1%, Mean Absolute Percentage Error<2%, 相关系数>99%.

    n=1800

    把红线附近的图像放大:

    n=1800 2

    使用同样的数据量,也就是n=1800,预测未来100个点,绿色曲线表示Lorenz模型在z坐标上的实际数据,红线右侧表示开始预测,蓝色曲线表示使用相空间重构模型所预测的数据。根据统计学分析可以得到:在红色线条的右侧,蓝色曲线的点和绿色曲线的点的Normalized Root Mean Square Error<1%, Mean Absolute Percentage Error<1%, 相关系数>99%.

    n=1800 y

    把红线附近的图像放大:

    n=1800 y2

    参考文献:

    1. https://en.wikipedia.org/wiki/Lorenz_system
    2. https://en.wikipedia.org/wiki/Root-mean-square_deviation
    3. https://en.wikipedia.org/wiki/Mean_absolute_percentage_error
    4. Practical method for determining the minimum embedding dimension of a scalar time series
    5. 基于混沌理论的往复式压缩机故障诊断
    6. determining embedding dimension for phase-space reconstruction using a geometric construction
    7. Time Series Prediction by Chaotic Modeling of Nonlinear Dynamical Systems
    8. nonlinear dynamics delay times and embedding windows
    展开全文
  • 混沌序列的相空间重构的MATLABT程序

    热门讨论 2012-10-13 15:23:42
    混沌序列的相空间重构的MATLABT程序,混沌序列的相空间重构的MATLABT程序希望对大家有用
  • 无刷直流电机系统的混沌分析及相空间重构,高山,马草原,本文针对于无刷直流电机系统中的一个非线性数学模型,运用分岔理论等混沌分析的方法对其存在的混沌现象进行了理论分析,揭示混沌
  • 据非常有限, 因而降低建模效率和预测精度的情况, 提出一种基于相空间重构和支持向量机结合的非线性时间序列 预测方法. 将该方法应用于甲醇氧化羰基化反应中Cu-Si-Al 碳酸二甲酯合成催化剂失活过程建模, 仿真...
  • 提出了一种相空间重构与贝叶斯框架下的LS-SVM预测矿井涌水量的方法,矿井涌水量具有混沌特征,利用相空间重构,找出矿井涌水量时间序列隐藏的演化规律,作为输入参量,将贝叶斯证据框架理论用于最小二乘支持向量机模型...
  • mdembedding:用于估计用于多元数据的相空间重构的参数的MATLAB代码

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 369
精华内容 147
关键字:

相空间重构