Tại sao RK4 tốt hơn tích hợp Euler? [đóng cửa]


20

Vào cuối các slide tuyệt vời này , tác giả so sánh tất cả các nhà tích hợp khác nhau được trình bày. Bằng cách này hay cách khác, tất cả đều thiếu, ngoại trừ Tích hợp Euler được cải tiếnTích hợp Runge Kutta 4 , cả hai đều vượt qua tất cả các bài kiểm tra.

Tôi cho rằng tôi nên đề cập rằng tôi đang làm việc trên một trò chơi 2D không chuyên sâu về vật lý. Tôi chỉ tò mò về việc tích hợp Euler được cải thiện sẽ thiếu ở đâu và RK4 sẽ phải được sử dụng thay thế.

Trò chơi của tôi chủ yếu là trọng lực đơn giản (nhảy và rơi), chuyển động dọc theo trục X và Y và va chạm hộp giới hạn. Có đáng để thực hiện RK4 hay Euler được cải thiện là đủ? Tôi thấy nhiều cuộc thảo luận nơi người dùng của Euler Integration bị trừng phạt, nhưng từ những gì tôi có thể thấy, Euler được cải thiện là tương đương trong các vấn đề 2D đơn giản. Tôi tưởng tượng nó cũng sẽ nhanh hơn.


offtopic, nhưng những khu vực trượt tuyệt vời, rất rõ ràng với các ví dụ và tất cả. Cảm ơn liên kết đó!
Roy T.

Nếu điều này thực sự lạc đề ở đây thì có lẽ nó sẽ phù hợp với Khoa học tính toán .
David Z

Ngoài ra: Tích hợp Verlet hiệu chỉnh thời gian - trông tương tự như Euler được cải thiện: quá lười để tìm hiểu xem nó có giống hệt nhau không. TCV rất tuyệt vì bạn có thể khoan dung với bước thời gian cố định của mình (các nhà tích hợp khác muốn có bước thời gian cố định được đảm bảo).
Jonathan Dickinson

1
Không thể chỉnh sửa: Tôi thấy anh ấy đề cập đến nó. Tôi không chắc liệu việc triển khai của anh ta có bị lỗi về các yêu cầu điều kiện ban đầu như được nêu trong bài viết hay không: nhưng tôi chưa bao giờ thấy vấn đề trọng lực đó với việc triển khai TCV của tôi nếu tôi tính toán chính xác các điều kiện ban đầu.
Jonathan Dickinson

Câu trả lời:


15

Cá nhân tôi thích Velocity Verlet cho hầu hết các mô phỏng. Theo kinh nghiệm của tôi với phương pháp này, nó khá phù hợp với các phương trình khá cứng. Có vẻ như phương pháp "Euler cải tiến" này khá giống với phương pháp Velocity Verlet và dựa vào một lớp các phương thức tích hợp được gọi là bộ chỉnh sửa dự đoán . Bạn có thể đọc rất nhiều điều về các phương pháp này hiện nay, bắt đầu với "Những bước lớn trong mô phỏng vải" của David Baraff , nơi sức mạnh của các phương pháp ngầm thực sự tỏa sáng. Sự sụp đổ của họ là bạn:

  1. phải ước chừng Jacobian hoặc Hessian và sau đó phải,
  2. tính toán một lượng lớn ma trận nghịch đảo trên mỗi khung.

Vì vậy, nếu bạn không phải là một chuyên gia toán học, bạn có thể bị kẹt ngón tay. Chỉ cần thử nghiệm với bất kỳ phương pháp nào bạn muốn và sau đó giải quyết cho phương pháp có vẻ phù hợp nhất với bạn. Đơn giản không phải lúc nào cũng tốt hơn, nhưng đối với các khung hình tương tác tôi chỉ biết một từ: thỏa hiệp.

Một số tài nguyên bổ sung mà bạn có thể muốn xem xét:

Jakobsen là một thiên tài khi nghĩ ra một ý tưởng đơn giản như vậy cho vấn đề giả vờ (chuyên môn của anh ta là Mật mã nếu không nhầm, nhưng anh ta đã thành công trong việc chứng minh tính tương đương toán học của phương pháp của mình với một lớp thuật toán lặp Gauss-Seidel, được hội tụ ). Để đơn giản, hãy thực hiện điều này trước khi đi sâu vào các phương thức ngầm.

LATER EDIT : Gần đây tôi đã có một bài viết về vấn đề này bằng cách sử dụng các bộ tích hợp rõ ràng cho mô phỏng cơ thể mềm hoặc bán cứng và hiệu suất và tác động chất lượng của chúng là gì. Bài viết này sẽ phục vụ như một hướng dẫn để chọn một nhà tích hợp nhất định, tùy thuộc vào kịch bản.


