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

SymPy与Maple结果不符:Maple转Python代码问题求助

问题:Maple转SymPy的行波变换ODE推导问题

Maple操作逻辑

  • 定义行波变换:$\xi = k(x - ct)$,设 $u(x,t) = U(\xi)$
  • 将其代入KdV方程 $u_t + 6u u_x = 0$,推导得到关于$U(\xi)$的常微分方程
  • 再做变量替换:$\xi = \text{arctanh}(Y)$,$U(\xi) = F(Y)$,得到最终的ODE(记为F1)

我的Python尝试代码

from sympy import *
c, k, x, t, tau, Y, xi = symbols('c k x t tau Y xi')

u = Function('u')
F = Function('F') 
xi = k*(x-c*t)

U = Function('U')
pde = diff(u(x,t), t) + 6*u(x,t)*diff(u(x,t), x) 
ode = simplify(pde.xreplace({t:tau,u(x,t):U(xi)}))
ode1 = simplify(ode.xreplace({xi:atanh(Y), U(xi):F(Y)}))

display('pde = ', pde)
display('ode = ', ode)
display('ode1 = ', ode1)

Python运行输出

输出结果如下:

  • pde = $u_t(x,t) + 6 u(x,t) u_x(x,t)$
  • ode = $U(\xi) \left(-c k \frac{d}{d\xi}U(\xi)\right) + 6 U(\xi) \left(k \frac{d}{d\xi}U(\xi)\right)$
  • ode1 = $F(Y) \left(-c k \frac{d}{dY}F(Y)\right) + 6 F(Y) \left(k \frac{d}{dY}F(Y)\right)$

问题

Python生成的ode1结果与Maple输出的F1不符,需要修正代码得到正确的变换结果。


修正方案

问题核心是xreplace仅做符号替换,不会自动处理复合函数的链式求导。需改用subs结合doit()触发导数展开,让SymPy自动计算链式法则下的求导结果:

正确代码

from sympy import *
c, k, x, t, Y, xi = symbols('c k x t Y xi')

# 定义原函数与行波变换
u = Function('u')(x, t)
xi = k*(x - c*t)
U = Function('U')(xi)

# 构造KdV方程并代入行波变换,展开导数
pde = diff(u, t) + 6*u*diff(u, x)
pde_sub = pde.subs(u, U).doit()
ode = simplify(pde_sub)

# 第二次变量替换:ξ=arctanh(Y),U(ξ)=F(Y)
F = Function('F')(Y)
xi_sub = atanh(Y)
ode_sub = ode.subs({xi: xi_sub, U: F}).doit()
ode1 = simplify(ode_sub)

display('pde = ', pde)
display('ode = ', ode)
display('ode1 = ', ode1)

关键说明

  1. 链式求导自动展开:用subs替换函数后调用doit(),SymPy会自动处理复合函数求导:
    • $\frac{\partial u}{\partial t} = \frac{dU}{d\xi} \cdot \frac{\partial \xi}{\partial t} = -ck U'(\xi)$
    • $\frac{\partial u}{\partial x} = \frac{dU}{d\xi} \cdot \frac{\partial \xi}{\partial x} = k U'(\xi)$
  2. 二次变换的导数处理:替换$\xi=\text{arctanh}(Y)$时,SymPy会自动计算$\frac{d\xi}{dY} = \frac{1}{1-Y^2}$,最终得到与Maple输出一致的ODE结果。

内容的提问来源于stack exchange,提问作者Graham G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:10:32