0

在 Jamie 在这篇文章中的帮助之后,我知道我需要使用 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)
4

2 回答 2

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)
于 2013-04-02T02:22:30.257 回答
0

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

#!/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)
于 2013-04-02T15:45:17.797 回答