簡體   English   中英

將最后一個迭代值分配給python中的變量

[英]Assigning the last iterated value to a variable in python

我有一個迭代的最后一組值: 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()不支持的操作數類型:“函數”和“整數”

不斷出現。 完整代碼的鏈接位於: https : //pastebin.com/mdQE29N9 (可能有助於理解我要實現的目標,並且代碼太長,無法在此處發布)

我認為問題出在我分配值的方式上,但不確定。 對於造成此問題的原因以及我應該如何解決的任何幫助,將非常有用。

您在第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]]

您有一個名為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()不支持的操作數類型:“函數”和“整數”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM