在sympy中分离偏微分方程中的变量

Separating variables in partial differential equation in sympy

问题

我正在尝试使用 sympy 分离一个大方程。就是这样:

python代码是

Eq(-m**2*f(τ, ρ, χ) + (2*ρ*sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1))*Derivative(f(τ, ρ, χ), ρ) + sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1))*(ρ**2 - 1)*Der
ivative(f(τ, ρ, χ), (ρ, 2)) + sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1))*Derivative(f(τ, ρ, χ), (τ, 2))/(1 - ρ**2) + sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 -
 1))*Derivative(f(τ, ρ, χ), (χ, 2))/ρ**2 - sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1))*(ρ**2 - 1)**2*(ρ**3*(1 - ρ**2)/(ρ**2 - 1)**2 + ρ**3/(ρ**2 -
1) - ρ*(1 - ρ**2)/(ρ**2 - 1))*Derivative(f(τ, ρ, χ), ρ)/(ρ**2*(1 - ρ**2)))/sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1)), 0)

这个方程实际上是可分的;写 $f = F * T$,sympy 本身给出了这个

其中,通过在两边除以 f 并乘以 rho 的函数,可以很容易地将 T''/T 带到右侧。


sympy 的作用

我的代码的最小形式是

import sympy as s

m, τ, ρ, χ = s.var('m τ ρ χ')

f, F, T = map(s.Function, 'fFT')

de = s.Eq( the_equation_given_above, 0)

sep_terms = s.pde_separate_mul(de, f(τ, ρ, χ), [F(ρ, χ), T(τ)])
print(sep_terms)   # outputs None

输出none。有什么方法可以实现所需的分离?

您可以手动完成一些操作:

In [1]: import sympy as s
   ...: 
   ...: m, τ, ρ, χ = s.var('m τ ρ χ')
   ...: 
   ...: f, F, T = map(s.Function, 'fFT')

In [2]: eq = Eq(-m**2*f(τ, ρ, χ) + (2*ρ*sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1))*Derivative(f(τ, ρ, χ), ρ) + sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1))*(ρ**2 - 1)*Derivative(f(τ, ρ, χ), (ρ, 2)) + sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1))*Derivative(f(τ, ρ, χ), (τ, 2))/(1 - ρ**2) + sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1))*Derivative(f(τ, ρ, χ), (χ, 2))/ρ**2 - sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1))*(ρ**
   ...: 2 - 1)**2*(ρ**3*(1 - ρ**2)/(ρ**2 - 1)**2 + ρ**3/(ρ**2 -1) - ρ*(1 - ρ**2)/(ρ**2 - 1))*Derivative(f(τ, ρ, χ), ρ)/(ρ**2*(1 - ρ**2)))/sqrt(-ρ**2*(1 - ρ**2)/(ρ**2 - 1)), 0)

In [3]: eq
Out[3]: 
                                                                                                                                                                                                    _______________                                                                 
                                                                                                                    _______________                         _______________                        ╱   2 ⎛     2⎞           2 ⎛ 3 ⎛     2⎞      3       ⎛     2⎞⎞                   
                                                                                                                   ╱   2 ⎛     2⎞     2                    ╱   2 ⎛     2⎞     2                   ╱  -ρ ⋅⎝1 - ρ ⎠   ⎛ 2    ⎞  ⎜ρ ⋅⎝1 - ρ ⎠     ρ      ρ⋅⎝1 - ρ ⎠⎟ ∂                 
                                                                                                                  ╱  -ρ ⋅⎝1 - ρ ⎠    ∂                    ╱  -ρ ⋅⎝1 - ρ ⎠    ∂                   ╱   ───────────── ⋅⎝ρ  - 1⎠ ⋅⎜─────────── + ────── - ──────────⎟⋅──(f(τ, ρ, χ))    
                            _______________                        _______________                               ╱   ───────────── ⋅───(f(τ, ρ, χ))      ╱   ───────────── ⋅───(f(τ, ρ, χ))     ╱         2                   ⎜         2     2          2      ⎟ ∂ρ                
                           ╱   2 ⎛     2⎞                         ╱   2 ⎛     2⎞              2                 ╱         2           2                 ╱         2           2               ╲╱         ρ  - 1               ⎜ ⎛ 2    ⎞     ρ  - 1     ρ  - 1  ⎟                   
                          ╱  -ρ ⋅⎝1 - ρ ⎠   ∂                    ╱  -ρ ⋅⎝1 - ρ ⎠   ⎛ 2    ⎞  ∂                ╲╱         ρ  - 1     ∂τ                ╲╱         ρ  - 1     ∂χ                                                ⎝ ⎝ρ  - 1⎠                        ⎠                   
                  2⋅ρ⋅   ╱   ───────────── ⋅──(f(τ, ρ, χ)) +    ╱   ───────────── ⋅⎝ρ  - 1⎠⋅───(f(τ, ρ, χ)) + ───────────────────────────────────── + ───────────────────────────────────── - ──────────────────────────────────────────────────────────────────────────────────    
                        ╱         2         ∂ρ                 ╱         2                    2                                    2                                     2                                                        2 ⎛     2⎞                                        
   2                  ╲╱         ρ  - 1                      ╲╱         ρ  - 1              ∂ρ                                1 - ρ                                     ρ                                                        ρ ⋅⎝1 - ρ ⎠                                        
