从 python 中的定义函数中获取变量
Take variables from define function in python
我对在 def
中提取变量有疑问
例如,
def func(z,W):
A = z[1]
B = z[2]
C = z[3]
Var = k*B/C
dAdW = A*3
dBdW = B*2/Var
dCdW = C**2*Var**2
return dAdW, dBdW, dCdw
init = [0,0,1]
W = np.linspace(0,100,1000)
sol = odeint(func, init, W)
plt.plot(W,sol[:,0])
plt.plot(W,Var) # ----> this one
因为Var不是微分方程,
我不能将 Var 声明为 Var = z[4]
我试过使用全局,但它只产生最后一个值。
如何获取数组中 Var 的所有值以便绘制 Var?
k 是一个常数,如 1
感谢您的关注!
完整代码如下:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
alpha = 0.0002
Uapb = 0.5
deltaH = -20000
Cpa = Cpb = 20
Cpi = 40
Ea = 25000
Kc1 = 100 # @ T=303
k1 = 0.004 #@ T=310K
CPcool = 20
Fao = 5
Cao = 1
mc = 1000
R = 1.987
To = 330
def func(z,W):
pbar = z[0]
X = z[1]
Ta = z[2]
T = z[3]
k = k1*np.exp(Ea/R*(1/310-1/T))
Kc = Kc1 * np.exp(deltaH / R * (1 / 303 - 1 / T))
Ca = Cao * (1 - X) * To / T * pbar
Cb = Cao*(1-X)*To/T*pbar
Cc = 2*Cao*To/T*pbar
Ci = To/T*pbar
ra = k*(Ca*Cb-Cc**2/Kc)
dxdw = -ra/Fao
dpbardw = -alpha/(2*pbar)*T/To
dTadw = (Uapb)*(T-Ta)/(mc*CPcool)
dTdw = (Uapb*(Ta-T)+ra*deltaH)/(Fao*(Ca+Cb+Ci))
return dxdw, dpbardw, dTadw, dTdw
init = [1, 0, 320, 320]
W = np.linspace(0,4500,1000)
sol = odeint(func, init, W)
#Xe = (2 * Kc - ((2 * Kc) ** 2 - 4 * Kc * (Kc - 4)) ** (1 / 2)) / (2 * (Kc - 4))
plt.plot(W, sol[:,0])
#plt.plot(W, Xe)
要捕获每次调用的数据,您可以这样做:
capture_var = []
def func(z,W):
Var = ...
global capture_var
capture_var.append(Var)
请注意:这更像是一个 hack,如果您编写一些基本的脚本来解决一些小问题可能没问题。但是,如果您正在处理任何规模的代码库,请不要做这种事情,因为这些做法可能是维护的噩梦。
我对在 def
中提取变量有疑问例如,
def func(z,W):
A = z[1]
B = z[2]
C = z[3]
Var = k*B/C
dAdW = A*3
dBdW = B*2/Var
dCdW = C**2*Var**2
return dAdW, dBdW, dCdw
init = [0,0,1]
W = np.linspace(0,100,1000)
sol = odeint(func, init, W)
plt.plot(W,sol[:,0])
plt.plot(W,Var) # ----> this one
因为Var不是微分方程,
我不能将 Var 声明为 Var = z[4]
我试过使用全局,但它只产生最后一个值。
如何获取数组中 Var 的所有值以便绘制 Var?
k 是一个常数,如 1
感谢您的关注!
完整代码如下:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
alpha = 0.0002
Uapb = 0.5
deltaH = -20000
Cpa = Cpb = 20
Cpi = 40
Ea = 25000
Kc1 = 100 # @ T=303
k1 = 0.004 #@ T=310K
CPcool = 20
Fao = 5
Cao = 1
mc = 1000
R = 1.987
To = 330
def func(z,W):
pbar = z[0]
X = z[1]
Ta = z[2]
T = z[3]
k = k1*np.exp(Ea/R*(1/310-1/T))
Kc = Kc1 * np.exp(deltaH / R * (1 / 303 - 1 / T))
Ca = Cao * (1 - X) * To / T * pbar
Cb = Cao*(1-X)*To/T*pbar
Cc = 2*Cao*To/T*pbar
Ci = To/T*pbar
ra = k*(Ca*Cb-Cc**2/Kc)
dxdw = -ra/Fao
dpbardw = -alpha/(2*pbar)*T/To
dTadw = (Uapb)*(T-Ta)/(mc*CPcool)
dTdw = (Uapb*(Ta-T)+ra*deltaH)/(Fao*(Ca+Cb+Ci))
return dxdw, dpbardw, dTadw, dTdw
init = [1, 0, 320, 320]
W = np.linspace(0,4500,1000)
sol = odeint(func, init, W)
#Xe = (2 * Kc - ((2 * Kc) ** 2 - 4 * Kc * (Kc - 4)) ** (1 / 2)) / (2 * (Kc - 4))
plt.plot(W, sol[:,0])
#plt.plot(W, Xe)
要捕获每次调用的数据,您可以这样做:
capture_var = []
def func(z,W):
Var = ...
global capture_var
capture_var.append(Var)
请注意:这更像是一个 hack,如果您编写一些基本的脚本来解决一些小问题可能没问题。但是,如果您正在处理任何规模的代码库,请不要做这种事情,因为这些做法可能是维护的噩梦。