3.2.5.2 微分方程
SymPy可以解 (一些) 常规微分。要求解一个微分方程,使用dsolve
。首先,通过传递cls=Function来创建一个未定义的符号函数:
In [38]:
f, g = symbols('f g', cls=Function)
f 和 g是未定义函数。我们可以调用f(x), 并且它可以代表未知的函数:
In [39]:
f(x)
Out[39]:
f(x)
In [40]:
f(x).diff(x, x) + f(x)
Out[40]:
f(x) + Derivative(f(x), x, x)
In [41]:
dsolve(f(x).diff(x, x) + f(x), f(x))
Out[41]:
f(x) == C1*sin(x) + C2*cos(x)
关键词参数可以向这个函数传递,以便帮助确认是否找到最适合的解决系统。例如,你知道它是独立的方程,你可以使用关键词hint=’separable’来强制dsolve
来将它作为独立方程来求解:
In [42]:
dsolve(sin(x)*cos(f(x)) + cos(x)*sin(f(x))*f(x).diff(x), f(x), hint='separable')
Out[42]:
[f(x) == -asin(sqrt(C1/cos(x)**2 + 1)) + pi,
f(x) == asin(sqrt(C1/cos(x)**2 + 1)) + pi,
f(x) == -asin(sqrt(C1/cos(x)**2 + 1)),
f(x) == asin(sqrt(C1/cos(x)**2 + 1))]
练习
- 求解Bernoulli微分方程
$x \frac{d f(x)}{x} + f(x) - f(x)^2=0$
- 使用hint=’Bernoulli’求解相同的公式。可以观察到什么?