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

如何用Python生成重复抛物线信号?求类MATLAB GENSIG的优雅实现

优雅实现周期为2的f(x)=x²重复信号绘制(范围-10到10)

需求:绘制周期为2的函数$f(x)=x^2$的重复信号,基于[-1,1]区间的函数值扩展到[-10,10]范围。现有如下Python实现,希望找到更简洁优雅的写法(用于作业提交),比如Scipy中类似MATLAB gensig函数的方案:

import numpy as np
import matplotlib.pyplot as plt

t3 = np.linspace(-1,1,1000)
x3 = t3**2
x = np.array_split(x3,2)[1]

for i in range(9):
  x = np.concatenate((x, x3))
x = np.concatenate((x,np.array_split(x3,2)[0]))

t = np.linspace(-10,10,10000)
plt.plot(t, x, linewidth=1, color='blue')
plt.show()

目标效果如下:
周期为2的f(x)=x²重复信号


优化方案:向量化周期映射(推荐)

利用Numpy的向量化运算直接计算每个时间点在周期内的等效位置,避免循环和数组拼接,代码简洁且高效:

import numpy as np
import matplotlib.pyplot as plt

# 生成完整时间范围的数组
t = np.linspace(-10, 10, 10000)
# 将每个时间点映射到[-1, 1]的周期区间(周期为2)
# 原理:通过模运算把t转换到[0,2)区间,再偏移到[-1,1)
t_periodic = np.mod(t + 1, 2) - 1
# 计算周期函数值
x = t_periodic ** 2

plt.plot(t, x, linewidth=1, color='blue')
plt.show()

关于Scipy中类似gensig的方法

Scipy的scipy.signal.gensig主要用于生成正弦、方波、脉冲等标准周期信号,无法直接生成自定义的$f(x)=x^2$周期信号。因此上面的向量化映射方法是更适合自定义周期函数的优雅实现,逻辑清晰、可读性强,完全符合作业提交的要求。


内容的提问来源于stack exchange,提问作者MoritzMoreira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:35:24