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

Python绘制300秒正弦曲线出现振幅异常的原因及解决

问题分析与解决方案

原因分析

你遇到的振幅不一致问题,本质是两个因素导致的:

  • 采样密度过低:当设置linspace(0, 90*np.pi, 300)时,相当于在45个正弦周期里只取300个点,平均每个周期仅约6.7个采样点。这么少的点无法精准捕捉正弦曲线的峰值和谷值,折线连接后,视觉上会出现“振幅忽高忽低”的错觉——实际是折线顶点没对齐真实正弦曲线的极值点,并非正弦函数本身振幅变化。

  • x轴含义混淆:你的目标是让x轴代表300秒时长,但当前代码里x轴是弧度值(0到90π≈282.74),和实际时间不匹配。这既不符合需求,也间接导致了采样点的时间间隔不合理。

修正方案

步骤1:明确时间与正弦曲线的映射

要让x轴为0-300秒,同时得到对应45个周期的正弦曲线(对应之前的90π弧度范围),需把时间转换为正确的弧度参数:

  • 300秒对应45个周期,每秒的角频率为 (45 * 2π) / 300 = 0.3π
  • 正弦函数应为 sin(0.3π * t),其中t是时间(秒)

步骤2:增加采样点数量

把采样点从300提升到3000(或更多),保证每个周期有足够的点还原正弦曲线细节,避免视觉上的振幅偏差。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

# 生成0到300秒的时间数组,3000个采样点
time_array = np.linspace(0, 300, 3000)
# 计算对应45个周期的正弦曲线
sin_array = np.sin(0.3 * np.pi * time_array)

plt.plot(time_array, sin_array, color='red')
plt.title("300秒时长的正弦曲线(45个周期)")
plt.xlabel("时间(秒)")
plt.ylabel("振幅")
plt.show()

补充说明

如果只是想保持x轴为弧度,但解决振幅视觉问题,只需增加采样点数量即可,比如把linspace(0, 90*np.pi, 300)改成linspace(0, 90*np.pi, 3000),这样每个周期的采样点足够多,绘制出的曲线就会平滑且振幅一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:10:16