4

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 関数に問題はありません。何か助けはありますか?

4

2 に答える 2

9

問題は、異なる名前空間で各パッケージをインポートする代わりに、スター インポートを使用していることです。

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

最終的に、sympy オブジェクトではなく float に適用する方法を知っている cos 関数のコピーが残ります。その関数を sympy オブジェクトに適用しようとするとphiAttributeError. 全体として、この特定の問題の解決策は、インポートを修正し、sympy の関数が必要か、numpy の関数が必要かを知ることです。

于 2012-11-12T00:08:46.623 に答える
2

cos関数をインポートしましたか?mathモジュールにあります

from math import cos

についても同じですsin

于 2012-11-11T23:48:05.113 に答える