1
+1 Đây thực sự là một câu trả lời có chất lượng thực sự tốt về mặt nội dung: nhưng nó quá khó để tiêu hóa (bức tường văn bản). Tôi thấy rằng định dạng tốt luôn giúp tăng số phiếu. Tôi đã cải thiện nó và hy vọng bạn nhận được số phiếu bầu xứng đáng.
Jonathan Dickinson

Cảm ơn Jonathan, tôi đã thực hiện nó một cách vội vã, coi thường thủ tục "thân thiện với người đọc", nhưng tôi phải đề cập đến một vài nguồn đó vì chúng thực sự được sử dụng rất thường xuyên ngay cả ngày nay).
teodron

10

Q: Tại sao sử dụng Runge Kutta tiên tiến?
A: Bởi vì nó rất chính xác.

Q: Tại sao không?
Trả lời: Bởi vì bạn đang tạo ra một trò chơi và một công cụ vật lý rất chính xác không thành vấn đề, nên nó chỉ đủ tốt để đánh lừa người chơi.

Nhân tiện, nếu bạn bị giảm chấn nặng khi va chạm, giống như hầu hết những người chơi platformer, một Euler đơn giản là ổn.

Tôi thực sự khuyên bạn không giống như mã trong bài thuyết trình sử dụng vật lý bước cố định, giúp bạn tiết kiệm một số trục trặc tiềm năng và cho phép bạn giải quyết vấn đề bóng tăng hoặc mất năng lượng theo cách rất đơn giản. Chỉ cần đi đến nền tảng giữa tích hợp rõ ràng và ẩn:

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

Những gì bản trình bày không thể hiện là làm thế nào để xử lý các va chạm để các đối tượng dường như không vượt ra ngoài ranh giới. Giải pháp đơn giản cho vấn đề đó là sử dụng tần suất cập nhật cao. Một giải pháp phức tạp hơn nhưng có khả năng thực hiện tốt hơn là di chuyển các vật thể trở lại tại thời điểm va chạm, việc thực hiện chính xác phụ thuộc vào hành vi vật lý mong muốn.


1
+1 cho "đánh lừa người chơi" - nhưng cá nhân tôi đã có những hệ thống 'rất đơn giản' phát nổ vì tích hợp euler.
Jonathan Dickinson

@JonathanDickinson Tôi muốn nói rằng không phải vì tích hợp Euler, mà là do sự pha trộn của hoàn cảnh, tích hợp Euler chỉ là một trong số đó. Nếu bạn có một ví dụ tôi chắc chắn rằng tôi có thể tìm ra cách tránh các hệ thống phát nổ.
aaaaaaaaaaaa

Ồ, đó là trên một số công cụ VB6 thực sự cũ (khi tôi thực sự khoảng 14 tuổi) trước khi tôi biết về RK / Verlet - tôi thậm chí còn không có mã nữa: điều này mang lại sự tin cậy cao cho thực tế rằng nó có thể là một thứ khác trong hỗn hợp :).
Jonathan Dickinson

1
Tôi đoán tôi nên nói thêm rằng ngay khi bạn bắt đầu gây rối với sự hấp dẫn giữa các vật thể chứ không chỉ là trọng lực đơn giản, có vẻ hợp lý đối với tôi để đẩy mạnh phương pháp tích hợp, nó có thể không thực sự cần thiết, nhưng nếu bạn có sức mạnh xử lý thì chỉ có nhược điểm là mã phức tạp hơn một chút.
aaaaaaaaaaaa

1

Bài thuyết trình có lỗi. Phương thức được người trình bày gọi là "Euler cải tiến" thực ra là phương pháp Velocity Verlet!

Xem ở đây để có thêm nguồn có thẩm quyền: http://www.physics.udel.edu/~bnikolic/teaching/phys660/numerical_ode/node5.html

Ngoài ra phương trình tương tự là trong Wikipedia .

Một cải tiến tức thời phổ biến so với phương pháp của Euler là phương pháp Midpoint mà người thuyết trình có thể nghĩ đến nhưng cuối cùng lại nhầm Velocity Verlet là Euler được cải tiến. Sự khác biệt duy nhất giữa phương pháp Midpoint và Velocity Verlet là vận tốc là trung bình của gia tốc cuối cùng và tiếp theo thay vì chỉ phụ thuộc vào gia tốc cuối cùng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.