这是我第一次使用optimize.newton
功能。我正在定义一个
几个函数(LHS
,RHS
)及其积分(result_LHS
,
result_RHS
)。我使用result_LHS和result_RHS函数来定义一个
我希望找到零(function
)的新函数(称为T_a
)。
alb = 0.2 #constant albedo
F = 866 #J/s*m**2
R = 287 #J/K*kg
U = 5 #m/s
C_p = 1000 #J/K*kg
C_d = 0.0015
p1 = 10**4
p2 = 10**5
p3 = 10**6 #Pa
sig = 5.67*10**-8 #J/s*m**2*K**4 #Stefan-Boltzmann cst
def rho(T_a):
return p1/(R*T_a) #FIRST USING P = 10**4 Pa
def a(T_a):
return rho(T_a)*C_p*C_d*U
x0=230
def LHS(theta):
return (1-alb)*F*np.sin(theta)*np.cos(theta)
def result_LHS(theta):
return integrate.quad(lambda theta: LHS(theta), 0, pi/2)
def T_g(theta, T_a):
return np.roots(array([(sig),0,0,(a(T_a)),((-a(T_a)*T_a)-LHS(theta))]))[3]
def RHS(theta,T_a):
return sig*T_g(theta,T_a)**4*np.cos(theta)
def result_RHS(theta,T_a):
return integrate.quad(lambda theta: RHS(theta,T_a), -pi/2, pi/2)
def function(theta,T_a):
return 1-((result_LHS(theta)/result_RHS(theta,T_a)))
T_a_0 = scipy.optimize.newton(function,x0,fprime=None,args=(theta,),tol=(10**-5))
print T_a_0
以下是它的输出:
Traceback (most recent call last):
File "/Users/jadecheclair/Documents/PHY479Y/T_gvstheta.py", line 167, in <module>
T_a_0 = scipy.optimize.newton(function,x0,fprime=None,args=(theta,),tol=(10**-5))
NameError: name 'theta' is not defined
我在想我可能需要定义我的theta,这将是
theta=np.arange(-pi/2, pi/2, pi/20)
。但是因为我将它用作&#34; result_LHS&#34;中的集成变量。和&#34; result_RHS&#34;集成函数,我认为它应该保持变量。那么为什么python不接受theta是变量并且需要定义它的事实呢?
我非常感谢任何帮助!