SORU
3 Kasım 2009, Salı


Runge-Kutta (RK4) oyun fiziği için entegrasyon

Oyun babalık daha iyi oyun fizik RK4 integration kullanma hakkında great article vardır. Uygulaması basittir, ama temelinde matematik kafamı karıştırdı. Kavramsal düzeyde türevleri ve integralleri anlıyorum, ama uzun bir süredir denklemler manipüle yok.

İşte İhtiyar uygulanması brunt:

void integrate(State &state, float t, float dt)
{
     Derivative a = evaluate(state, t, 0.0f, Derivative());
     Derivative b = evaluate(state, t dt*0.5f, dt*0.5f, a);
     Derivative c = evaluate(state, t dt*0.5f, dt*0.5f, b);
     Derivative d = evaluate(state, t dt, dt, c);

     const float dxdt = 1.0f/6.0f * (a.dx   2.0f*(b.dx   c.dx)   d.dx);
     const float dvdt = 1.0f/6.0f * (a.dv   2.0f*(b.dv   c.dv)   d.dv)

     state.x = state.x   dxdt * dt;
     state.v = state.v   dvdt * dt;
}

Kimseye RK4 nasıl çalıştığını basit bir dille açıklayabilir misiniz? Özellikle, neden biz ortalama türevleri de 0.0f, 0.5f, 0.5f, ve 1.0f? Nasıl ortalama türevleri kadar 4 sipariş farklı bir yapıyor basit euler entegrasyonu ile daha küçük bir timestep?


Aşağıda kabul cevabı, ve diğer birçok makale okuduktan sonra, RK4 nasıl çalıştığı hakkında bir bilgim yok. Kendi sorularıma cevap vereyim

Kimseye RK4 nasıl çalıştığını basit bir dille açıklayabilir misiniz?

RK4 gerçeğini yararlanır çok daha iyi bir yaklaşım elde edebiliriz eğer biz bir Fonksiyon kullanımı yüksek mertebeden türevler yerine ilk veya ikinci türevi sadece. Taylor seriesyüzden çok daha hızlı Euler daha yakınlaşıyor yaklaşımlar. bak (bir animasyon O Sağ tarafta sayfa)

Özellikle, neden0.0f, 0.5f, 0.5f, ve 1.0f türevleri ortalama mıyız?

Runge-Kutta yöntemi. bir fonksiyonun yaklaşım bu birkaç nokta örnekleri türevleri Taylor aksine bir timestep içinde, sadece türevleri örnekleri serisi tek bir nokta. Örnekleme sonra biz bunları bilmek lazım türevleri her örnek almak için tartmak için en yakın yaklaşım. Bir bunu yapmak için kolay bir yolu seçmektir bu denk sabitler Nasıl ki Taylor serisi, Runge-Kutta bir denklemin sabitleri belirlenir.

This article net yaptı beni. Fark nasıl 10 ** Taylor (17) dizi genişleme. Runge-Kutta türetme.

Nasıl türevler 4 sipariş daha küçük bir timestep ile basit euler bir entegrasyon yapmaktan farklı kadar ing.

Matematiksel olarak, çok yakınlaşıyor daha hızlı birçok Euler yapmaktansa yaklaşımlar. Yeterli tabii ki, Euler eşit kazanabilir yaklaşımlar doğruluk RK4, ama hesaplama için gerekli güç kullanarak haklı çıkarmaz Euler.

CEVAP
6 Kasım 2009, Cuma


Bu biraz şu ana kadar gerçek matematik olarak basitleştirilmiş olabilir, ama Runge Kutta entegrasyon için sezgisel bir yol gösterme amaçlı.

Biraz zaman t1, başka bir zaman miktarını bilmek istiyoruz t2 bir miktar verilir. -Birinci dereceden bir diferansiyel denklem ile, t1 Bu miktardaki değişim oranı bilemeyiz. Emin olduğumuz bir şey var; gerisi tahmin.

Euler entegrasyon sanırım en kolay yolu: doğrusal t1 t2, değişim kesin olarak biliniyor oranı kullanarak t1 değerini tahmin. Bu genellikle kötü bir cevap verir. Eğer t2 t1, uzak ise bu doğrusal ekstrapolasyon ideal cevap herhangi bir eğrilik maç için başarısız olur. Eğer t2, t1 birçok küçük adımlar atıyoruz eğer benzer değerler çıkarma sorunumuz olacak. Roundoff hataları sonucu berbat olacak.

Bizim tahminimiz rafine. Bir yol için devam edin ve bunu doğrusal ekstrapolasyon neyse, sonra umut değil çok uzakta gerçeği, kullanmak diferansiyel denklemi hesaplamak için bir tahmin oranı değişim t2. Bu, (doğru) t1 te daha değişme oranı ortalama t1 t2 arasında doğru cevabı tipik eğim gösterir. Bu 23* *t2 için yeni bir doğrusal ekstrapolasyon yapmak için kullanıyoruz. Eğer basit ortalama almak, ya da t1, hızı daha fazla ağırlık ver hataları tahmin etmek için matematik yapmadan olursak belli değil, ama burada bir seçim var. Her durumda, Euler verir daha iyi bir cevap.

Belki de daha iyi, t1 t2, arasında zaman yarı yolda bir başlangıç noktası için doğrusal bizim ekstrapolasyon yapmak ve diferansiyel denklem değişim oranı var hesaplamak için kullanın. Bu ortalama sadece açıklandığı gibi yaklaşık olarak iyi bir cevap verir. O zaman amacımız t2 miktar bulmak beri t2 t1 doğrusal ekstrapolasyon için bunu kullanın. Bu orta nokta algoritması.

Değişim oranı orta noktası tahmini orta noktası için t1 miktar başka bir doğrusal ekstrapolasyon yapmak için kullanmayı hayal edebilirsiniz. Diferansiyel denklemi ile eğim daha iyi bir tahmin var. Bu kullanarak, bir cevap istiyoruz t2 32 *yol değerlendirilmesiyle son veriyoruz. Bu Runge Kutta algoritmasıdır.

Orta üçüncü bir canlandırma yapabilir miyiz? Tabii, yasadışı değil, ama detaylı analiz azalan iyileştirme, hata diğer kaynakları nihai sonucu hakim gibi gösterir.

Runge Kutta başlangıç noktası iki kez t1, orta nokta için diferansiyel denklemi, ve son noktada bir kez t2 geçerlidir. Aradaki puan tercih meselesi. Olası eğim o geliştirilmiş tahminler yapmak için t1 t2 arasında diğer noktaları kullanın. Örneğin, t1, t2, başka bir 2/3 t2 doğru yol t2 doğru bir noktaya üçte şekilde kullanabiliriz. Dört türevleri ortalama ağırlıkları farklı olacaktır. Pratikte bu gerçekten yardımcı, ama aynı cevabı vermek gerek beri test bir yer olabilir değil ama yuvarlak hataları farklı bir dizi sağlayacaktır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • Codecourse

    Codecourse

    3 ŞUBAT 2009
  • Elefant Traks

    Elefant Trak

    5 HAZİRAN 2007