2015-11-27 2 views
0

У меня есть две функции, которые я использую. Я пытаюсь сделать бифуркационную карту. Первая функция, которую я использую, составляет карту с использованием matplotlib.Хотя цикл выполняется один раз во время возврата, работает отлично во время печати [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 и вычисляет предел при х приближается большое количество (итерация). Мы берем последние 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 

Здесь все становится немного странным. когда я использую return и вызывается через функцию 'print_bifurcation_map', он запускается один раз и добавляет один раз. Однако, если я меняю return xn на «print xn», что есть в блоке кода, теперь он работает более корректно, хотя и очень медленно.

Так что я делаю неправильно в определении print_bifurcation_map или в функции run_logistic. Ниже приведена функция logistic_map.

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

ответ

1

возврат завершает функцию в этой точке и выводит возвращаемое значение. Поэтому после первой итерации ваше значение возвращается, а затем оно выполняется.

Что вы пытаетесь сделать с помощью функции 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

Смежные вопросы