我正在学习如何将python SymPy与SciPy相结合来数值求解常微分方程。然而,对于如何将一阶ODEs系统的SymPy形式转换成可以用scipy.integrate.odeint()处理的格式,我有点不知所措
因此,另一篇文章是一个更复杂的例子,用户希望使用Theano或其他一些库来加速对ODE的计算。我只是想了解SymPy和SciPy之间的基本接口,所以这篇文章一点也没有帮助。在
作为一个有趣的例子,我使用Lotka-Volterra方程来测试SymPy的使用。公式如下:
我可以用Scipy的传统方法来解决这个问题,它很有效。这是工作代码。在import numpy as np
import scipy
from scipy.integrate import odeint, ode, solve_ivp
import sympy
import matplotlib.pyplot as plt
sympy.init_printing()
def F_direct(X, t, args):
F = np.zeros(2)
a, b, c, d = args
x,y = X
F[0] = a*x - b*x*y
F[1] = c*x*y- d*y
return F
argst = [0.4,0.002,0.001,0.7]
xy0 = [600, 400]
t = np.linspace(0, 50, 250)
xy_t, infodict = odeint(F_direct, xy0, t, args=(argst,), full_output=True)
plt.plot(t, xy_t[:,1], 'o', t, xy_t[:,0])
plt.grid(True)
plt.xlabel('x'); plt.ylabel('y')
plt.legend(('Numerical', 'Exact'), loc=0)
plt.show()
现在我有点迷惘了,不知道该怎么做。我知道该做什么,但不知道该怎么做。我发现的唯一一个例子就是太复杂了,无法学习。这是我所拥有的。在
^{pr2}$
我应该把这些方程放入某种系统形式,然后使用sympy.lambdify函数来返回一个新函数,我可以传递给odeint
所以,有人能填补我如何设置这个ode1,ode2系统来处理SymPy的空白吗。在