【问题标题】:optimize in scipy iPython error在 scipy iPython 错误中优化
【发布时间】:2013-04-02 02:15:10
【问题描述】:

在 Jamie 对 post 的帮助之后,我知道我需要使用 scipy.optimize。但是,我不断收到以下错误:

Traceback (most recent call last):
  File "./hw7problem5.py", line 19, in <module>
    print(max_R)
NameError: name 'max_R' is not defined


#!/usr/bin/env python
#  Plotting the energy for circular Hohmann transfer

import scipy
import matplotlib
import numpy as np
import pylab


def f(R):
    return ((1 / np.sqrt(R)) - ((np.sqrt(2) * (1 - R)) / (np.sqrt(2)
        * (1 + R))) - 1)
    max_r = scipy.optimize.fmin(lambda r: 1 / f(r), 20)

x = np.arange(1, 25, 0.001)
pylab.plot(x, f(x), 'r')
pylab.show()

print(max_R)

【问题讨论】:

    标签: optimization scipy ipython


    【解决方案1】:

    max_R 应该是 max_r。 Python 区分大小写。

    您也没有将函数的结果存储在任何地方:

    x = np.arange(1, 25, 0.001)
    max_r = f(x)
    
    pylab.plot(x, max_r, 'r')
    pylab.show()
    
    print(max_r)
    

    【讨论】:

    • 我的输出窗口只显示:[0.00000000e+00 1.24812711e-07 4.98503368e-07 ..., 1.23080047e-01 1.23079006e-01 1.23077965e-01] 无论如何我展开输出显示?
    • @dustin:您必须使用for 循环遍历它们并单独打印出每一个。
    • 那么无论如何只返回一个最大的 r 值而不是数组?
    • 最后一行应该是 print(numpy.amax(max_r))?它返回的值是错误的:0.13
    【解决方案2】:

    这似乎是由于工作并输出了正确的解决方案。

    #!/usr/bin/env python
    #  Plotting the energy for circular Hohmann transfer
    
    import scipy
    import matplotlib
    import numpy as np
    import pylab
    from scipy.optimize import fmin
    
    
    def f(R):
        return ((1 / np.sqrt(R)) - ((np.sqrt(2) * (1 - R)) / (np.sqrt(R
            * (1 + R)))) - 1)
    
    x = np.arange(1, 20, .001)
    max_r = fmin(lambda r: 1.0 / f(r), 20)
    
    pylab.plot(x, f(x), 'r')
    pylab.show()
    
    print(max_r)
    

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 1970-01-01
      • 2018-04-16
      • 2022-01-11
      • 2022-01-11
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多