2012-11-11 71 views
2

我試圖用Python2.7在數值上求解一個方程。這是整個代碼:Python屬性錯誤:cos

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函數的問題。任何幫助?

+2

請包括完整的追溯;在這裏沒有任何屬性訪問*引起異常,所以我們也可能會丟失一些代碼。 –

+0

對不起,我認爲我包含的代碼是足夠的。我編輯帖子以包含整個代碼和回溯。 – aymenbh

+0

修復導入後,IndexError可能會消失,因爲它具有相同的原因。如果它不只是讓我知道在評論! – jorgeca

回答

7

問題是使用星形導入,而不是在不同名稱空間下導入每個軟件包。

cos名此導入功能sympy.functions.elementary.trigonometric.cos

from sympy import * 

之後,導入<ufunc 'cos'>cos下,覆蓋以前的定義:

from scipy import * 

然後,它會覆蓋前cos函數完全相同的函數的另一個副本(從matplotlib包):

from pylab import * 

這也輸入相同的<ufunc 'cos'>但在np.cos名下。 這是進口的東西的正確方法:

import numpy as np 

最後,你留下了一個知道如何讓自己在漂浮,不sympy對象餘弦函數的副本。當您嘗試將該函數應用於phi等sympy對象時,您將獲得AttributeError。總而言之,解決這個問題的辦法是修復導入,並知道你是否想要sympy的函數或者numpy的函數。

+0

我剛剛從sympy進口,IndexError消失,但我仍然有一個問題,我將在另一篇文章中解決。 – aymenbh

1

您是否導入cos功能?這是math模塊

from math import cos 

同樣的事情sin

+0

當我嘗試從數學模塊導入函數時,我得到幾乎相同的回溯,出現此錯誤:「File」/usr/lib64/python2.7/site-packages/sympy/core/expr.py「,第221行,in __float__ raise TypeError(「無法將表達式轉換爲浮點數」) TypeError:無法將表達式轉換爲浮點數「。但是,當我從sympy中導入它們時,我得到這個:「File」/usr/lib64/python2.7/site-packages/numpy/lib/function_base.py「,第984行,在diff slice1 [axis] = slice( 1,無) IndexError:列表分配索引超出範圍「 – aymenbh

+0

他導入了4次...(同名3個)。修復後,他留下了其他問題(IndexError),但也許這應該是一個不同的問題? – jorgeca