這一期講動(dòng)力系統(tǒng)
在準(zhǔn)備這一期教程的過程中我找到了一個(gè)挺有意思的課件零如,推薦給大家:
動(dòng)力系統(tǒng)建模-唐云(清華大學(xué)教授)
里面講到了一個(gè)很吸引目光的名詞:
蝴蝶效應(yīng)
大家應(yīng)該都知道蝴蝶效應(yīng)是個(gè)什么玩意兒燕鸽,但是蝴蝶效應(yīng)是怎么產(chǎn)生的呢秃流?
這次先不講蝴蝶效應(yīng)喉悴,我們先就這個(gè)動(dòng)力系統(tǒng)來講一講,算是個(gè)引子:
什么叫動(dòng)力系統(tǒng)呢廷痘,先說最簡(jiǎn)單的動(dòng)力系統(tǒng)殿较,講起來也是個(gè)很熟的公式:
an+1 = r × an + b(其中r≠1)
這不還是遞推公式嗎丰刊?
和上期的差分方程那個(gè)遞推公式不同的是泽裳,這個(gè)動(dòng)力系統(tǒng)有個(gè)被稱為平衡點(diǎn)的概念瞒斩。
廢話少說,先看一個(gè)最簡(jiǎn)單的實(shí)例:
實(shí)例1--血液中藥物水平試驗(yàn)
有一個(gè)醫(yī)生給病人開藥涮总,什么藥我不記得了胸囱,也不重要,就叫A吧妹卿,要求病人血液中的鈣離子濃度穩(wěn)定在一個(gè)有效的值旺矾,求如何開藥蔑鹦?
前提:
A在病人體內(nèi)原本就有。
不服藥的情況下箕宙,每一周的A濃度水平是前一周的一半嚎朽。
列式:
an+1 = 0.5 × an + b
這里為了方便畫圖我們先假設(shè)b = 1,先畫個(gè)圖看看柬帕。
那么式子變成:an+1 = 0.5 × an + 1
接下來我們分別取
a0 = 1
a0 = 2
a0 = 3
畫圖
python代碼如下:
# 先畫a<sub>0</sub> = 1:
import matplotlib.pyplot as plt
def drawCurve(Reagentperday,CurrentLevel):
RegentLevel = []
for i in range(15):
RegentLevel.append(CurrentLevel)
CurrentLevel = CurrentLevel * 0.5 + Reagentperday
Time = [i for i in range(15)]
print(Time,RegentLevel)
plt.plot(Time, RegentLevel)
for i in range(1,4):
drawCurve(1,i)
畫出的圖形是這樣的:
這個(gè)時(shí)候就出現(xiàn)了一個(gè)很神奇的事情:
無論初始水平是多少哟忍,采用這種服藥方式的話,最終藥物水平都會(huì)收斂于2.0這個(gè)值陷寝,即所謂平衡點(diǎn)
是這樣的嗎锅很,我們?cè)俣喈嫀讞l:
看來確實(shí)有這樣的規(guī)律。
那么變一下每天服藥的數(shù)量之后呢凤跑,我們將每天的服藥量作為變量來畫一下:
似乎對(duì)應(yīng)每個(gè)服藥方案都會(huì)有一個(gè)平衡點(diǎn)爆安。而且我們可以看到,對(duì)于每日服藥量±1的變動(dòng)會(huì)引起平衡點(diǎn)±2的變化仔引。
是不是呢扔仓,我們?cè)佼嬕幌虏煌幏桨冈诓煌跏紳舛认碌膱D像,得到下面這個(gè)酷炫的圖形:
這個(gè)地方可能是我顯卡有問題咖耘,截出來的圖不是很清晰
究竟是為什么呢翘簇?
下一期我們講講為什么,主要是依據(jù)文章開頭貼出來的動(dòng)力系統(tǒng)建模-唐云(清華大學(xué)教授)的ppt來用Python代碼講解儿倒。
就這樣結(jié)束了嗎版保??
熟悉高數(shù)的人肯定大呼上當(dāng)夫否。
因?yàn)?br>
an+1 = r × an + b
這個(gè)式子可以寫成:
an+1 + b/(r-1) = r × an + b + b/(r-1)
an+1 + b/(r-1) = r × [an +b/(r-1)]
可以判定[an + b/(r-1)]是一個(gè)公比為r的等比數(shù)列彻犁,當(dāng)r<1,且首項(xiàng)≠0時(shí)凰慈,必有a收斂于[a0+b/(r-1)]/(1-r)
動(dòng)力系統(tǒng)就這么簡(jiǎn)單嗎袖裕?
這只是一次的動(dòng)力系統(tǒng),那么二次的呢……