複雜現象背後的推動力,可能是極其簡單的原理。科學的目標之一就是發現紛繁複雜的自然現象背後的簡單法則。愛因斯坦的相對論是這方面的典範例證。
很早的時候,生物學家觀察某區域某種昆蟲的數量(稱爲蟲口數)之逐年變化規律,就十分迷惑:有的時候是逐漸增多達到一個平衡值。有的時候在兩個數字間週期跳動。有的時候則進入一片混亂,類似隨機數字一樣變化(稱爲混沌現象)。
慢慢地,人們從數學中更清晰地觀察到了這一現象,並因此開創了:符號動力學、非線性動力學等研究領域。
一個著名的蟲口數目簡化模型如下:
x' = x * (1 - x) * r
這裏,x x' r 都是浮點數。
其中,x 表示當年的蟲口數,x' 表示下一年的蟲口數。它們的取值範圍在 0 與 1 之間,實際上表示的是:蟲口的總數佔環境所能支持的最大數量的比率。
r是常數(環境參數),r的取值範圍在 [0,4]。
令人驚訝的是:這個簡單的迭代公式有着不同尋常的神祕性質!
一般來說,多次迭代後,蟲口數的穩定模式與x的初始值無關,而與 r 有關!
例如:無論x初始值是多少,當 r =2.5 的時候,x 多次迭代後會趨向於 0.6。
而當 r = 3.2 的時候,x 的值會趨向於在 0.799與 0.513 之間週期性擺動。
那麼,r = 3.62 的時候,你觀察到有什麼週期現象發生嗎?
思路:在0到1的範圍內選一個值賦給x,r=3.62。具體程序如下。將所得結果用excel表格做出散點圖,可得出結論:x的值[0.3,0.6]和[0.8,0.9]兩個區間內隨機性變化。
publicclassMain
{
publicstaticvoid main(String args[])
{
double x = 0.3;
double r = 3.62;
f(x,r);
}
staticintcount = 100; // 執行100次退出
publicstaticvoid f(double x,double r)
{
if(count<=0) return;
x= x * (1 - x) * r;
System.out.println(x);
count--;
f(x,r);
}
}