如何用Python实现结构动力学中的杜哈梅积分(卷积积分)?
杜哈梅积分(卷积积分)的Python实现方案
你用sympy做符号积分时,被积函数是指数、双正弦项的乘积,符号解析解推导复杂度极高,sympy可能无法生成闭合解,或耗时极久。而你需要的是t=1时的数值结果,更适合用数值积分实现,以下是具体方案:
数值积分实现代码(基于scipy)
直接用scipy.integrate.quad计算定积分的数值结果,避开符号解析的瓶颈:
import numpy as np from scipy.integrate import quad # 系统参数 m = 6938.78 k = 379259 zeta = 0.05 # 阻尼比 wn = np.sqrt(k / m) wd = wn * np.sqrt(1 - zeta**2) # 定义杜哈梅积分的被积函数 def duhame_integrand(tau, t): eq1 = 900 * np.sin(5.3 * tau) eq2 = np.exp(-zeta * wn * (t - tau)) eq3 = np.sin(wd * (t - tau)) return eq1 * eq2 * eq3 # 计算t=1时的响应 t_target = 1 integral_result, _ = quad(duhame_integrand, 0, t_target, args=(t_target,)) y = integral_result / (m * wd) print(f"t=1时的响应y: {y:.6f}")
运行这段代码后,会得到与Ti Nspire结果接近的数值(因浮点精度差异,可能有微小偏差)。
补充说明
符号积分仅适合结构简单的函数,这类包含多频率正弦项、指数项乘积的卷积积分,解析解表达式会异常冗长,sympy的符号引擎难以高效处理。而数值积分直接针对特定时间点计算定积分值,完全匹配你获取t=1时响应的需求。
内容的提问来源于stack exchange,提问作者SM KIM
相关产品推荐
相关产品推荐

