混沌数学之离散点集图形DEMO

混沌现象其基本含义可以概括为:聚散有法,周行而不殆,回复而不闭。意思是说混沌轨道的运动完全受规律支配,但相空间中轨道运动不会中止,在有限空间中永远运动着,不相交也不闭合。浑沌运动表观上是无序的,产生了类随机性,也称内在随机性。

混沌系统具有三个关键要素:一是对初始条件的敏感依赖性;二是临界水平,这里是非线性事件的发生点;三是分形维,它表明有序和无序的统一。混沌系统经常是自反馈系统,出来的东西会回去经过变换再出来,循环往复,没完没了,任何初始值的微小差别都会按指数放大,因此导致系统内在地不可长期预测。

这一节带来的是一个生成混沌离散点集图形的DEMO,里面含有多个不同方程生成的混沌图形.在这个DEMO中,会看到由点集生成的看得出规律的及看不出规律的图形.

下载地址为:http://files.cnblogs.com/WhyEngine/chaos.7z

-------------------------------------------------------------

在这种离散点集的混沌图形中,使用迭代的方法生成顶点数据: 
在中学课本中我们学过,一个一元函数,通常可以表示为: Y=f(x) 这里X是自变量,Y是因变量。
例如: Y=3X+1,如果X=1,那么Y=4;如果X=4,那么Y=13;总之,如果X被确定,那么相应的Y也被确定。

我们用一个抽象的符号F,来表示Y遵循X变化的因果关系。废话连篇的解释是:数字Y随数字X的变化而变化,Y由X来决定,决定的依据是“关系”F。

如果我们利用某个关系函数,比如Y=F(X),代入一个X算出一个Y,又将Y作为新的X再次计算下一个Y………如此不断,这种方法在数学上称为迭代,具体的表达式是: Xn =F(X n-1 ),n=1,2,3……..

学过程序的人一定知道"费波那齐数列",它算是比较典型的Xn =F(X n-1 )方程的例子。不过这种方程不是收敛的,所以它的图形几下就会爆表。

OK,那先帖下我写的有关这种离散方程对象的基类定义代码:

 1 #define SET_GET_FLOAT_PROPERTY(name)  2     void Set##name##(float v) 3     { 4         m_##name## = v; 5     } 6     float Get##name##() const 7     { 8         return m_##name##; 9     }
10
11 #define PI 3.14159265f
12
13 // --------------------------------------------------------------------------------------
14
15 class DiscreteEquation
16 {
17 public:
18     DiscreteEquation()
19     {
20         m_StartX = 0.0f;
21         m_StartY = 0.0f;
22
23         m_ParamA = 0.0f;
24         m_ParamB = 0.0f;
25         m_ParamC = 0.0f;
26         m_ParamD = 0.0f;
27         m_ParamE = 0.0f;
28     }
29
30     // 求迭代值
31     virtual void IterateValue(float y, float z, float& outY, float& outZ) const = NULL;
32
33     // 计算点集的Z轴坐标
34     static void CalculatePointsZ(void* curveVerticesPtr, unsigned int stride, unsigned int count, float minZ, float maxZ)
35     {
36         char* zPtr = (char*)curveVerticesPtr + 2*sizeof(float);
37         float zStep = (maxZ - minZ)/(count - 1);
38
39         for (unsigned int i = 0; i < count; i++)
40         {
41             *(float*)zPtr = minZ + i*zStep;
42             zPtr += stride;
43         }
44     }
45
46     // 计算点集的Y轴与X轴坐标
47     virtual void CalculatePointsXY(void* curveVerticesPtr, unsigned int stride, unsigned int count)
48     {
49         char* xPtr = (char*)curveVerticesPtr;
50         char* yPtr = (char*)curveVerticesPtr + sizeof(float);
51
52         float y, x;
53         float nx, ny;
54
55         x = m_StartX;
56         y = m_StartY;
57
58         for (unsigned int i = 0; i < count; i++)
59         {
60             *(float*)xPtr = x;
61             *(float*)yPtr = y;
62
63             IterateValue(x, y, nx, ny);
64
65             x = nx;
66             y = ny;
67
68             xPtr += stride;
69             yPtr += stride;
70         }
71     }
72
73     SET_GET_FLOAT_PROPERTY(StartX);
74     SET_GET_FLOAT_PROPERTY(StartY);
75
76     SET_GET_FLOAT_PROPERTY(ParamA);
77     SET_GET_FLOAT_PROPERTY(ParamB);
78     SET_GET_FLOAT_PROPERTY(ParamC);
79     SET_GET_FLOAT_PROPERTY(ParamD);
80     SET_GET_FLOAT_PROPERTY(ParamE);
81
82     virtual bool IsValidParamA() const {return false;}
83     virtual bool IsValidParamB() const {return false;}
84     virtual bool IsValidParamC() const {return false;}
85     virtual bool IsValidParamD() const {return false;}
86     virtual bool IsValidParamE() const {return false;}
87
88 protected:
89     float m_StartX;
90     float m_StartY;
91
92     float m_ParamA;
93     float m_ParamB;
94     float m_ParamC;
95     float m_ParamD;
96     float m_ParamE;
97 };

每一种混沌点集图形,在程序中都是DiscreteEquation对象的子类.

