如何使用SymPy对方程进行变量整理,得到vz(t)的显式表达式
SymPy提取
vz(t)显式表达式最优方案 你现有代码存在笔误:调用dsolve时传入的参数是eqn,但你定义的方程变量名为eqns,修正后可按以下步骤拿到显式的vz(t)表达式:
- 定义符号时增加物理属性约束,减少求解过程中生成的无效复数、无意义解
- 求解微分方程后调用
solve显式提取vz(t) - 通过初值条件过滤符合物理逻辑的有效解
完整实现代码如下:
import sympy as sym sym.init_printing() # 为符号增加实域、正参数约束,减少冗余解 t,m,k,g,v0,psi = sym.symbols("t m k g v_0 psi", real=True, positive=True) vz = sym.Function('v_z', real=True) # 定义微分方程 eqns = sym.Eq(-k*vz(t)**2 - m*vz(t).diff(t) - m*g, 0) # 求解微分方程,修正变量名笔误 sol = sym.dsolve(eqns, ics = {vz(0): v0*sym.sin(psi)}) # 显式求解vz(t) vz_candidates = sym.solve(sol, vz(t)) # 过滤符合初值条件的有效解 valid_vz = [expr for expr in vz_candidates if sym.simplify(expr.subs(t, 0) - v0*sym.sin(psi)) == 0][0] # 输出vz(t) = ... 形式的显式结果 sym.Eq(vz(t), valid_vz)
如果需要进一步简化表达式,可调用sym.simplify(valid_vz)对结果做代数化简。
内容的提问来源于stack exchange,提问作者ingenium
相关产品推荐
相关产品推荐

