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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:55:53