· 3 min read

วิธี ที่ ลูก ตุ้ม สอน คุณ

คุณไม่ต้องมีปริญญาวิชาคณิต เพื่อเข้าใจนักแก้ปัญหา ODE คุณต้องการลูกตุ้ม หน้าจอ และ 20 นาที นี่คือวิธีที่ออยเลอร์ อาร์เค 4 และวิธีปรับตัวจริง ๆ ด้วยรหัสที่แท้จริง.

เริ่ม ด้วย สิ่ง ที่ คุณ เห็น

จับน้ําหนักจากเชือก ดึงไปด้านนึง ปล่อยนะ มันแกว่ง.

คุณเพิ่งสร้างระบบที่ควบคุมโดยสมการอนุพันธ์

dθ/dt = ω dω/dt= -(g/L) ไซน์ (θ)

○ คือ มุม. ○ คือ ความเร็ว ของ อาร์กติก. g คือแรงโน้มถ่วง (9.81 m/s2). L คือความยาวเส้น เส้นสองเส้นนี้บอกว่า การเปลี่ยนมุมด้วยอัตราเท่ากับความเร็ว และความเร็วเปลี่ยนแปลงด้วยอัตราที่ขึ้นอยู่กับแรงโน้มถ่วง ความยาว และมุมปัจจุบัน.

ปัญหา: เราไม่สามารถแก้สมการนี้ได้ sin(θ) ทําให้ไม่เป็นเชิงเส้น มันไม่มีสูตรที่ให้ θ เมื่อใดก็ตามที่ t ดัง นั้น เรา กะ ประมาณ ว่า เรา ก้าว หน้า ต่อ ไป ใน ระดับ เล็ก ๆ โดย คํานวณ รัฐ ต่อ ไป จาก รัฐ ปัจจุบัน.

นั่นคือสิ่งที่นักแก้ปัญหา ODE ทํา และมีวิธีที่ดีกว่านี้และแย่ลง.

วิธี อูล เลอ ร์: เป็น ที่ นิยม แต่ เป็น ที่ นิยม

แนวคิดที่ง่ายที่สุด: ถ้าผมรู้จักรัฐตอนนี้ และผมรู้อัตราการเปลี่ยนแปลง ผมสามารถประเมิน รัฐได้ทีละขั้น.

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

นี่คือวิธีการของออยเลอร์ มันก็เหมือนกับการเดินผ่านหมอก คุณสามารถเห็นก้าวหนึ่งก้าวข้างหน้า ในรหัส:

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

ปัญหา:วิธีการของออยเลอร์ถูกต้อง นั่นหมายความว่าถ้าคุณลดขนาดขั้น คุณลดความผิดพลาด สําหรับ ลูก ตุ้ม แล้ว ความ ผิด พลาด นี้ เพิ่ม ขึ้น เรื่อย ๆ — ลูก ตุ้ม ที่ ถูก จําลอง แล้ว ค่อย ๆ ได้ พลัง งาน และ แกว่ง กว้าง ขึ้น เรื่อย ๆ. หลังจากไม่กี่นาที มันหมุนเป็นวงกลมเต็ม ลูกตุ้มของจริง ไม่เคยทําแบบนี้.

อาร์เค4 : ม้างาน (RK4)

1901 คาร์ล รันจ์ และ มาร์ติน คุตตา ได้ตีพิมพ์วิธีการที่ดีกว่า ในปี ค.ศ. แทนที่จะดูที่อัตราการเปลี่ยนแปลงหนึ่งครั้งต่อก้าว ลองดู 4 ครั้ง:

  1. วัดความชันในตอนต้นของขั้นตอน k1
  2. กึ่งกลางโดยใช้ k1, วัดความชันตรงนี้ ○ k2
  3. กึ่งกลางโดยใช้ k2, วัดอีกครั้ง ○ k3
  4. ก้าวไปยังตอนจบโดยใช้ k3, วัดได้อีกครั้งหนึ่ง k4
  5. การรวม: เฉลี่ยน้ําหนัก (k1 + 2k2 + 2k3 + k4) / 6

นี่เป็นลําดับที่สี่ที่ถูกต้อง ลดขนาดขั้นและความผิดพลาดลดลงด้วยปัจจัยที่ 16 ลูก ตุ้ม เก็บ พลังงาน ไว้ อย่าง ถูก ต้อง สําหรับ การ หมุน หลาย พัน ครั้ง.

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])
  ];
}

นี่คือวิธีที่ PinePaper ใช้สําหรับลูกตุ้ม สปริง-มาส และแบบจําลองแวน เดอ โพล มันเป็นวิธีเดียวกันที่ใช้ในการคํานวณเส้นทางอวกาศ 22 บรรทัดของรหัส.

