【发布时间】:2018-10-26 08:15:31
【问题描述】:
我正在尝试处理一个复杂的数学方程式,其中一部分涉及循环值,直到它们之间存在特定差异。
这是我的尝试:
public void EccentricAnomaly(double M) {
double E = M + e;
if (e > 0.06) {
E0 = E;
double anglesInRadianE = Math.toRadians(E0);
double E1 = E0 - (E0 - e * Math.sin(angleInRadiansE) - M / (1 - e * Math.cos(angleINRadianE)));
if (E1-E0 !=0.001) {
E1 = E0;
E1 = E0 - (E0 - e * Math.sin(angleInRadiansE) - M / (1 - e * Math.cos(angleINRadianE)));
}
v = Math.cos(E1) - e;
x = Math.sqrt(e);
} else {
v = Math.cos(E) - e;
}
问题是,如果先前计算的e 大于0.06,则计算E1,但如果它与E0 之间的差大于0.001,则用于计算@987654327 的公式@ 再次完成,这次 E1 变为 E0 并计算出新的 E1。这应该重复,直到E1 和E0 之间的差异为0.001。
如您所见,我对如何编程感到困惑,因此我们将不胜感激。我认为,这是正确的道路,但当前的代码似乎只是在重复相同的值。 这里要求的是原始代码:
这是我要编写的数学公式:
首先,从平均异常 M 和偏心率 e 计算偏心异常 E。作为第一个近似值,做( E 和 M 以弧度为单位): E = M + e * sin(M) * ( 1.0 + e * cos(M) ) 如果偏心率 e 小于约 0.05-0.06,则该近似值足够准确。如果偏心率较大,设置 E0=E 然后使用这个迭代公式(E 和 M 以弧度为单位): E1 = E0 - ( E0 - e * sin(E0) - M ) / ( 1 - e * cos(E0) ) 对于每个新的迭代,将 E0 替换为 E1。迭代直到 E0 和 E1 足够接近(大约 0.001 度)。
【问题讨论】:
-
什么是小e?我没有看到它用任何值初始化或传递到您的方法中。如果您尝试使用欧拉数,那不是。运行程序时会发生什么?
-
请至少引用原始公式,并正确定义变量。