Вывод списка чисел вместо одного числа

1

Я столкнулся с проблемой, я новичок в этом использовании Python, надеюсь, что кто-то мне поможет в этом вопросе. У меня есть код с использованием алгоритма RungeKutta. Когда я print(vH), он печатает:

[70, 98.72259439054349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Как я мог 98.72259439054349, когда я пишу print(vH)? Это часть кода nrk=300 и nrk=300. Используя nrk мы имеем точный вывод, но с этим кодом, как вы видите, мы имеем 300 нулей в выходе.

def rk4(dH_func, H0, A, B, alpha, b, rho_de0, rho_dm0, z0, z1, nrk):

        if dH_func != False and drho_dm_func != False and drho_de_func != False :
           vH = [0] * (nrk + 1)

           h = (z1 - z0) / float(nrk)
           vH[0] = H = H0

           for i in range(1, nrk + 1):
               k1_H = h * dH_func(z, H, rho_de, rho_dm)

               k2_H = h * dH_func(z + 0.5 * h, H + 0.5 * k1_H, rho_de + 0.5 * k1_rho_de, rho_dm + 0.5 * k1_rho_dm)

               k3_H = h * dH_func(z + 0.5 * h, H + 0.5 * k2_H, rho_de + 0.5 * k2_rho_de, rho_dm + 0.5 * k2_rho_dm)

               k4_H = h * dH_func(z + h, H + k3_H, rho_de + k2_rho_de, rho_dm + k2_rho_dm)

               vH[i] = H = H + (k1_H + k2_H + k2_H + k3_H + k3_H + k4_H) / 6

               return vH
  • 1
    print(vH[1]) как это
  • 0
    Вы return в цикл for .
Показать ещё 2 комментария
Теги:
arrays
arraylist
output
runge-kutta

1 ответ

1
Лучший ответ

В вашей функции вы пишете:

for i in range(1, nrk + 1):
    # ...
    return vH

Таким образом, это означает, что в конце первой итерации вы немедленно возвращаете результат.

Если вы хотите, чтобы функция возвращала результат после завершения всех итераций, вы должны написать return vH вне тела цикла for, например:

for i in range(1, nrk + 1):
    # ...
return vH

Если вы хотите только напечатать второй элемент, вы должны напечатать его с помощью:

print(vH[1])
  • 0
    [70, 98.72259439054349, 144.72020358361797, 215.66663177218655, 269.9988586813829, 269.9988586813829, 269.9988586813829, ..... результат
  • 1
    @Ehsan: если вам нужен только второй элемент, вы должны напечатать его как print(vH[1]) .
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню