· 4 min read

Bir Pendulum Size Farklılık Öğretiyor

ODE çözücüleri anlamak için bir matematik derecesine ihtiyacınız yok. Bir penduluma, bir ekrana ve 20 dakikaya ihtiyacınız var. İşte Euler, RK4 ve Adaptif yöntemler aslında işe yarıyor - gerçek kodla.

Görebileceğiniz şeyle başlayın

Bir dizeden bir ağırlık asın. Onu bir tarafa götürün. Hadi gidelim. İniyor.

Sadece bir diferansiyel denklem tarafından yönetilen bir sistem yarattınız:

d d/dt = ω d d/dt = - (g/L) · sin( sin)

. açısıdır. . angular speed. g yerçekimi (9.81 m/s2). L, dize uzunluğudır. Bu iki çizgi şöyle diyor: Bir hıza eşit bir hızdaki açı değişiklikleri ve yerçekimi, uzunluğa ve mevcut açıya bağlı bir hızda hız değişiklikleri.

Sorun: Bu denklemi tam olarak çözemeyiz. sin(θ) bunu lineer yapmaz. Size her zaman . veren bir formül yok. Bu yüzden yaklaşık olarak - küçük artışlarda ilerlemeye adım atıyoruz, bir sonraki durumu şu ankiden hesaplamak.

ODE çözücünün yaptığı şey budur. Ve bunu yapmak için daha iyi ve daha kötü yollar var.

Euler Yöntemi: İnanılmaz ama Flawed

En basit fikir: Şimdi durumu biliyorum ve değişimin oranını biliyorum, durumu daha sonra küçük bir zaman adım tahmin edebilirim.

next_angle = current_angle + velocity × dt
next_velocity = current_velocity + acceleration × dt

Bu Euler'in yöntemi. Fog aracılığıyla yürümek gibidir: Bir adım önde görebilirsiniz, bu yüzden bu adımı atabilirsiniz, sonra tekrar görün. kodda:

function euler(f, t, y, dt) {
  const dy = f(t, y);
  return [
    y[0] + dt * dy[0],
    y[1] + dt * dy[1]
  ];
}

Sorun: Euler'in yöntemi ilk sıra doğru. Bu, adım boyutunu yarıya düşürdüğünüz anlamına gelir, hatayı kaybedersiniz. Bir pendulum için, bu hata bir araya gelir - simdi pendulum yavaş yavaş enerji kazanır ve daha geniş ve daha geniş hale gelir. Birkaç dakika sonra, tam çevrelerde dönüyor. Gerçek bir pendulum bunu asla yapmaz.

RK4: Workhorse

1901 yılında Carl Runge ve Martin Kutta daha iyi bir yöntem yayınladı. Adım başına bir değişiklik oranına bakmak yerine, dört kez bakın:

  1. Adımın başlangıcındaki eğimi ölçül
  2. K1 kullanarak yarım adım, oradaki eğimi ölç
  3. Step halfway using k2, measure again → k3
  4. K3 kullanarak sonuna adım, bir kez daha ölçül
  5. Ekle: ağırlıklı ortalama (k1 + 2k2 + 2k3 + k4) / 6

Bu dördüncü sıra doğru. Adım büyüklüğüne ve hata 16 faktöre düştü. pendulum binlerce salak için enerjiyi doğru bir şekilde koruyor.

function rk4(f, t, y, dt) {
  const k1 = f(t, y);
  const k2 = f(t + dt/2, [y[0] + dt/2 * k1[0], y[1] + dt/2 * k1[1]]);
  const k3 = f(t + dt/2, [y[0] + dt/2 * k2[0], y[1] + dt/2 * k2[1]]);
  const k4 = f(t + dt,   [y[0] + dt   * k3[0], y[1] + dt   * k3[1]]);
  return [
    y[0] + (dt/6) * (k1[0] + 2*k2[0] + 2*k3[0] + k4[0]),
    y[1] + (dt/6) * (k1[1] + 2*k2[1] + 2*k3[1] + k4[1])
  ];
}

