RK4가 Euler 통합보다 나은 이유는 무엇입니까? [닫은]


20

이 훌륭한 슬라이드 의 끝 에서 저자는 제시된 모든 다른 통합자를 비교합니다. 어쨌든 개선 된 오일러 통합Runge Kutta 4 통합을 제외하고는 모두 테스트에 모두 적용되지 않습니다.

물리학이 많이 쓰이지 않는 2D 게임을하고 있다고 언급해야한다고 생각합니다 . 개선 된 오일러 통합이 부족한 곳과 RK4를 대신 사용해야하는 점이 궁금합니다.

내 게임은 대부분 단순 중력 (점프 및 하강), X 및 Y 축을 따른 이동 및 경계 상자 충돌로 구성됩니다. RK4를 구현하는 것이 가치가 있습니까, 아니면 개선 된 오일러로 충분합니까? Euler Integration의 사용자가 쫓겨 난 곳에서 많은 논의가 있지만, 내가 볼 수 있듯이, 개선 된 Euler는 단순한 2D 문제에 상당합니다. 나는 그것이 더 빠를 것이라고 상상한다.


토픽이지만, 그 영역은 훌륭한 슬라이드이며, 예제와 모든 것이 매우 명확합니다. 그 링크 주셔서 감사합니다!
Roy T.

이것이 실제로 주제가 아닌 경우 Computational Science에 적합 할 것입니다 .
David Z

또한 : 시간이 수정 된 Verlet 통합 – 개선 된 오일러와 비슷해 보입니다 : 정확히 같은지 알아 내기에는 너무 게으 릅니다 . TCV는 고정 시간 단계에 관대 할 수 있기 때문에 훌륭합니다 (다른 통합자는 보장 된 고정 시간 단계를 원합니다).
Jonathan Dickinson

1
편집 할 수 없음 : 그가 언급 한 것을 볼 수 있습니다. 기사에서 설명한 초기 조건 요구 사항 측면에서 그의 구현이 버그가 있는지 확실하지 않지만 초기 조건을 올바르게 계산하면 TCV 구현과 관련된 중력 문제를 본 적이 없습니다.
Jonathan Dickinson

답변:


15

개인적 으로 대부분의 시뮬레이션에서 Velocity Verlet 을 선호 합니다. 이 방법에 대한 나의 경험에서, 그것은 꽤 뻣뻣한 방정식에 매우 적합합니다. 이 "개선 된 오일러"방법은 Velocity Verlet 방법과 매우 유사하며 예측 자-수 정기 (predictor-corrector) 라고 알려진 통합 방법 클래스에 의존하는 것 같습니다 . 암시 적 방법의 힘이 실제로 빛나는 David Baraff의 "천 시뮬레이션의 큰 단계" 부터 시작하여 오늘날 이러한 방법에 대한 많은 내용을 읽을 수 있습니다 . 그들의 몰락은 당신입니다 :

  1. 야곱 인이나 헤 시안 인과 근사한 다음
  2. 프레임 당 상당한 양의 행렬 역수를 계산합니다.

수학 전문가가 아닌 경우 손가락이 끼일 수 있습니다. 원하는 방법으로 실험 한 다음 자신에게 가장 적합한 방법을 선택하십시오. 단순이 항상 더 좋은 것은 아니지만 대화식 프레임 속도의 경우 한 단어 만 알고 있습니다. 타협.

보고 싶은 추가 자료 :

Jakobsen은 소박한 문제에 대한 간단한 아이디어를 제시하는 일종의 천재입니다 (그의 전문 분야는 착각하지 않으면 암호 기술이지만 수렴하는 Gauss-Seidel 반복 알고리즘 클래스에 대한 그의 방법의 수학적 동등성을 입증하는 데 성공했습니다. ). 간단하게하기 위해 암시 적 방법에 대해 깊이 파고 들기 전에이 단계를 먼저 수행하십시오.

