将最后一个迭代值赋给python中的变量

时间:2017-07-08 19:22:50

标签: python variables iteration

我有迭代的最后一组值:y1[i],y2[i],y3[i](通过耦合ODE的集成获得) 现在我需要将这些值分配给另一个变量:Y1,Y2,Y3然后在函数f(y,t)中使用这些变量(必须再次集成的ODE)。 这是我的代码的一部分:

#constants used
H = 2.27e-18
l = 1.5
G = 6.637*(10**(-11))
k = (8*3.14*G)**0.5
om_de = 0.75
omega_matter = 1 - om_de
w0 = -0.85
rho_c = 3*(H**2)/(k**2)
c = ((om_de*(1 + w0)*rho_c)/(H**2))**0.5
v0 = (om_de*(1 - w0)*rho_c)/(2*np.exp(-l*k))

#for iteration
p = 0.0
q = 1.0
n = 10000.0

def H(Y1,Y2,Y3):
    return -3*Y3*(H**2)*(omega_matter/(Y1**3) + (H**2)*(Y3**2)/(2.0*rho_c) + (v0*np.exp(-l*Y2*k))/(rho_c))**0.5 + (l*k*v0*np.exp(-l*Y2*k))/(H**2)

dH = (q-p)/n
Y1 = [y1[j]]
Y2 = [y2[j]]
Y3 = [y3[j]]
But I am not able to do any further operations on them.
  

TypeError:**或pow()不支持的操作数类型:'function'和   'INT'

不断出现。 完整代码的链接在这里: https://pastebin.com/mdQE29N9(可能有助于理解我要实现的目标,而且代码太冗长而无法在此处发布)

我认为问题在于我分配值的方式,但我不太确定。对于造成这种情况的原因以及我应该如何解决这个问题的任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

第57行有错误:

def F(Y1,Y2,Y3):
    return Y1*(omega_matter/(Y1**3) + (H**2)*(Y3**2)/(2.0*rho_c) + (v0*np.exp(-l*Y2*k))/(rho_c))**(1.0/2.0)
表达式H**2中的

,其中H被定义为第62行中的函数:

def H(Y1,Y2,Y3):
    ...

我猜你真的想说:H(Y1,Y2,Y3)**2

但这不是全部。第52行:

y1 == y1.append(y1[j] + (dh/6.0)*(k1 + 2.0*k2 + 2.0*k3 + k4))

无需测试y1None之间的等效性(即append()返回的内容)。我不确定你在这里尝试过什么,也许这个?

y1.append(y1[-1] + (dh/6.0)*(k1 + 2.0*k2 + 2.0*k3 + k4))

此外,要访问y1的最后一个元素(第66行),您可以使用否定索引:

Y1 = [y1[-1]]   # instead of: Y1 = [y1[j]]

答案 1 :(得分:2)

您有一个名为H的变量和一个名为H()

的函数
H = 2.27e-18

def H(Y1,Y2,Y3):
    return -3*Y3*(H**2)*(omega_matter/(Y1**3) + (H**2)*(Y3**2)/(2.0*rho_c) + (v0*np.exp(-l*Y2*k))/(rho_c))**0.5 + (l*k*v0*np.exp(-l*Y2*k))/(H**2)

更改变量的名称或其他内容的函数。

H_1 = 2.27e-18 #for example

正如@randomir所说,你可能也想看看他的回答

您可以通过简单的操作重现错误:

H = 5

def H(a,b):
  pass

print(H**3)
  

TypeError:**或pow()不支持的操作数类型:' function'和   ' INT'