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

基于Python的2D FDTD算法高斯脉冲生成时间步长匹配问题

问题分析与解决方案

你遇到的核心问题有三个:

  1. 空间与时间变量混淆:beam_center是空间坐标(单位:米),但t是时间变量(单位:秒),直接将两者相减会得到一个极大的差值,导致指数部分趋近于0,最终exp(0)=1,所以输出是水平直线。
  2. 高斯函数公式错误:你写的-((t-beam_center)**2)/2*beam_waist**2等价于-((t-beam_center)**2 * beam_waist**2)/2,这和标准高斯脉冲的时间域公式exp(-((t-t0)**2)/(2*tau**2))不符,括号位置错误导致缩放完全偏离。
  3. 时间尺度与脉冲宽度不匹配:当前时间序列的总时长total_time=5000*delta_t=5e-14秒,而用beam_waist=200e-9米直接作为时间尺度的话,对应的时间宽度远小于当前时间序列的范围,即使公式正确,也可能看不到脉冲变化。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt
import math

delta_x = 6e-9
Nx = 500
s=2
epsilon_0 = 8.85e-12
mu_0 = 4*math.pi*1e-7
c = 1/math.sqrt(epsilon_0*mu_0)
eta_0 = math.sqrt(mu_0/epsilon_0)

# 计算时间步长与总时长
delta_z = delta_x
delta_t = delta_z/(s*c)
total_time = 5000 * delta_t

# 生成时间序列(保留原代码的时间序列,不修改)
t = np.arange(0, total_time, delta_t)

# 1. 设置时间中心(取时间序列的中间位置,对应FDTD中的脉冲发射时机)
t0 = total_time / 2
# 2. 设置脉冲的时间宽度:可以用若干个时间步长,或者从空间束腰转换为时间宽度
# 这里用空间束腰转换:tau = beam_waist / c,同时乘以一个系数调整脉冲宽度
beam_waist = 200e-9
tau = beam_waist / c * 10  # 乘以10让脉冲在当前时间序列中更明显

# 3. 修正高斯脉冲公式:注意括号位置,确保分母是2*tau²
gaussian_pulse = np.exp(-((t - t0)**2) / (2 * tau**2))

# 绘图
plt.plot(t, gaussian_pulse)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Corrected Gaussian Pulse for FDTD')
plt.show()

关键修改说明

  • 替换beam_center为时间中心t0:用时间序列的中间值作为脉冲峰值的时间点,符合FDTD中脉冲发射的常规设置。
  • 修正高斯函数的括号:将/2*beam_waist**2改为/(2 * tau**2),符合标准高斯分布的形式。
  • 匹配时间尺度:将空间束腰转换为时间宽度tau=beam_waist/c,并乘以系数调整,确保脉冲在当前的时间序列范围内有明显的幅值变化。

这样修改后,不需要改动原有的时间序列t,就能生成正常的高斯脉冲,完美适配你的FDTD代码框架。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:22:29