1
我在模擬指數衰減。爲什麼它不起作用?下面的代碼爲什麼我的指數衰減不起作用?
from math import *
from random import random
from time import sleep
class atom():
def __init__(self, pos):
self.pos = pos
self.isalive = True
class substance():
def __init__(self, halflife):
self.halflife = float(halflife)
self.rate = float(log(2)/self.halflife)
self.life = float(0)
self.probdecay = float(0)
self.struct = [atom(i) for i in range(100)]
self.isalive = True
print self.rate
def sim(self):
print self.probdecay
for i in range(len(self.struct)):
if self.struct[i].isalive:
if random() < self.probdecay:
self.struct[i].isalive = False
self.life += 1.0
self.probdecay = 1.0 - pow(1.0 - self.rate, self.life)
def getstr(self):
s = ""
for i in self.struct:
if i.isalive:
s += "o"
else:
s += " "
return s
s = substance(5)
while s.isalive:
s.sim()
print s.getstr()
sleep(1)
下面是輸出
0.138629436112
0.0
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
0.138629436112
oooooo o ooooooooooo oooooooo ooooooo o oooooooooooo oooooo oooooooo oooo ooo oooooooo oooo oooo
0.258040751667
o ooo o oo oo ooo o ooo o ooooo o oo oooooo o oooo oo oooo oo ooo ooo ooo ooo oo
0.360898143882
o o oo oo o ooo ooo o oo o o oo o o o o o ooo o o oo o o oo
0.449496473814
o o o o o o o o o o o o oo
0.525812467226
o o o o o o
0.591548817506
o o
0.648172174615
0.696945867656
0.738958091134
0.775146183762
顯然,這是不符合5.半衰期這是怎麼回事指數衰減?
爲什麼隨着時間而衰變概率的變化? – user2357112
指數概率分佈是[無記憶](http://en.wikipedia.org/wiki/Memorylessness),因此衰減概率不應改變。樣式註釋:在'sim'方法中,爲什麼要遍歷索引?做'for atom中的原子:如果atom.isalive和random()
Bakuriu
@Bakuriu我通常會發現它的食品實踐迭代indecies萬一我需要使用索引的東西。 –