You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写支持自定义时间延迟的正弦函数交叉递归图(CRP)生成代码

如何编写支持自定义时间延迟的正弦函数交叉递归图(CRP)生成代码

嘿,我完全懂你想要的效果——本质就是对比sin(x)和延迟了tau后的sin(x+tau)序列,生成它们的交叉递归图(CRP)对吧?我给你写一段Python实现,步骤清晰还能让你自定义参数,直接就能跑起来!

核心思路

交叉递归图的本质是一个二维矩阵,其中每个元素CRP[i][j]标记的是:原始序列的第i个点和延迟后序列的第j个点是否满足「距离小于设定阈值」的递归条件,满足就标1,不满足标0,最后把这个矩阵绘制成热力图就行。

完整实现代码

import numpy as np
import matplotlib.pyplot as plt

def generate_crp_sin(tau, x_start=0, x_end=10*np.pi, num_points=500, epsilon=0.1):
    # 1. 生成原始sin(x)序列和延迟后的sin(x+tau)序列
    x = np.linspace(x_start, x_end, num_points)
    y = np.sin(x)
    z = np.sin(x + tau)  # 这里就是你要的延迟tau后的序列

    # 2. 计算交叉递归矩阵
    crp_matrix = np.zeros((num_points, num_points), dtype=int)
    for i in range(num_points):
        for j in range(num_points):
            # 判断两个点的距离是否小于阈值epsilon
            if np.abs(y[i] - z[j]) < epsilon:
                crp_matrix[i][j] = 1

    # 3. 绘制交叉递归图
    plt.figure(figsize=(8, 8))
    plt.imshow(crp_matrix, cmap='binary', origin='lower', extent=[x_start, x_end, x_start, x_end])
    plt.xlabel('sin(x) 序列索引/时间')
    plt.ylabel('sin(x+tau) 序列索引/时间')
    plt.title(f'交叉递归图 (时间延迟 tau = {tau:.2f})')
    plt.colorbar(ticks=[0, 1], label='递归状态 (1=满足, 0=不满足)')
    plt.show()

# 示例:用户输入时间延迟tau,比如tau=np.pi/2
user_tau = float(input("请输入时间延迟tau: "))
generate_crp_sin(user_tau)

代码说明

  • 自定义参数:你可以调整x_start/x_end来改变x的范围,num_points控制序列的点数(点数越多图越精细),epsilon是递归判断的阈值——阈值越小,图里的白色点(满足递归)越少,你可以根据需要调整。
  • 核心逻辑:双重循环遍历两个序列的所有点对,计算欧氏距离(这里因为是一维序列,就是绝对值差),判断是否小于阈值,生成0/1矩阵。
  • 绘图部分:用imshow绘制热力图,binary配色能清晰展示黑白的递归状态,origin='lower'让坐标轴从左下开始,符合常规的时间序列展示习惯。

效果说明

当你输入不同的tau时,图里的图案会跟着变化——比如tau=π/2时,sin(x)和sin(x+π/2)=cos(x)的交叉递归图会呈现出斜向的条纹,这正是两个正交正弦序列的递归特征。

备注:内容来源于stack exchange,提问作者Vitoria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:03:13