目前,我已经实现了以下几种混沌方程,将在后来的章节中一一介绍:

(1)Logistic_equation
(2)Henon_equation
(3)Baker_equation
(4)Circuit_Chaotic
(5)Arnold_equation
(6)Standard_equation
(7)Feigenbaum_equation
(8)Biology_Chaotic

时间: 2024-10-28 21:17:32

混沌数学之离散点集图形DEMO的相关文章

混沌数学之logistic模型

logistic回归又称logistic回归分析,主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率. 相关DEMO参见:混沌数学之离散点集图形DEMO logistic的用途: 一.寻找危险因素,正如上面所说的寻找某一疾病的危险因素等. 二.预测,如果已经建立了logistic回归模型,则可以根据模型,预测在不同的自变量情况下,发生某病或某种情况的概率有多大. 三.判别,实际上跟预测有些类似,也是根据logistic模型,判断某人属于某病或属于某种

混沌数学及其软件模拟

这几天在研究混沌,并写了些程序将网上能找到的各种混沌模型以图形的形式显示出来. (一)混沌介绍 混沌(Chaos)是指发生在确定系统中的貌似随机的不规则运动,长期以来,人们在认识和描述运动时,大多只局限于线性动力学描述方法,即确定的运动有一个完美确定的解析解.但是自然界在相当多情况下,非线性现象却起着很大的作用.混沌指确定性系统产生的一种对初始条件具有敏感依赖性的回复性非周期运动.混沌理论隶属于非线性科学,只有非线性系统才能产生浑沌运动.1963年美国气象学家Lorenz在分析天气预报模型时,首

混沌数学之二维logistic模型

上一节讲了logistic混沌模型,这一节对其扩充一下讲二维 Logistic映射.它起着从一维到高维的衔接作用,对二维映射中混沌现象的研究有助于认识和预测更复杂的高维动力系统的性态.通过构造一次藕合和二次祸合的二维Logistic映射研究了二维Logistic映射通向混沌的道路,分析了其分形结构和吸引盆的性质,指出选择不同的控制参数,二维映射可分别按Feigenbaum途径等走向混沌,并且指出在控制参数空间中的较大的区域. 二维滞后Logistic映射的数学方程为: x(n+1)=y(n);y

混沌数学之ASin模型

相关软件:混沌数学之离散点集图形DEMO 相关代码: class ASinEquation : public DiscreteEquation { public: ASinEquation() { m_StartX = 0.0f; m_StartY = PI*0.5f; m_ParamA = 0.5f; m_ParamB = 1.0f; } void IterateValue(float x, float y, float& outX, float& outY) const { outX

混沌数学之Standard模型

相关软件混沌数学之离散点集图形DEMO 相关代码: class StandardEquation : public DiscreteEquation { public: StandardEquation() { m_StartX = 0.25f; m_StartY = 0.25f; m_ParamA = 1.0f; } void IterateValue(float x, float y, float& outX, float& outY) const { outX = fmodf(x +

混沌数学之Feigenbaum模型

1975年,物理学家米切尔·费根鲍姆(Mitchell Feigenbaum)发现,一个可用实验加以测 量的特殊数与每个周期倍化级联相联系.这个数大约是4.669,它与π并列成为似乎在数学及其与自然界的关系中都有非同寻常意 义的离奇数之一.费根鲍姆数也有一个符号:希腊字母δ.数π告 诉我们圆周长如何与圆的直径相关.类似地,费根鲍姆数δ告诉我们水滴周期如何与水的流速相关.准确地说,你必须通过这个额外量旋开水龙头,在每次周期倍化时减小 1/4.669. π是与圆有关的任何东西的一个定量特征.同理,费

混沌数学之Arnold模型

相关软件混沌数学之离散点集图形DEMO 相关代码: class ArnoldEquation : public DiscreteEquation { public: ArnoldEquation() { m_StartX = 0.25f; m_StartY = 0.25f; } void IterateValue(float x, float y, float& outX, float& outY) const { outX = fmodf(x + y, 1.0f); outY = fmo

混沌数学之拉比诺维奇-法布里康特方程(Rabinovich-Fabrikant equations)

拉比诺维奇-法布里康特方程(Rabinovich-Fabrikant equations)是 1979年苏联物理学家拉比诺维奇和法布里康特提出模拟非平衡介 质自激波动的非线性常微分方程组: dot{x} = y (z - 1 + x^2) + \gamma x dot{y} = x (3z + 1 - x^2) + \gamma y dot{z} = -2z (\alpha + xy) 其中 α, γ 是控制系统的参数. Danca and Chen指出由于拉比诺维奇-法布里康特方程包含平方项,

混沌数学之Chua&#39;s circuit(蔡氏电路)

蔡氏电路(英语:Chua's circuit),一种简单的非线性电子电路设计,它可以表现出标准的混沌理论行为. 在1983年,由蔡少棠教授发表,当时他正在日本早稻田大学担任访问学者[1].这个电路的制作容易程度使 它成为了一个无处不在的现实世界的混沌系统的例子,导致一些人声明它是一个“混沌系统的典范”. 通过电磁学定律的应用,蔡氏电路可以被准确的建立数学模型:这是变量x(t), y(t),和z(t)的一个三个非线 性常微分方程的系统,分别是在电容C1和C2上的电压,和在电感L1上的电流强度.这些