ทําไม เรื่อง นี้ จึง สําคัญ

ลูก ตุ้ม เป็น ตัว อย่าง การ สอน. แต่ เทคนิค เดียว กัน — ก้าว ไป ข้าง หน้า, วัด, ถูก — ใช้ ได้ ทุก ที่ ที่ คุณ มี อัตรา การ เปลี่ยน แปลง:

  • ~ การเพิ่มขึ้นของประชากร~: dx/dt = rx(1 - x/K). การเติบโตแบบล็อกเอาต์ ด้วยความจุ ตัวแก้ไขเหมือนกัน.
  • ** ปฏิกิริยาทางกาย **: ความเข้มข้นเปลี่ยนแปลงตามสัดส่วนที่เพิ่มขึ้น ตัวแก้ไขเหมือนกัน.
  • ** เครือข่ายภายนอก*: การสืบเชื้อสายคือ ODE ที่ถูกแก้ไขไปแล้ว แต่ ละ ขั้น ของ การ ฝึก อบรม คือ การ ก้าว ไป ตาม ผิว นอก ของ การ สูญ เสีย.
  • ดอกเบี้ยทบต้นอย่างต่อเนื่อง ผ่าน dy/dt= ry การเติบโตของค่า x เป็นค่า ODE ที่ง่ายที่สุด.
  • เวลาของการแสดง ~: การปล่อยเส้นโค้ง เป็นวิธีแก้ปัญหาของ สปริง-แดมเปอร์ โอดีกส์ การปล่อยก๊าซใน CSS เป็นแบบจําลองทางกายภาพ.

คณิตศาสตร์ไม่เปลี่ยนแปลง โดเมนมี ไวยากรณ์เดียวกันนี้อธิบายการนับแกะ การแกว่งลูกตุ้ม และการฝึกระบบประสาท.

ลอง เอง สิ

เปิด PinePaper และเลือกเครื่องกําเนิดพลังงานอัตโนมัติของระบบ เลือก "ลูกตุ้ม" วงสวิง ตอนนี้เปลี่ยนพารามิเตอร์:

  • แรง โน้ม ถ่วง เพิ่ม ขึ้น
  • เพิ่มความยาวของแท่ง
  • เริ่มที่มุมที่มากขึ้น ○ ดูวิธีการที่ระยะเวลาเพิ่มขึ้น (ไม่ linelinear ผลกระทบที่ตําราการประมาณมุมเล็ก)

ทุกการเปลี่ยนแปลงที่คุณทําคือการวัด คุณเปลี่ยนพารามิเตอร์แล้วสังเกตผล RK4 แก้โจทย์ซ้ํา 30 เฟรมต่อวินาที และลูกตุ้มแสดงให้คุณเห็นว่าสมการทํานายอย่างไร.

นั่นคือประเด็นทั้งหมด คณิตศาสตร์คือการวัด PinePaper ทําให้มองเห็นได้.

((เสียง)

อ้างอิง

  • บุชเชอร์, เจ.ซี. (2016). (3 ง.). ไวลี่ย์.
  • Dormand, J.R. & Prince, P.J. (1980). ครอบครัวของ Ragge-Kutta Culti. ♪Journal of Commutational and ประยุกต์ mathematics*, 6(1) 19-26.
  • (1768). Imppensis Academiae Empireis Scentiarium.
  • Herer, E., NAKSEST, S.P., & Wanner, G. (1993). ♪Solution lineal Entertainial Equation I: Nonstif first ปัญหา* (2th Ed.) สปริงเกอร์.
  • Karta, W. (1901). Beitrag suer naherungsweisen intrieved diviewer diviewialrichungen. Zétchrift fur mathematatic und Physik, 46, 435-453.
  • นิวตัน I (1687). ♪ Philosophoria naris Principia คณิตศาสตร์*. Joseph Sather.
  • Runge, C. (1895). 2561 เสียชีวิต Numerische Aifilosung ฟอน ดิฟเฟิลเกิลโกเดน * มามาเมติเซ แอนนาเลน* 46(2)), 167-178.
  • Strogaz, S.H. (2015). ♪โนนไดนามิกส์เชิงเส้นและ chaos*(nd Ed.). เวสต์วิว เพรส.

  • PinePaper's ODE Culor ครอบคลุม Ulor, RK4 และปรับตัว Dormand- Prince RK45 ในประมาณ 200 บรรทัด พ.ศ. ลองจําลองลูกตุ้มฟรีที่ [กระดาษพิ้นเตอร์. studiod/editor] (/editor) *

Ready to create?

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

Open PinePaper Editor