wolf法求Lorenz系统李雅普诺夫指数代码
时间: 2023-08-22 19:10:02 浏览: 210
这里提供一个使用Python实现的Wolf法求Lorenz系统李雅普诺夫指数的代码,供参考:
```python
import numpy as np
from scipy.integrate import solve_ivp
# 定义Lorenz系统的ODE方程
def lorenz(t, y, sigma=10, beta=8/3, rho=28):
dxdt = sigma * (y[1] - y[0])
dydt = y[0] * (rho - y[2]) - y[1]
dzdt = y[0] * y[1] - beta * y[2]
return [dxdt, dydt, dzdt]
# 使用solve_ivp函数求解Lorenz系统的轨迹
t_span = [0, 100]
y0 = [1, 1, 1]
sol = solve_ivp(lorenz, t_span, y0, dense_output=True)
# 定义相邻点之间的距离函数
def dist(x1, x2):
return np.sqrt(np.sum((x1 - x2)**2))
# 定义Wolf法求李雅普诺夫指数的函数
def wolf(t, y, n=100, eps=1e-4):
d = np.zeros((n, 1))
for i in range(n):
# 选择相邻点
t1 = t + i
t2 = t + i + 1
x1 = y[:, t1]
x2 = y[:, t2]
# 计算相邻点之间的距离
d[i] = dist(x1, x2)
# 计算增长率
lamda = np.polyfit(np.arange(n), np.log(d), 1)[0]
if lamda < eps:
lamda = 0
return lamda
# 计算Lorenz系统的李雅普诺夫指数
t = 0
y = sol.sol(t)
lamda = 0
while t < 99:
t += 1
y_next = sol.sol(t)
lamda += wolf(t, np.vstack((y, y_next)))
y = y_next
lamda /= t
print('李雅普诺夫指数:', lamda)
```
这段代码包括了Lorenz系统的ODE方程的定义、使用solve_ivp函数求解轨迹、相邻点之间的距离函数的定义、以及Wolf法求李雅普诺夫指数的函数的定义。通过对Lorenz系统轨迹中的一系列相邻点进行计算,最终得到李雅普诺夫指数。
阅读全文