找到开普勒方程的解 (iOS) (swift)

find a solution to Kepler's equation (iOS) (swift)

我正在编写代码来寻找开普勒方程的解 (E):

E - e*sin(E) = M

并且所有角度都以弧度表示, M = 3.52821, e = 0.016714

这些是步骤:

  1. 先猜,设E = Eo = M
  2. 求 O = E - e*sin(E) - M 的值
  3. 如果|O| <= 0.000006,转到第 6 步 如果|O| > 0.000006,继续第4步
  4. 求 delta_E = O/(1-e*sin(E))
  5. 取新值 E1 = E - delta_E,转到步骤 2
  6. E的现值为解,在真值0.000006以内修正

但是,我不会写那些步骤的代码(swift),请帮助我。

感谢@NSNoob

我终于想出办法了!!!

let M = 3.52821
var e = 0.016714
var E = M
var O = E - (e * sin(E)) - M

while (abs(O) > 0.000006) {
    var Delta_E = O / (1-(e*cos(E)))
    E = E - Delta_E
    O = E - (e * sin(E)) - M
}

print(E)

首先,对你的问题进行了一些你显然忘记提及的更正,我不得不寻找 here

E0 = M

E = E1 on next iteration if solution not found

关于专业术语,这里的E叫做Eccentric Anomaly,M叫做mean Anomaly。其中 eps 是精密直径。另外,根据共享文章

,E=e

同样在 swift 中,我们对变量和常量使用驼峰式命名约定,但在这里我尝试使用您的名字,以便您可以理解代码。

现在回到正题,以下方法将使用递归为您完成:

func solveKeplersEquationForParamas(M:Double)->Void{

    let E:Double = M
    let eps:Double = 0.000006
    let AbsoluteValueOfO:Double = getAbsoluteValueOfO(E, M: M,eps: eps)
    print(NSString(format:"Answer is:%f", AbsoluteValueOfO))


}

func getAbsoluteValueOfO(E:Double,M:Double,eps:Double) -> Double {
    var SinOFE: Double = Double(sin(E))
    SinOFE = E*SinOFE
    var E1 = E;
    let O = E - SinOFE - M

    var AbsoluteValueOfO = fabs(O)
    if AbsoluteValueOfO > eps {
        print("Solution not found. go to step 4");
        let denom = 1-E*sin(E)
        let absDenom = fabs(denom)
        if absDenom>0{
            let deltaE = O/denom
            E1 = E-deltaE
            AbsoluteValueOfO = getAbsoluteValueOfO(E1, M: M, eps: eps)
        }
        else{
            print("Denom became 0, Can't divide by zero Denom is:%f",denom);
            return AbsoluteValueOfO
        }

    }
    else if AbsoluteValueOfO < eps || AbsoluteValueOfO == eps{
        print("Solution found. Returning the value");
        print(NSString(format:"Value of E is:%f", E1))
    }
    return AbsoluteValueOfO
}

运行 这在操场上像:

solveKeplersEquationForParamas(3.094763)

游乐场输出:

注意:这是针对您提到的步骤的Swift解决方案。如有步骤错误,责任自负。