Я столкнулся с проблемой, я новичок в этом использовании 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
В вашей функции вы пишете:
for i in range(1, nrk + 1):
# ...
return vH
Таким образом, это означает, что в конце первой итерации вы немедленно возвращаете результат.
Если вы хотите, чтобы функция возвращала результат после завершения всех итераций, вы должны написать return vH
вне тела цикла for
, например:
for i in range(1, nrk + 1):
# ...
return vH
Если вы хотите только напечатать второй элемент, вы должны напечатать его с помощью:
print(vH[1])
[70, 98.72259439054349, 144.72020358361797, 215.66663177218655, 269.9988586813829, 269.9988586813829, 269.9988586813829, .....
результат
print(vH[1])
.
print(vH[1])
как этоreturn
в циклfor
.