我想生成陈的超混沌序列。公式如下所示:Chen's hyperchaotic sequence equations
我写的代码附在后面
import math
a = 36
b = 3
c = 28
d = 16
k = 0.2
def chen(x0, y0, z0, q0):
xdot = a * (y0 - x0)
ydot = (-x0 * z0) + (d * x0) + (c * y0) - q0
zdot = (x0 * y0) - (b * z0)
qdot = x0 + k
return xdot, ydot, zdot, qdot
def chaotic_seq(x0, y0, z0, q0, length):
for i in range(length):
xdot, ydot, zdot, qdot = chen(x0, y0, z0, q0)
if math.isnan(xdot) or math.isnan(ydot) or math.isnan(zdot) or math.isnan(qdot):
print(i)
x0 = xdot
y0 = ydot
z0 = zdot
q0 = qdot
if __name__ == '__main__':
x0 = 0.3
y0 = -0.4
z0 = 1.2
q0 = 1
length = 2048
chaotic_seq(x0=x0, y0=y0, z0=z0, q0=q0, length=length)
我面临的问题是,在“I=11”之后,所有值(xdot、ydot、zdot、qdot)都是NaN
我想你有几个问题
其中一个原因是,Python
float
返回nan
值,因此您的函数似乎很快就会遇到溢出错误,因此您需要一种比Python内置数据类型提供的默认float
支持更高精度值的数据类型。因此,您可以考虑使用numpy
库的float128
数据类型(如下所示),或者研究使用decimal
模块(未显示)其次,点符号表示输入变量中的变化率。例如,
xdot
是差分表达式dx/dt
的简写符号您可以添加一个时间增量变量(例如,
t
),该变量以小增量更改x0
、y0
、z0
和q0
的值,模拟它们各自的差异以下是脚本的修改版本,可运行2048次迭代:
您的代码远远没有达到您的期望:您将不得不在某个点上求解该微分方程,而在上面的示例中,您没有这样做。这就解释了为什么你的价值观会很快偏离到无穷远,然后开始变成“南”
使用scipy求解微分方程,我们得到以下代码,该代码给出了令人满意的结果:
相关问题 更多 >
编程相关推荐