- m ⋅f(τ, ρ, χ) + ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── = 0
                                                                                                                                            _______________                                                                                                                         
                                                                                                                                           ╱   2 ⎛     2⎞                                                                                                                           
                                                                                                                                          ╱  -ρ ⋅⎝1 - ρ ⎠                                                                                                                           
                                                                                                                                         ╱   ─────────────                                                                                                                          
                                                                                                                                        ╱         2                                                                                                                                 
                                                                                                                                      ╲╱         ρ  - 1                                                                                                                             

In [4]: eq2 = eq.lhs.subs(f(τ, ρ, χ), F(ρ, χ)*T(τ)).doit()

In [5]: eq2
Out[5]: 
                                                                                                                                                                                                              _______________                                                               
                                                                                                                          _______________                           _______________                          ╱   2 ⎛     2⎞           2 ⎛ 3 ⎛     2⎞      3       ⎛     2⎞⎞                 
                                                                                                                         ╱   2 ⎛     2⎞             2              ╱   2 ⎛     2⎞          2                ╱  -ρ ⋅⎝1 - ρ ⎠   ⎛ 2    ⎞  ⎜ρ ⋅⎝1 - ρ ⎠     ρ      ρ⋅⎝1 - ρ ⎠⎟      ∂          
                                                                                                                        ╱  -ρ ⋅⎝1 - ρ ⎠            d              ╱  -ρ ⋅⎝1 - ρ ⎠         ∂                ╱   ───────────── ⋅⎝ρ  - 1⎠ ⋅⎜─────────── + ────── - ──────────⎟⋅T(τ)⋅──(F(ρ, χ))
                              _______________                          _______________                                 ╱   ───────────── ⋅F(ρ, χ)⋅───(T(τ))      ╱   ───────────── ⋅T(τ)⋅───(F(ρ, χ))     ╱         2                   ⎜         2     2          2      ⎟      ∂ρ         
                             ╱   2 ⎛     2⎞                           ╱   2 ⎛     2⎞                   2              ╱         2                   2           ╱         2                2            ╲╱         ρ  - 1               ⎜ ⎛ 2    ⎞     ρ  - 1     ρ  - 1  ⎟                 
                            ╱  -ρ ⋅⎝1 - ρ ⎠        ∂                 ╱  -ρ ⋅⎝1 - ρ ⎠   ⎛ 2    ⎞       ∂             ╲╱         ρ  - 1             dτ          ╲╱         ρ  - 1          ∂χ                                             ⎝ ⎝ρ  - 1⎠                        ⎠                 
                    2⋅ρ⋅   ╱   ───────────── ⋅T(τ)⋅──(F(ρ, χ)) +    ╱   ───────────── ⋅⎝ρ  - 1⎠⋅T(τ)⋅───(F(ρ, χ)) + ─────────────────────────────────────── + ─────────────────────────────────────── - ────────────────────────────────────────────────────────────────────────────────────
                          ╱         2              ∂ρ              ╱         2                         2                                  2                                       2                                                          2 ⎛     2⎞                                     
   2                    ╲╱         ρ  - 1                        ╲╱         ρ  - 1                   ∂ρ                              1 - ρ                                       ρ                                                          ρ ⋅⎝1 - ρ ⎠                                     
- m ⋅F(ρ, χ)⋅T(τ) + ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
                                                                                                                                                   _______________                                                                                                                          
                                                                                                                                                  ╱   2 ⎛     2⎞                                                                                                                            
                                                                                                                                                 ╱  -ρ ⋅⎝1 - ρ ⎠                                                                                                                            
                                                                                                                                                ╱   ─────────────                                                                                                                           
                                                                                                                                               ╱         2                                                                                                                                  
                                                                                                                                             ╲╱         ρ  - 1                                                                                                                              

