如何使用dsolve()求解同时包含f(x)和x的ODE

时间:2019-09-24 21:24:44

标签: python sympy

我正在尝试使用sympy解决此ODE。但是dsolve() 抱怨我的ODE包含几个功能。 ODE 有r和u(r)怀疑是问题所在。我曾尝试使用Matlab解决ODE问题,但没有任何问题。

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 :(得分:0)

dsolve的第二个参数应该是您要求解的函数(包括参数),例如f(x)。在您的情况下,u(r)尽管令人困惑,但您将其称为u,因此:

In [6]: dsolve(eq1, u)                                                                                                                         
Out[6]: 
       C₁       
u(r) = ── + C₂⋅r
        2       
       r