2015-11-27 38 views
0

我有兩個我正在使用的函數。我正在嘗試製作分岔圖。我有第一個功能是使用matplotlib製作地圖。while循環在執行期間執行一次,在打印期間運行正常[python]

def print_bifurcation_map(initial,rmin,rmax,rstep,iterates,k): 
    xn_list = [] 
    r_list = [] 

    for r in np.linspace(rmin, rmax,rstep): 
     xn = [] 
     xn.append(run_logistic(initial,r,iterates)) 
     xn_list =xn_list + xn[-k:] 


     r_list = r_list + [r]*len(xn) 

什麼這個代碼是採取一系列Rs的和作爲x接近大量(迭代)計算極限。我們從列表中取出最後的k個數字。它調用下面的函數run_logistic。

def run_logistic(xn,r,iterates): 
    iteration = 1 
    while iteration <= iterates: 
     xn1 = logistic_map(xn,r) 
     iteration = iteration + 1 
     xn = xn1 
     print xn 

這裏是事情變得有點怪異的地方。當我通過函數'print_bifurcation_map'使用return和call時,它會運行一次並追加一次。但是,如果我將return xn更改爲現在代碼塊中的'print xn',它似乎運行得更正確,儘管速度非常緩慢。

那麼,我在print_bifurcation_map定義或run_logistic函數中做了什麼不正確。以下是logistic_map函數。

def logistic_map(xn,r): 
    xn1 = r*xn*(1-xn) 
    return xn1 

回答

1

return退出該函數並輸出返回的值。因此,在第一次迭代之後,您的值將在完成後返回。

你想用功能run_logistic返回一個最終值或所有取得的值?

如果你想那麼最終的價值 -

def run_logistic(xn,r,iterates): 
    iteration = 1 
    while iteration <= iterates: 
     xn1 = logistic_map(xn,r) 
     iteration = iteration + 1 
     xn = xn1 
    return xn # Put return outside while-loop to get final value 

否則,如果你想所有的值,然後創建一個列表,追加到並返回列表

def run_logistic(xn,r,iterates): 
    iteration = 1 
    xn_list = [] 
    while iteration <= iterates: 
     xn1 = logistic_map(xn,r) 
     iteration = iteration + 1 
     xn = xn1 
     xn_list.append(xn) 
    return xn_list # Put return outside while-loop to get full list of values 
+0

嘿,謝謝。我沒有意識到退出功能。我需要這個xn_list的所有值,所以我將不得不返回一個附加列表。謝謝你的幫助。 – user2723240