3.2.5.2 微分方程

SymPy可以解 (一些) 常规微分。要求解一个微分方程,使用dsolve。首先,通过传递cls=Function来创建一个未定义的符号函数:

In [38]:

  1. f, g = symbols('f g', cls=Function)

f 和 g是未定义函数。我们可以调用f(x), 并且它可以代表未知的函数:

In [39]:

  1. f(x)

Out[39]:

  1. f(x)

In [40]:

  1. f(x).diff(x, x) + f(x)

Out[40]:

  1. f(x) + Derivative(f(x), x, x)

In [41]:

  1. dsolve(f(x).diff(x, x) + f(x), f(x))

Out[41]:

  1. f(x) == C1*sin(x) + C2*cos(x)

关键词参数可以向这个函数传递,以便帮助确认是否找到最适合的解决系统。例如,你知道它是独立的方程,你可以使用关键词hint=’separable’来强制dsolve来将它作为独立方程来求解:

In [42]:

  1. dsolve(sin(x)*cos(f(x)) + cos(x)*sin(f(x))*f(x).diff(x), f(x), hint='separable')

Out[42]:

  1. [f(x) == -asin(sqrt(C1/cos(x)**2 + 1)) + pi,
  2. f(x) == asin(sqrt(C1/cos(x)**2 + 1)) + pi,
  3. f(x) == -asin(sqrt(C1/cos(x)**2 + 1)),
  4. f(x) == asin(sqrt(C1/cos(x)**2 + 1))]

练习

  • 求解Bernoulli微分方程

$x \frac{d f(x)}{x} + f(x) - f(x)^2=0$

  • 使用hint=’Bernoulli’求解相同的公式。可以观察到什么?