система ОДУ simpy dsolve

Как я могу решить несколько ODE? sympy.dsolve возвращает те же константы интеграции, поэтому я не могу ее решить.

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sympy.interactive import printing
printing.init_printing(use_latex=True)
from sympy import *

x,l,F,k_0,q_0,n,a,C1,C2,C3,C4,Φ1,Φ2,D1,D2=symbols('x l F k_0 q_0 n a C1 C2 C3 C4 Φ_1 Φ_2 D1 D2')
n=5

q=0
k1=k_0
k2=n*k_0

eq1=Function('eq1')(x)
eq2=Function('eq2')(x)

w1=dsolve(k1.diff(x)*eq1.diff(x)+k1*eq1.diff(x,2)+q).rhs
w2=dsolve(k2.diff(x)*eq2.diff(x)+k2*eq2.diff(x,2)+q).rhs

display(w1)
display(w2)

Код возвращает:

????1+????2*????

????1+????2*????

Хотя я хотел бы что-то вроде:

????1+????2*????

????3+????4*????


person Mark    schedule 26.12.2019    source источник
comment
Почему бы не решить ее как систему? Обратите внимание, что k1 является константой, поэтому k1.diff(x) будет равно нулю. Кроме того, sympy не является полным для всех стандартных случаев скалярного ОДУ и довольно ограничен для систем ОДУ, особенно. нелинейные. Таким образом, даже в том редком случае, когда существует символьное решение для системы, есть лишь небольшой шанс, что sympy найдет его (правильно).   -  person Lutz Lehmann    schedule 26.12.2019


Ответы (1)


Я нашел это как ответ, но, возможно, есть что-то проще

char='D'
diff=k2.diff(x)*eq2.diff(x)+k2*eq2.diff(x,2)+q

def ODE(diff,char):
    func=dsolve(diff).rhs
    for i in range(1,len(func.free_symbols)):
        old=symbols('C{}'.format(i))
        new=symbols(char + '{}'.format(i))
        func=func.subs(old,new)
    return func

w2=ODE(diff,char)
display(w2)
person Mark    schedule 26.12.2019