2012-02-11 115 views
2

我想用SciPy解決一個使用Newton-Raphson的非常簡單的方程(開普勒方程)。然而,exectuing程序失敗,出現以下錯誤信息:導入SciPy不起作用

return sc.optimize.newton(f, meanAnomaly, f_prime, args=(), 
AttributeError: 'module' object has no attribute 'newton' 

顯然,雖然,我的Ubuntu 12.04下安裝SciPy的。來自scipy.test():

NumPy version 1.5.1 
NumPy is installed in /usr/lib/python2.7/dist-packages/numpy 
SciPy version 0.9.0 
SciPy is installed in /usr/lib/python2.7/dist-packages/scipy 
Python version 2.7.2+ (default, Jan 21 2012, 23:31:34) [GCC 4.6.2] 
nose version 1.1.2 

有什麼不對?這裏是我的代碼:

# File a 
from b import * 

print calculate_eccentric_anomaly(1,2) 

# File b 
def calculate_eccentric_anomaly(meanAnomaly, eccentricity): 
    import scipy.optimize as sc 

    def f(eccentricAnomaly): 
     return (eccentricAnomaly - eccentricity * 
       sc.sin(eccentricAnomaly) - meanAnomaly) 

    def f_prime(eccentricAnomaly): 
     return 1 - eccentricity * sc.cos(eccentricAnomaly) 

    return sc.optimize.newton(f, meanAnomaly, f_prime, args=(), 
           tol=1e-10, maxiter=50) 

回答

5

你要導入scipy.optimizesc,那麼你想打電話sc.optimize.newton,這將有效地scipy.optimize.optimize.newton。我會做

import scipy.optimize as opt 

import scipy.optimize as scopt 
+0

這是對的,愚蠢的初學者的錯誤。 – Ingo 2012-02-11 12:12:19

0

你可能已經想通了這一點了,但是除了這個問題larsmans指出,存在scipy.optimize沒有正弦/餘弦。

+0

的確如此。到現在爲止我已經知道了,但是謝謝你的評論。 – Ingo 2012-02-14 13:58:46

+1

是的,我主要補充說,爲了任何通過搜索引擎來到這裏的人的利益。 – rnorris 2012-02-14 20:53:58