我正在尝试使用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
答案 0 :(得分:0)
dsolve的第二个参数应该是您要求解的函数(包括参数),例如f(x)
。在您的情况下,u(r)
尽管令人困惑,但您将其称为u
,因此:
In [6]: dsolve(eq1, u)
Out[6]:
C₁
u(r) = ── + C₂⋅r
2
r