2016-07-21 1 views
-6

나는 케플러의 방정식에 대한 해결책 (E) 찾기 위해 코드를 작성 중 :케플러의 식 (아이폰 OS) (SWIFT)에 대한 해결책을 찾을 수

E -

모든 M

전자 * 죄 (E) =을 각도는 라디안으로 표현되고, M = 3.52821, E = 0.016714

및 논문이 단계는 :

  1. 첫번째 추측 넣어 EO E = M =
  2. O = E - e * sin (E) - M의 값을 찾습니다.
  3. | O | < = 0.000006, 6 단계로 이동 | O | > 0.000006 단계로 진행 4
  4. 찾기 delta_E = O/(1-E * 죄 (E))
  5. 새로운 값 E1 = E 걸릴 - delta_E는 E의 현재 값이 2
  6. 단계로 진행 해결책은 진정한 가치의 0.000006 내에서 수정

그러나 이러한 단계의 코드 (빠른)를 작성하는 방법을 모르겠다. 제발 도와주세요. @NSNoob

덕분에 드디어 해결책을 알아낼! 먼저 분명히 언급하는 것을 잊었다 내가 here을 찾기 위해 한 질문의 모든 일부 수정의

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) 

답변

0

. 여기에 기술적 인 용어에 대해서는

E0 = M 

E = E1 on next iteration if solution not found 

, E은 편심 비정상이라고하며 M은 평균 비정상이라고합니다. 여기서는 eps이 정밀 직경입니다. 또한 공유 문서에 따라 E = e

또한 신속하게 변수 및 상수에 대해 낙타 사례 명명 규칙을 사용하지만 여기에서는 코드를 이해할 수 있도록 이름을 사용하려고했습니다.

solveKeplersEquationForParamas(3.094763) 

놀이터 출력 :

enter image description here

같은 놀이터에서

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 
} 

이 실행 : 이제 다시 사업에

, 다음 방법은 재귀를 사용하여 당신을 위해 그것을 할 것입니다

참고 : 이것은 언급 한 단계에 대한 신속한 해결책입니다. 단계별 오류에 대한 책임은 귀하에게 있습니다.

+0

정말 고마워요! – JonahThePoo

+0

사실 놀이터에서 이것을 시도했지만 EI가 원하는 값을 얻지 못했습니다. – JonahThePoo

+0

M 값을 "M = 3.52821"로 설정하고 실행했지만 오류가 나타납니다. – JonahThePoo