把Runge-Kutta方法求解Macky-Glass方程的结果做成数据集
时间: 2024-06-12 18:06:48 浏览: 242
数值求解常微分方程_runge-kutta方法_荣格库塔法_数值求解微分方程_隐式rungekutta_value7v2
5星 · 资源好评率100%
由于Macky-Glass方程是一个非线性微分方程,无法直接求解,需要使用数值方法。本文使用的是经典的四阶Runge-Kutta方法。
Macky-Glass方程的表达式为:
$$\frac{dx}{dt} = \frac{a(y-x)}{1+x^p}$$
$$\frac{dy}{dt} = bx-xz $$
$$\frac{dz}{dt} = xy-cz$$
其中,$a=0.2$,$b=0.1$,$c=8$,$p=10$。
使用四阶Runge-Kutta方法求解该方程的Python代码如下:
```python
import numpy as np
def macky_glass(t, X, a=0.2, b=0.1, c=8, p=10):
x, y, z = X
dxdt = a * (y - x) / (1 + x**p)
dydt = b * x - x * z
dzdt = x * y - c * z
return np.array([dxdt, dydt, dzdt])
def rk4(t, X, h, f):
k1 = h * f(t, X)
k2 = h * f(t + h/2, X + k1/2)
k3 = h * f(t + h/2, X + k2/2)
k4 = h * f(t + h, X + k3)
return X + (k1 + 2*k2 + 2*k3 + k4) / 6
# 设置初始条件和时间步长
X0 = np.array([1,1,1])
t0 = 0
tf = 100
h = 0.01
# 使用Runge-Kutta方法求解微分方程
t = [t0]
X = [X0]
while t[-1] < tf:
X.append(rk4(t[-1], X[-1], h, macky_glass))
t.append(t[-1] + h)
# 保存数据
data = np.hstack((np.array(t[:-1]).reshape(-1,1), np.array(X[:-1])))
np.savetxt("macky_glass_data.csv", data, delimiter=",")
```
上述代码中,`macky_glass`函数定义了Macky-Glass方程的右手边,`rk4`函数实现了四阶Runge-Kutta方法,`X0`和`t0`是初始条件,`tf`是求解的终止时间,`h`是时间步长。在求解过程中,不断调用`rk4`函数更新状态变量`X`和时间变量`t`,并将它们保存到`data`数组中。最后,使用`numpy.savetxt`函数将数据保存到文件中。
生成的数据集文件`macky_glass_data.csv`包含三列数据,第一列是时间,第二列是状态变量$x$的值,第三列是状态变量$y$的值,第四列是状态变量$z$的值。其中,时间从0到100,时间步长为0.01。
阅读全文