나중에 편집 : 최근 에 소프트 또는 세미 리지드 바디 시뮬레이션에 명시 적분기를 사용하고 성능과 품질에 미치는 영향에 대한 논문 을 얻었습니다 . 이 백서 는 시나리오에 따라 특정 적분기를 선택하기위한 안내서 역할을합니다.


1
+1 이것은 내용면에서 실제로 좋은 품질의 대답이었습니다. 그러나 소화하기가 너무 어려웠습니다 (텍스트 벽). 좋은 서식은 항상 투표에 도움이된다는 것을 알았습니다. 나는 그것을 향상 시켰 으면 좋겠다.
Jonathan Dickinson

고마워 Jonathan, 나는 "독자 친화적 인"절차를 무시하고 서둘러 해냈지만, 오늘날에도 매우 빈번하게 사용되는 몇 가지 소스를 언급해야했습니다.)
teodron

10

Q : 왜 고급 Runge Kutta를 사용합니까?
A : 매우 정확하기 때문입니다.

Q : 왜 안됩니까?
A : 게임을 만들고 매우 정확한 물리 엔진은 중요하지 않기 때문에 플레이어를 속일만큼 충분해야합니다.

그건 그렇고, 대부분의 플랫 포머와 마찬가지로 충돌시 심한 감쇠가 발생하면 간단한 오일러가 좋습니다.

프레젠테이션의 코드와 달리 고정 단계 물리학을 사용하면 잠재적 인 결함을 줄일 수 있으며 매우 간단한 방식으로 공을 얻거나 잃는 문제를 해결할 수 있습니다. 명시 적 통합과 암시 적 통합의 중간 단계로 가십시오.

velocity += 0.5 * acceleration;
position += velocity;
velocity += 0.5 * acceleration;

프레젠테이션에 표시되지 않는 것은 개체가 경계를 넘어서는 것처럼 보이지 않도록 충돌을 처리하는 방법입니다. 이 문제에 대한 간단한 해결책은 높은 업데이트 빈도를 사용하는 것입니다. 더 복잡하지만 잠재적으로 더 나은 성능을 발휘하는 솔루션은 충돌시 객체를 다시 이동시키는 것입니다. 정확한 구현은 원하는 물리학 적 동작에 달려 있습니다.


1
"플레이어를 속이는"+1-오일러 통합으로 인해 '매우 간단한'시스템이 폭발적으로 폭발했습니다.
Jonathan Dickinson

@JonathanDickinson 나는 오일러 통합 때문이 아니라 상황의 혼합 때문에 오일러 통합이 그중 하나 일 뿐이라고 말합니다. 당신이 예를 가지고 있다면 나는 폭발 시스템을 피하는 방법을 찾을 수 있다고 확신합니다.
aaaaaaaaaaaa

RK / Verlet에 대해 배우기 전에 실제로 오래된 VB6 (내가 문자 그대로 약 14 살이었을 때)에 있습니다. 더 이상 코드가 없습니다. 혼합물에 :).
Jonathan Dickinson

1
단순한 중력이 아닌 물체 사이의 인력으로 혼란을 시작하자마자 통합 방법을 강화하는 것이 합리적이라고 생각합니다. 엄격히 필요하지는 않지만 처리 능력이 있다면 단점은 약간 더 복잡한 코드입니다.
aaaaaaaaaaaa

1

프리젠 테이션에 오류가 있습니다. 발표자가 "향상된 오일러"라고하는 방법은 실제로 Velocity Verlet 방법입니다!

더 권위있는 출처는 여기를 참조하십시오 : http://www.physics.udel.edu/~bnikolic/teaching/phys660/numerical_ode/node5.html

또한 같은 방정식이 Wikipedia에 있습니다.

Euler의 방법에 대한 일반적인 즉각적인 개선은 발표자가 생각했던 것 중 Midpoint 방법 으로, 개선 된 오일러로 Velocity Verlet을 착각하게되었습니다. Midpoint 방법과 Velocity Verlet의 유일한 차이점은 속도가 마지막 가속에 의존하지 않고 마지막 및 다음 가속의 평균이라는 점입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.