|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
一篇挺有意思的文章《聆聽混沌的聲音》(轉) |
| 作者:mohanwei 欄目:技術交流 |
今天整理硬盤,看到一篇挺有意思的文章《聆聽混沌的聲音》,忍不住做了一個 實驗,實驗結果和作者描述的差不多,呵呵。 以下是原文以及源程序,后面還有一個壓縮包,內有源程序和可執(zhí)行文件。如果 讀者手頭沒有編譯器,直接運行里面的程序就可以了(你得保證你的機器里有 一個峰鳴器)。 /********************************************************************** 聆聽混沌的聲音 本世紀70年代初,美國普林斯頓大學的生態(tài)學家R·May在研究昆蟲群體繁殖規(guī)律時提出 一個著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])其中χ[n]表示第n代群體的數(shù)目。 當給定一個初始的χ[0]值,然后不停地迭代,人們發(fā)現(xiàn)隨著k值的不同,得到的序列χn 有許多有趣的現(xiàn)象。當k值介于0與1之間時,χ[n]經(jīng)過一定次數(shù)的迭代后都趨于0。 當k值介于1和3之間時趨于1/k,當k值大于3時,經(jīng)過一定次數(shù)的迭代后χ[n]在2個值 之間交替變化,k值增加到3.449附近時,交替變化值又變?yōu)?個。繼續(xù)增加k值,χ[n] 交替變化的值的個數(shù)依4→8→16→32的次序迅速加倍,終于一片混沌。但當k值在3.835 附近時,經(jīng)過一定次數(shù)的迭代后,χ[n]非常簡單地在3個值之間交替變化,接著又迅速 依3→6→12的次序迅速增長。如此反復,在簡單的方程中隱藏著令人驚奇的復雜性。 χ[n]隨k的變化情況如下圖所示: 為了體現(xiàn)這種復雜之中的無窮奧妙,下面這個用TC2.0編寫的小程序用χ[n]大小來控制 PC喇叭的發(fā)音頻率,設定不同的k值,我們就可以聆聽到混沌的聲音。 執(zhí)行下面的小程序時,k值就相當于一個“調音旋鈕”。當將k值設定在1與3之間時, 喇叭里傳出的只有一個音調,重復又煩人。當k值稍稍大于3時,便開始有了韻律: so-mi-so-mi…。k值增加到3.449時,變成了so-fa-la-mi-so-fa-la-mi…, 再增加k值,韻律更加復雜,終于成了現(xiàn)代抽象派作曲家的音樂作品。但是韻律并不是 隨著k值的增加無限地復雜下去。在k值增加到3.835時,音調又變成了 mi-so-ti-mi-so-ti…,再增加k值又迅速地變得更加復雜。 不停地改變k值,仔細聆聽,會聽到混沌中的無限奧妙。(甘肅梁昌霖) **********************************************************************/ /********************************************************************** 程序名稱:聆聽混沌的聲音 平 臺:TC++ 3.0 作 者:AMO Email :amo73@126.com 日 期:2007-1-27 備 注:這是一個很有趣的小程序。 參考“梁昌霖”(先生/女士?)發(fā)表的程序,做了很多改進。 AMO不打算擁有程序版權,歡迎大家自由傳播^_^ **********************************************************************/ #include <dos.h> #include <stdio.h> #include <conio.h> main() { int fMin=20,fMax=16000; /*fMin代表最低頻率,fMax代表最高頻率*/ int fDis,i; /*fDis代表最高頻率和最低頻率之間的差值,i用于循環(huán)記數(shù)*/ float x=0.1,k; /*x代表x[n]的大小,設定其初始值為0.1,即x[0]=0.1*/ CHAR ch; fDis=fMax-fMin; clrscr(); while(1) { printf("Please input The VALUE of k(1-4.0)\n"); /*輸入k值*/ printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/ scanf("%f",&k); if (k==0) { break; } else if((k<1)||(k>4.0)) { printf("The NUMBER must be: 1<k<4\n\n"); continue;//輸入有誤,繼續(xù)輸入。 } for(i=1;i<100;i++) /*去掉開始的100個點*/ { x=k*x*(1-x); } for (i=1;i<100;i++) { x=k*x*(1-x); /*計算x的值*/ sound(x*fDis+20); /*用x的值控制PC喇叭的發(fā)音頻率*/ delay(1000); if (kbhit())//kbhit()檢測是否有按鍵事件,如果沒有按鍵,則返回0; { ch=getch();//讀取按鍵值 SWITCH(ch) { case 27: nosound();//關閉聲音 return(0);//ESC退出 } break; } } nosound();//關閉聲音 clrscr();//清屏 } nosound(); return(0); } 以下是程序: http://pdf.18ic.com/upload/2007-1/28/2007128193243.zip http://pdf.18ic.com/upload/2007-1/28/2007128193243.zip |
| 2樓: | >>參與討論 |
| 作者: bsbjx 于 2007/1/29 14:10:00 發(fā)布:
混沌??? O擔心人也跟著混沌了. |
|
| 3樓: | >>參與討論 |
| 作者: chunyang 于 2007/1/29 14:28:00 發(fā)布:
呵呵,哪天試試 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |