导入SciPy失败

2 投票
2 回答
11123 浏览
提问于 2025-04-17 12:50

我正在尝试用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)

2 个回答

0

你可能也发现了这一点,除了larsmans提到的问题之外,scipy.optimize里没有sin和cos这两个函数。

8

你正在把 scipy.optimize 导入为 sc,然后你试图调用 sc.optimize.newton,这实际上就是 scipy.optimize.optimize.newton。我会这样做:

import scipy.optimize as opt

或者

import scipy.optimize as scopt

撰写回答