【发布时间】:2011-12-13 03:48:14
【问题描述】:
我是 python 新手,一直无法弄清楚如何解决这个问题。我正在尝试对数组中的每个值进行迭代,并返回最终值数组。 e 是用户输入的单个值,而 M 是可变长度的数组。我试图对 E 的每个值循环迭代,直到它接近解开普勒方程 M=E-e*sin(E),然后返回给定 M 的每个 E 的完成数组。
def eccano(e, M):
E=M
for i in range(0,len(M)):
while abs(E-e*sin(E)-M[i]) > 10**(-4):
E=E-((E-e*sin(E)-M[i])/(1-e*cos(E)))
return E
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ME.py", line 7, in eccano
while abs(E-e*sin(E)-M[i]) > 10**(-4):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
有什么建议吗?谢谢!
【问题讨论】:
-
您要解决什么问题?你希望这段代码做什么? (考虑一下,问一个具体问题比仅仅征求建议要好得多。)
-
自从
E=M,你试过用E[i]吗?while abs(E[i]-e*sin(E[i])-M[i]) > 10**(-4): ... -
e和M有哪些种类和形状?
-
虽然它与问题正交,但对于任何好奇的人,我都知道 OP 正在尝试做什么:求解偏心异常的开普勒方程。 (作为一个正在康复的天文学家最终必须派上用场..)
-
正如回溯所说的“使用 a.any() 或 a.all()”,例如只要至少一个值高于 1e-4 就进行迭代:np.any(np.abs (E-e*sin(E)-M[i]) > 10**(-4)):... numpy 无法读懂你的想法,无论你想要任何或全部,所以它不会猜测。