Я пытаюсь работать над сложным математическим уравнением, и часть его включает циклические значения до тех пор, пока они не станут чем-то конкретным.
Вот моя попытка:
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
формула, используемая для вычисления E1
, выполняется снова, на этот раз E1
становится E0
и вычисляется новый E1
.Это должно повторяться до тех пор, пока разница между E1
и E0
не станет 0.001
.
Как видите, я запутался, как программировать это, поэтому любая помощь будет принята с благодарностью.Я думаю, что это правильный путь, но этот текущий код, кажется, просто повторяет те же значения.В соответствии с запросом вот оригинальный код:
Вот математическая формула, которую я пытаюсь закодировать:
Сначала вычислите эксцентричную аномалию, E, из M, среднюю аномалию, и eэксцентричностьВ первом приближении do (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 градуса).