带参数的optimize.newton问题

时间:2015-02-18 17:46:51

标签: python python-2.7 optimization scipy

这是我第一次使用optimize.newton功能。我正在定义一个 几个函数(LHSRHS)及其积分(result_LHSresult_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是变量并且需要定义它的事实呢?

我非常感谢任何帮助!

0 个答案:

没有答案