Bu PinePaper pendulumlar, ilkbahar-maslar ve Van der Pol simülasyonları için kullanır. Havacılık yörünge hesaplamalarında kullanılan aynı yöntem. 22 kod hattı.

Neden Bu Maddeler Fiziği dışında

Pendulum bir öğreti örneğidir. Ama aynı teknik - adım ileri, ölçü, doğru - değişim oranınız olan her yerde geçerlidir:

  • Population growth: dx/dt = r·x· (1 - x/K). Kapasite taşıyan Logistic growth. Aynı çözücü.
  • **Chemical reaksiyonlar **: Mevcut konsantrasyonlara göre oranlarda konsantrasyonlar değişir. Aynı çözücü.
  • Neural ağlar: gradient iniş bir diskretize ODE. Her eğitim adımı, kaybın yüzeyi boyunca Euler adımdır.
  • Economics: ilgi bileşikleri sürekli olarak şeker/dt = r·y. Exponential growth en basit ODE.
  • Animasyon zamanlaması: easing eğrileri ilkbaharda ODEs için çözümlerdir. CSS'teki "elastic" ve "bounce" kiralamalar fiziksel simülasyonlardır.

Matematik değişmez. Alan yapar. Bu bir dili yapar - aynı gramer koyun saymayı, pendulumları ve sinir ağ eğitimi açıklar.

Kendinizi Deneyin

Açık PinePaper ve Dinamik Sistem jeneratörünü seçin. "pendulum" seçin. bob sallanıyor. Şimdi parametreleri değiştirir:

  • Yerçekimi artırmak → daha hızlı hız (kısa süresi)
  • Kumaş uzunluğu → yavaş yavaş yavaş (uzun dönem)
  • Daha büyük bir açıdan başlayın → dönemin nasıl arttığını izleyin (enonlinear etkisi, ders kitabının küçük boğuğun neredeyse özlediğini)

Yaptığınız her değişiklik bir ölçümdür. Bir parametre değiştirdiniz ve sonucu gözlemlediniz. İkinci olarak RK4 çözücü rekomputed 30 çerçeve ve pendulum size denklemin ne tahmin ettiğini gösterdi.

Bu bütün nokta. Matematik ölçümdür. PinePaper görünür hale getirir.

Interactive demo — open in editor pp:PinePaper

Referanslar

  • Amacher, J.C. (2016). * Sıradan Diferansiyel Denklemler için Numerical Yöntemler* (3rd ed.). Wiley.
  • Dormand, J.R. & Prince, P.J. (1980). Bir gömülü Runge-Kutta formülü ailesi. * C. ve Uygulamalı Matematik *, 6(1), 19-26.
  • Euler, L. (1768). *İsviçre integrali *, Vol. 1. Impensis Academiae Imperialis Scientiarum.
  • Saç, E., Nørsett, S.P., & Wanner, G. (1993). Siyasi Olmayan Equations I: Nonstiff Problems (2nd ed.). Springer.
  • Kutta, W. (1901). Beitrag zur näherungsweisen Integration totaler Differentialgleichungen. Zeitschrift für Mathematik ve Fiziki, 46, 435-453.
  • Newton, I. (1687). Philosophiæ Naturalis Principia Mathematica. Londra: Joseph Streater.
  • Runge, C. (1895). Über numerische Auflösung von Differentialgleichungen'i öldürür. Mathematische Annalen, 46(2), 167-178.
  • Strogatz, S.H. (2015). Nonlinear Dynamics ve Kaos (2. ed.). Westview Press.

*PinePaper'in ODE çözücü Euler, RK4 ve Adaptif Dormand- Prenses RK45 yaklaşık 200 çizgide. pendulum simülasyonu pinepaper.studio/editor

Ready to create?

Start making animated GIFs, videos, and graphics — free, no signup.

Open PinePaper Editor