In [6]: eq3 = expand_mul(eq2 / (F(ρ, χ)*T(τ)))

In [7]: eq3
Out[7]: 
                                                                    2                                                            2                 2               2         
                                                                2  ∂                                                            ∂                 d               ∂          
              5 ∂                          3 ∂                 ρ ⋅───(F(ρ, χ))       ∂                     ∂                   ───(F(ρ, χ))      ───(T(τ))       ───(F(ρ, χ))
             ρ ⋅──(F(ρ, χ))             2⋅ρ ⋅──(F(ρ, χ))            2            2⋅ρ⋅──(F(ρ, χ))         ρ⋅──(F(ρ, χ))           2                 2               2         
   2            ∂ρ                           ∂ρ                   ∂ρ                 ∂ρ                    ∂ρ                  ∂ρ                dτ              ∂χ          
- m  - ───────────────────────── + ───────────────────────── + ─────────────── + ─────────────── - ───────────────────────── - ──────────── + ──────────────── + ────────────
          4            2              4            2               F(ρ, χ)           F(ρ, χ)          4            2             F(ρ, χ)         2                 2         
       - ρ ⋅F(ρ, χ) + ρ ⋅F(ρ, χ)   - ρ ⋅F(ρ, χ) + ρ ⋅F(ρ, χ)                                       - ρ ⋅F(ρ, χ) + ρ ⋅F(ρ, χ)                  - ρ ⋅T(τ) + T(τ)    ρ ⋅F(ρ, χ) 

In [8]: lhs, rhs = eq3.as_independent(τ)

In [9]: lhs
Out[9]: 
                                                                    2                                                            2              2         
                                                                2  ∂                                                            ∂              ∂          
              5 ∂                          3 ∂                 ρ ⋅───(F(ρ, χ))       ∂                     ∂                   ───(F(ρ, χ))   ───(F(ρ, χ))
             ρ ⋅──(F(ρ, χ))             2⋅ρ ⋅──(F(ρ, χ))            2            2⋅ρ⋅──(F(ρ, χ))         ρ⋅──(F(ρ, χ))           2              2         
   2            ∂ρ                           ∂ρ                   ∂ρ                 ∂ρ                    ∂ρ                  ∂ρ             ∂χ          
- m  - ───────────────────────── + ───────────────────────── + ─────────────── + ─────────────── - ───────────────────────── - ──────────── + ────────────
          4            2              4            2               F(ρ, χ)           F(ρ, χ)          4            2             F(ρ, χ)        2         
       - ρ ⋅F(ρ, χ) + ρ ⋅F(ρ, χ)   - ρ ⋅F(ρ, χ) + ρ ⋅F(ρ, χ)                                       - ρ ⋅F(ρ, χ) + ρ ⋅F(ρ, χ)                   ρ ⋅F(ρ, χ) 

In [10]: rhs
Out[10]: 
     2          
    d           
   ───(T(τ))    
     2          
   dτ           
────────────────
   2            
- ρ ⋅T(τ) + T(τ)

In [11]: eq4 = Eq( cancel((1-ρ**2)*lhs), cancel((1-ρ**2)*rhs))

In [12]: eq4
Out[12]: 
                                     2                                      2                                    2                 2                              2              2      
 2  4            2  2            6  ∂                5 ∂                4  ∂                3 ∂              2  ∂              2  ∂               ∂              ∂              d       
m ⋅ρ ⋅F(ρ, χ) - m ⋅ρ ⋅F(ρ, χ) - ρ ⋅───(F(ρ, χ)) - 3⋅ρ ⋅──(F(ρ, χ)) + 2⋅ρ ⋅───(F(ρ, χ)) + 4⋅ρ ⋅──(F(ρ, χ)) - ρ ⋅───(F(ρ, χ)) - ρ ⋅───(F(ρ, χ)) - ρ⋅──(F(ρ, χ)) + ───(F(ρ, χ))   ───(T(τ))
                                     2                 ∂ρ                   2                 ∂ρ                 2                 2              ∂ρ              2              2      
                                   ∂ρ                                     ∂ρ                                   ∂ρ                ∂χ                             ∂χ             dτ       
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── = ─────────
                                                                                  2                                                                                               T(τ)  
                                                                                 ρ ⋅F(ρ, χ)