Python AttributeError:cos

aym*_*nbh 4 python nonlinear-functions

我试图使用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
Run Code Online (Sandbox Code Playgroud)

这是我的追溯:

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
Run Code Online (Sandbox Code Playgroud)

我正在使用sympy,numpy和pylab库.所以,我没有cos函数的问题.有帮助吗?

jor*_*eca 9

问题是使用星型导入而不是在不同的命名空间下导入每个包.

这将导入功能sympy.functions.elementary.trigonometric.cos下cos的名字:

from sympy import *
Run Code Online (Sandbox Code Playgroud)

之后,您<ufunc 'cos'>在名称下导入cos,覆盖以前的定义:

from scipy import *
Run Code Online (Sandbox Code Playgroud)

然后,它用cos完全相同函数的另一个副本(来自matplotlib包)覆盖前一个函数:

from pylab import *
Run Code Online (Sandbox Code Playgroud)

这也导入相同<ufunc 'cos'>但np.cos名称下.这是导入东西的正确方法:

import numpy as np
Run Code Online (Sandbox Code Playgroud)

最后,你留下了一个cos函数的副本,它知道如何将自己应用于浮点数,而不是同情对象.当你尝试应用该功能来表达对象,就像phi你得到的那样AttributeError.总而言之,这个特殊问题的解决方案是修复导入并知道你是想要来自sympy还是来自numpy的函数.