首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python AttributeError:cos

Python AttributeError:cos
EN

Stack Overflow用户
提问于 2012-11-12 06:19:44
回答 2查看 2.4K关注 0票数 4

我正在尝试用Python2.7来数值求解一个方程。下面是完整的代码:

代码语言:javascript
复制
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

这是我的回溯记录:

代码语言:javascript
复制
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函数有问题。有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-12 08:08:47

问题是使用星形导入,而不是在不同的名称空间下导入每个包。

这将在cos名称下导入函数sympy.functions.elementary.trigonometric.cos

代码语言:javascript
复制
from sympy import *

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

代码语言:javascript
复制
from scipy import *

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

代码语言:javascript
复制
from pylab import *

这也会以np.cos名称导入相同的<ufunc 'cos'>。这是正确的导入方式

代码语言:javascript
复制
import numpy as np

最后,只剩下cos函数的一个副本,它知道如何将自身应用于浮点数,而不是渐近对象。当您尝试将该函数应用于像phi这样的渐近对象时,您会得到AttributeError。总而言之,这个特定问题的解决方案是修复导入,并知道您是想要sympy中的函数还是numpy中的函数。

票数 9
EN

Stack Overflow用户

发布于 2012-11-12 07:48:05

你导入cos函数了吗?它在math模块中

代码语言:javascript
复制
from math import cos

sin也是如此。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13336048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档