我遇到了问题,我是这种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
的RungeKutta部分。使用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
答案 0 :(得分:1)
在您的函数中编写:
for i in range(1, nrk + 1):
# ...
return vH
因此,这意味着在第一次迭代结束时,您将立即返回结果。
如果您希望函数在所有迭代完成后返回结果 ,则应将{{1 }}循环,例如:
return vH
如果只想打印 second 项目,则应使用以下命令进行打印:
for