如何用SymPy绘制x(t)=exp(-t)sin(t)的拉普拉斯变换3D曲面图
问题描述
想要实现以下效果:
- 时域函数
x(t) = exp(-t)*sin(t)的图像 - 该函数的拉普拉斯变换表达式
X(s) - 拉普拉斯变换结果的3D曲面可视化
当前编写的代码无法完成3D绘图,同时不清楚如何将复变量 s 分解为 α + iω(α 为实部,ω 为虚部)。
解决方案
1. 明确拉普拉斯变换结果
函数 x(t) = e^{-t}sin(t) 的拉普拉斯变换结果为:X(s) = 1/[(s+1)^2 + 1]
可以通过SymPy直接计算验证该结果。
2. 分解复变量s
复变量 s 由实部 α 和虚部 ω 组成,即 s = α + iω(i 为虚数单位)。将其代入拉普拉斯变换表达式后,复变函数会转化为关于 α 和 ω 的二元函数,我们可以选择绘制它的模(绝对值)、实部或虚部的3D曲面。
3. 修正后的代码实现
移除无用变量,添加3D绘图逻辑,完整代码如下:
import sympy import matplotlib.pyplot as plt import numpy as np # 初始化符号变量 t, s = sympy.symbols('t, s') alpha, omega = sympy.symbols('alpha omega', real=True) # 实部alpha,虚部omega # 拉普拉斯变换和逆变换函数 def L(f): return sympy.laplace_transform(f, t, s, noconds=True) def invL(F): return sympy.inverse_laplace_transform(F, s, t) # 定义原函数 f1 = sympy.exp(-t)*sympy.sin(t) # 计算拉普拉斯变换 F = L(f1) print("原函数:") sympy.pretty_print(f1) print("拉普拉斯变换结果:") sympy.pretty_print(F) # 绘制原函数时域图 print("\n原函数时域图:") sympy.plot(f1, xlim=(0, 10), ylim=(-0.4, 0.4), title="x(t) = e^{-t}sin(t)") # 将s替换为alpha + i*omega,得到复值函数 F_complex = F.subs(s, alpha + sympy.I*omega) # 计算模(绝对值),也可替换为实部(F_complex.as_real_imag()[0])或虚部(F_complex.as_real_imag()[1]) F_magnitude = sympy.Abs(F_complex) # 将符号函数转换为数值函数,方便绘图 f_magnitude = sympy.lambdify((alpha, omega), F_magnitude, 'numpy') # 生成网格数据 alpha_vals = np.linspace(-0.5, 3, 100) omega_vals = np.linspace(-5, 5, 100) Alpha, Omega = np.meshgrid(alpha_vals, omega_vals) Magnitude = f_magnitude(Alpha, Omega) # 绘制3D曲面图 print("\n拉普拉斯变换的模的3D曲面图:") fig = plt.figure(figsize=(10, 7)) ax = fig.add_subplot(111, projection='3d') surf = ax.plot_surface(Alpha, Omega, Magnitude, cmap='viridis', edgecolor='none') ax.set_xlabel('实部 α') ax.set_ylabel('虚部 ω') ax.set_zlabel('|X(s)|') ax.set_title('拉普拉斯变换 X(s) = 1/[(s+1)^2 +1] 的模') fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()
代码说明
- 通过
alpha + sympy.I*omega替换s,将复变函数转化为二元实函数 - 选择绘制变换结果的模(最直观的可视化方式),可根据需求替换为实部或虚部
- 用
sympy.lambdify将符号函数转换为NumPy支持的数值函数,配合matplotlib实现3D曲面绘制 - 调整了原函数时域图的显示范围,让波形展示更清晰
参考视频核心思路(翻译)
视频的核心逻辑是:拉普拉斯变换将时域函数映射到复平面上的函数,通过拆分s的实部和虚部,可将复变函数转化为二元函数,进而用3D曲面展示其在复平面上的变化规律,帮助理解拉普拉斯变换的特性。
内容的提问来源于stack exchange,提问作者Freya the Goddess
相关产品推荐
相关产品推荐

