Python AttributeError:cos
问题内容:
我正在尝试使用Python2.7数值求解方程式。这是整个代码:
from sympy import *
from sympy import Symbol
from sympy.solvers import nsolve
from scipy import *
from pylab import *
import numpy as np
# Symbols
theta = Symbol('theta')
phi = Symbol('phi')
phi0 = Symbol('phi0')
H0 = Symbol('H0')
# Constants
a = 0.05
b = 0.05**2/(8*pi*1e-7)
c= 0.001/(4*pi*1e-7)
phi0 = 60*pi/180
H0 = -0.03/(4*pi*1e-7)
def m(theta,phi):
return np.array([sin(theta)*cos(phi), sin(theta)*cos(phi), cos(phi)])
def h(phi0):
return np.array([cos(phi0), sin(phi0), 0])
def k(theta,phi,phi0):
return np.vdot(m(theta,phi),h(phi0))
def F(theta,phi,phi0,H0):
return -(a*H0)*k(theta,phi,phi0)+b*(cos(theta)**2)+c*(sin(2*theta)**2)+sin(theta)**4*sin(2*phi)**2
def F_phi(theta,phi,phi0,H0):
return simplify(diff(F(theta,phi,phi0,H0),phi))
def G(phi):
return F_phi(pi/2,phi,phi0,H0)
solution = nsolve(G(phi), phi)
print solution
这是我的回溯:
Traceback (most recent call last):
File "Test.py", line 33, in <module>
solution = nsolve(G(phi), phi)
File "Test.py", line 32, in G
return F_phi(pi/2,phi,phi0,H0)
File "Test.py", line 30, in F_phi
return simplify(diff(F(theta,phi,phi0,H0),phi))
File "Test.py", line 28, in F
return -(a*H0)*k(theta,phi,phi0)+b*(cos(theta)**2)+c*(sin(2*theta)**2)+sin(theta)**4*sin(2*phi)**2
File "Test.py", line 26, in k
return np.vdot(m(theta,phi),h(phi0))
File "Test.py", line 22, in m
return np.array([sin(theta)*cos(phi), sin(theta)*cos(phi), cos(phi)])
AttributeError: cos
我正在使用sympy,numpy和pylab库。因此,我对cos函数没有任何问题。有什么帮助吗?
问题答案:
问题是使用星号导入,而不是在不同的名称空间下导入每个包。
此导入功能sympy.functions.elementary.trigonometric.cos
的cos
名称为:
from sympy import *
之后,<ufunc 'cos'>
以名称导入cos
,覆盖之前的定义:
from scipy import *
然后,它用cos
完全相同功能的另一个副本(来自matplotlib包)覆盖先前的功能:
from pylab import *
这也导入相同<ufunc 'cos'>
的np.cos
名称。 这是导入事物的正确方法 :
import numpy as np
最后,剩下的是cos函数的副本,该函数知道如何将自身应用于浮点数,而不是sympy对象。当您尝试喜欢该功能适用于sympy对象phi
你得到的AttributeError
。总而言之,解决此特定问题的方法是修复导入,并知道是要使用sympy的函数还是numpy的函数。