将时间序列转成图像——递归图方法 Matlab实现

目录

1 方法

2 Matlab代码实现

3 结果


【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】

其他:

1. 时间序列转二维图像方法及其应用研究综述_vm-1215的博客-CSDN博客

2.将时间序列转成图像——格拉姆角场方法 Matlab实现_vm-1215的博客-CSDN博客

3.将时间序列转成图像——马尔可夫转移场方法 Matlab实现_vm-1215的博客-CSDN博客

4.将时间序列转成图像——图形差分场方法 Matlab实现_vm-1215的博客-CSDN博客

5.将时间序列转成图像——相对位置矩阵方法 Matlab实现_vm-1215的博客-CSDN博客

1 方法

递归图(Recurrence Plots, RP)是由Eckmann等人[14]在1995年提出的,用来使动态系统的递归特性可视化。

将递归图应用在时间序列上,首先将时间序列的时域空间变换到相空间,从而将时域中的每个点x_i变换成相空间的对应状态\overrightarrow{S_{i}};接着计算每两个状态(向量)之间的距离(向量范数);然后进行阈值二值化,得到递归图中对应两个状态之间的特征。

递归图可用一系列递归矩阵来表示,如下式所示:

R_{i, j}(\epsilon)=\Theta\left(\epsilon-\left\|\overrightarrow{s_{l}}-\overrightarrow{s_{j}}\right\|\right), i, j=1, \ldots, N

其中R_{i,j}是一个N\times N的方阵,\|\cdot\|示向量范,\epsilon为距离阈值使得R_{i,j} \in\{0,1\}\Theta(\cdot)表示Heaviside函数。

其算法流程如下:

  1. 由时间序列得到相空间状态集;
  2. 计算每两个状态之间的距离(向量范数);
  3. 进行阈值二值化,得到递归图矩阵。

2 Matlab代码实现

clc
clear
close all

%% 生成数据
speed = xlsread('3_1_link1_1_5_30min.csv');

X = speed';
X = (X - min(X)) / (max(X) - min(X));
N = length(X);

%% 原始数据图
im = figure(1);
plot(X)
title('the original time series');
saveas(im,'原始数据图.bmp')

%% 生成RP
% 转换为相空间,第一个元素为高度,第二个元素为下一个位置的高度。
S = [X(1:end-1)',X(2:end)'];

% 参数设置
% etheta = 0;

for i = 1:N - 1
    for j = 1:N-1
%         R(i,j) = theta(etheta - sum((S(i,:) - S(j,:)) .^2));
        R(i,j) = sum((S(i,:) - S(j,:)) .^2);
    end
end
R = (R - min(min(R)))/(max(max(R)) - min(min(R)))* 4;

h = figure(2);
imagesc(R)
title('imaging time series of RP')
saveas(h,'RP_1.bmp')

3 结果

【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】

  • 22
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: 递归是一种在函数内部调用自身的方法,可以通过递归实现的遍历和搜索等操作。 下面是一个使用递归实现深度优先搜索(DFS)的遍历的MATLAB代码示例: ``` function dfsRecursive(graph, startNode, visited) % 将起始节点标记为已访问 visited(startNode) = true; fprintf('%d ', startNode); % 遍历与该节点相邻的其他节点 for i = 1:size(graph, 2) % 如果与当前节点相邻的节点未被访问,则递归调用DFS if graph(startNode, i) == 1 && visited(i) == false dfsRecursive(graph, i, visited); end end end ``` 其中,`graph`是一个邻接矩阵,表示的连接关系;`startNode`是起始节点的索引,`visited`是一个布尔数组,用于记录节点的访问状态。 在主程序中,首先需要初始化邻接矩阵`graph`、起始节点`startNode`和访问数组`visited`,然后调用递归函数`dfsRecursive`,即可实现深度优先搜索的遍历。 注意,在递归函数中,首先将当前节点标记为已访问,并输出节点值。然后遍历与当前节点相邻的其他节点,如果其中有未被访问的节点,则递归调用`dfsRecursive`函数继续遍历该节点的相邻节点。 以上是一个简单的递归遍历的MATLAB代码示例,通过递归的方式,可以实现的遍历和搜索等操作。 ### 回答2: 递归是指一种在论中用于搜索数据结构的算法,其中包含了一个递归函数。这个递归函数的作用是通过遍历中的节点,来搜索与给定节点相关联的其他节点。 以下是一个用MATLAB实现的简单递归算法的示例代码: ```matlab function visitNode(graph, node, visited) % 将当前节点标记为已访问 visited(node) = true; disp(['访问节点:', num2str(node)]); % 获取与当前节点相邻的未访问的节点 neighbors = find(graph(node,:) & ~visited); % 递归访问相邻的节点 for i = 1:length(neighbors) if ~visited(neighbors(i)) visitNode(graph, neighbors(i), visited); end end end % 示例的邻接矩阵表示 graph = [0 1 1 0 0; 1 0 1 1 0; 1 1 0 0 1; 0 1 0 0 0; 0 0 1 0 0]; % 创建一个与中节点数量相同的访问状态数组 visited = false(1, size(graph,1)); % 从节点1开始递归访问整个 visitNode(graph, 1, visited); ``` 上述代码中,首先定义了一个用于递归访问节点的函数`visitNode`,该函数接受三个参数:的邻接矩阵`graph`,当前节点`node`,和用于记录节点是否已访问的状态数组`visited`。在函数内部,首先将当前节点标记为已访问,然后输出该节点的编号。之后,查找与当前节点相邻的未访问节点,并递归调用`visitNode`函数来访问这些相邻节点。 在代码的主体部分,定义了一个示例的邻接矩阵`graph`,并创建了与中节点数量相同的访问状态数组`visited`。然后,从节点1开始递归访问整个,即调用`visitNode`函数。 ### 回答3: 递归是一种编程技术,它可用于解决问题的一种方法。在递归中,一个问题被分解为更小的子问题,然后递归地解决这些子问题,最终得出整个问题的解。在MATLAB中,递归代码的基本思想是通过递归调用实现的深度优先搜索。 下面是一个简单的MATLAB递归代码的例子: ```matlab function visit(node, visited) % 控制递归结束的条件 if visited(node) return end % 输出当前节点 disp(node); % 标记当前节点为已访问 visited(node) = true; % 递归访问当前节点的邻居节点 neighbors = [1, 2, 3, 4]; % 假设邻居节点为1, 2, 3, 4 for i = 1:length(neighbors) if ~visited(neighbors(i)) visit(neighbors(i), visited); end end end % 创建一个 graph = zeros(4); graph(1, 2) = 1; graph(2, 3) = 1; graph(3, 4) = 1; graph(4, 1) = 1; % 初始化 visited 数组 visited = false(4, 1); % 从节点1开始递归访问 visit(1, visited); ``` 在这个例子中,我们定义了一个函数`visit`,它接受两个参数:`node`表示当前节点,`visited`是一个布尔数组,用于标记节点是否已经被访问过。 递归的结束条件是:如果当前节点已经被访问过,则直接返回;否则,输出当前节点、标记节点为已访问,并递归地访问邻居节点。 在主函数中,我们创建了一个简单的,然后初始化了一个布尔数组`visited`,并将其作为参数传递给`visit`函数,从节点1开始递归地访问

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vm-1215

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值