Как решить ODE, содержащую как f (x), так и x, используя dsolve () - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь решить эту проблему, используя sympy.Однако dsolve() жалуется на мой ODE, содержащий несколько функций.У ODE есть r и u (r), что является проблемой.Я попытался решить ODE с помощью Matlab, и это сработало без проблем.

import numpy as np
import matplotlib.pyplot as plt
from sympy import *

init_printing(use_latex='mathjax')

r = Symbol('r')
u = Function('u')(r)

eps_r = u.diff(r)
eps_t = u/r

Eps = Matrix([[eps_r, 0 ,0],
          [0, eps_t, 0],
          [0,0,eps_t]
         ])

L, G = symbols('L G')

x,y = Matrix([1,0,0]),Matrix([0,1,0])

Sig = L*Eps.trace()*eye(3) + 2*G*Eps

sig_r = (x.T*Sig*x)[0]
sig_t = (y.T*Sig*y)[0]

eq1 = diff(sig_r,r) + (sig_r-sig_t)*2/r
eq1 = factor(eq1)
eq1 = eq1/(2*G+L)

dsolve(eq1,r)

Код Matlab:

syms u(r)

eps_r = diff(u,r);
eps_t = u/r;

Eps = [eps_r 0 0;
       0 eps_t 0;
       0 0 eps_t];

syms L G

Sig = L*trace(Eps)*eye(3) + 2*G*Eps;

x = [1;0;0];
y = [0;1;0];

sig_r = x'*Sig*x
sig_t = y'*Sig*y

eq1 = diff(sig_r,r) + 2/r*(sig_r-sig_t);
eq1 = simplify(eq1)/(2*G + L)

u = dsolve(eq1==0, r)

Ошибка при запуске dsolve(eq1,r):

ValueError: dsolve () и classify_ode () работают только с функциями одной переменной, но не r

Ожидаемый результат, сгенерированный с помощью matlab:

u (r) = C2 / r ^ 2 - (C1 * r) / 3

1 Ответ

0 голосов
/ 25 сентября 2019

Вторым аргументом dsolve должна быть функция (включая аргумент), которую вы хотите решить, например, f(x).В вашем случае это u(r), хотя, как ни странно, вы назвали это u так:

In [6]: dsolve(eq1, u)                                                                                                                         
Out[6]: 
       C₁       
u(r) = ── + C₂⋅r
        2       
       r 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...