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

如何绘制代码中定义的含Dirac函数的I(x)的Fourier变换图像

解决方案

根据傅里叶变换的基本性质,加权Dirac冲激a·δ(x - x₀)的连续傅里叶变换解析形式为a·exp(-2j·π·f·x₀),其中f为频率变量。你定义的I(x)是两个冲激的叠加,因此傅里叶变换公式为:

F(f) = a₁·e^(-2jπf x₁) + a₂·e^(-2jπf x₂)

取该复数信号的振幅即可得到你预期的周期函数,周期为1/|x₁ - x₂|。

你现有代码中有两处需要调整:

  • 你当前定义的x是空间域自变量,傅里叶变换的自变量为频率f,建议重命名变量避免语义混淆
  • sympy的DiracDelta无法直接用于numpy数值计算,我们直接用解析公式计算傅里叶变换即可,无需额外定义I变量

修改后的完整代码

import matplotlib.pyplot as plt
import numpy as np

a1 = 1.6
a2 = 0.6
x1 = 1 
x2 = 5

# 定义频率轴范围,可根据需要调整
f_start = 0
f_end   = 6
f = np.linspace(f_start, f_end, 1000)

# 核心实现:计算傅里叶变换的振幅谱
FurI = np.abs(a1 * np.exp(-2j * np.pi * f * x1) + a2 * np.exp(-2j * np.pi * f * x2))

fig, ax = plt.subplots(figsize=(10,5))

plt.xlim(f_start, f_end)
plt.ylim(0, 2.4) # 振幅最大值为a1+a2=2.2,调整坐标范围适配显示
plt.plot(f, FurI, c='navy')

ax.set_xlabel(r'$f$')
ax.set_ylabel(r'$|F(I)(f)|$')

plt.show()

如果你坚持保留原代码的变量命名,只需要将FurI = ???????替换为以下代码即可:

FurI = np.abs(a1 * np.exp(-2j * np.pi * x * x1) + a2 * np.exp(-2j * np.pi * x * x2))

同时注意将原代码的plt.ylim(y1,1.2)调整为plt.ylim(0, 2.4),否则会超出显示范围。

内容的提问来源于stack exchange,提问作者Anna-Kat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:24:02