Python для цикла, не повторяющегося для i = 1,2, выводящего только первую итерацию - PullRequest
0 голосов
/ 10 апреля 2019

Я строю цикл for, используя метод Эйлера для дифференциальных уравнений. Однако цикл for не увеличивается, а отображает только значения для i = 0, а не для i = 1 или i = 2.

Я попытался вручную назначить все аргументы и восстановил цикл for.

import math

def Euler(a,b,N,alpha):
    h=(b-a)/N
    t=a
    w=alpha

    for i in range (0,N):
        w=w+h*(math.exp(t-w))
        t=a+(i*h)
        return t,w    
Euler(0,1,2,1)

Я ожидаю, что функция вернет результаты для i = 1 и i = 2

Ответы [ 2 ]

3 голосов
/ 10 апреля 2019

Как упоминается в комментариях pault, ваш возврат находится внутри цикла, что означает, что функция завершается на первой итерации.

Что вам, вероятно, нужно, это yield, что превратит функцию в генератор:

import math

def Euler(a,b,N,alpha):
    h=(b-a)/N
    t=a
    w=alpha

    for i in range (0,N):
        w=w+h*(math.exp(t-w))
        t=a+(i*h)
        yield t,w

for x, y in Euler(0,1,2,1):
    print(x, y)

>>> 0.0 1.1839397205857212
>>> 0.5 1.3369749844848988
0 голосов
/ 10 апреля 2019

Ваше возвращение в цикле for. Unindent return один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...