【问题标题】:The output is list of numbers instead of one number输出是数字列表而不是一个数字
【发布时间】:2019-03-06 00:50:19
【问题描述】:

我遇到了这个问题,我是这种 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]

当我写print(vH) 时,我怎么能在输出98.72259439054349? 这是代码的 RungeKutta 部分和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

【问题讨论】:

  • print(vH[1]) 这样
  • returnfor循环中。
  • @WillemVanOnsem 一旦我想将return 带出循环,Python 不接受
  • @Ehsan:你得到了什么错误?也许你混合了制表符和空格,因为这是完全有效的。

标签: python arrays arraylist output runge-kutta


【解决方案1】:

在你的函数中你写:

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

这意味着在第一次迭代结束时,您会立即返回结果。

如果您希望函数在所有迭代完成后返回结果,您应该在for 循环的主体之外编写return vH outside,喜欢:

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

如果您只想打印 second 项,则应使用以下命令进行打印:

print(vH<b>[1]</b>)

【讨论】:

  • [70, 98.72259439054349, 144.72020358361797, 215.66663177218655, 269.9988586813829, 269.9988586813829, 269.9988586813829, ..... 结果
  • @Ehsan:如果你只想要第二个元素,你应该像print(vH[1])一样打印它。
  • 它可以作为一个常规数字自动用于其他计算吗?我的意思是 `ans=vH[1]`,我在接下来的所有计算中都使用 ans
  • @Ehsan: 是的,你获得了第二个元素,可以把它当作一个独立的元素(嗯,它是一个独立的元素:)
  • 最后一个问题,正如我按照您所说的将return 带出循环,为什么输出发生了变化?70, 98.72259439054349, 144.72020358361797, 215.66663177218655, 269.9988586813829
猜你喜欢
  • 2021-03-17
  • 2018-03-30
  • 2012-07-20
  • 2017-11-17
  • 2019-08-09
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多