使用odeint中包含的函数scipy.integrate
。以下代码片段是等效的。这是使用 mpmath 的版本(包含在 sympy 中)
from sympy.mpmath import odefun
from matplotlib import pyplot as plt
f = odefun(lambda x, y: x / (x**2 + y**2)**1.5, 0, 1)
X = range(1000)
listx = [f(x) for x in X]
plt.plot(X, listx)
plt.show()
这是使用 NumPy 和 SciPy 的版本
import numpy as np
from scipy.integrate import odeint
from matplotlib import pyplot as plt
T = np.arange(1000)
xarr = odeint(lambda t, x: x / (x**2 + t**2)**1.5, 1, T)
plt.plot(T, xarr)
plt.show()
根据您要绘制的点,使用 NumPy 的linspace函数可能更容易,该函数可让您在两个值之间获取等距点。实际上,您只是在绘制通知,我确实必须交换参数的顺序。请注意,第二个版本使用 NumPy 数组而不是 Python 列表。如果您想了解有关 NumPy 和 SciPy 的更多信息,可以从scipy 讲义和 SciPy wiki 的numpy 教程开始。
根据您的需要,您还可以查看包含在scipy.integrate
.
我只建议在需要它提供的任意精度算术时使用 mpmath。如果普通的浮点运算足够好,那么 mpmath 将比您的许多其他选项慢得多。如果您仍然需要使用 mpmath,我建议您安装gmpy以加快速度。这会有所帮助,但使用 SciPy 仍然会快得多。