Tôi chỉ đơn giản muốn biết liệu Phương pháp số Dormand-Prince hay Phương pháp số Cash-Karp là chính xác hơn.
Tôi chỉ đơn giản muốn biết liệu Phương pháp số Dormand-Prince hay Phương pháp số Cash-Karp là chính xác hơn.
Câu trả lời:
Vì tôi vừa hoàn thành tối ưu hóa rất nhiều trong số chúng trong một phần mềm, differentialEquations.jl , tôi quyết định chỉ đưa ra một so sánh về các phương thức 4/5 chính của Thứ tự. Phương pháp Fehlberg bị bỏ qua vì nó thường được biết là kém hiệu quả hơn phương pháp DP5.
Phương pháp Dormand-Prince được phát triển chính xác như một cặp 4/5 với cách sử dụng phép ngoại suy cục bộ (tức là bước với cặp thứ tự 5. Điều này là do nó được thiết kế gần với hệ số lỗi cắt ngắn nguyên tắc tối ưu (tức là tối thiểu) (dưới hạn chế cũng có số bước tối thiểu để đạt được thứ tự 5). Nó có phép nội suy bậc 4 miễn phí, nhưng cần các bước bổ sung cho phép nội suy bậc 5.
để giảm số lượng các cuộc gọi chức năng và tiết kiệm thời gian. Vì vậy, cuối cùng, "cặp" này đã được phát triển với rất nhiều ràng buộc khác trong tâm trí, và vì vậy không có lý do gì để mong đợi nó sẽ "chính xác hơn", ít nhất là một cặp 4/5. Nếu bạn thêm tất cả các máy móc khác sau đó, vào các vấn đề cứng (bán), nó sẽ chính xác hơn (nhưng trong trường hợp đó bạn có thể muốn sử dụng một phương pháp khác như phương pháp W-Rosenbrock). Đây là một lý do tại sao cặp này không trở thành tiêu chuẩn so với cặp DP5, nhưng nó vẫn có thể hữu ích (có lẽ sẽ tốt cho phương pháp lai chuyển sang bộ giải cứng khi gặp độ cứng?).
Để làm tròn câu trả lời, chúng ta hãy thảo luận về cặp Bogacki & Shampine đã được đề cập trong bình luận. Phương thức BS5 loại bỏ ràng buộc "sử dụng các lệnh gọi hàm ít nhất" (nó sử dụng 8 thay vì 6) để thực hiện 2 việc:
Nhận hệ số lỗi nguyên tắc thực sự thấp.
Tạo một phép nội suy bậc 5 với các hệ số lỗi thấp hơn.
Các hệ số này thấp đến mức đối với nhiều vấn đề về dung sai mà người dùng có thể sử dụng, nó đo như thể thứ 6 của nó. Bài báo của họ cho thấy rằng đối với các cuộc gọi chức năng giá rẻ, điều này có thể hiệu quả hơn DP5 bằng khoảng số tiền tương tự tại DP5 là trên RKF5 (phương pháp Fehlberg).
Bạn có thể ghép hai và hai lại với nhau và xem: đợi một chút, Shampine là người đã phát triển bộ MATLAB ODE, đây là sau khi bài báo cặp BS5 được xuất bản, tại sao MATLAB không ode45
sử dụng cặp BS5? Một lý do là, nó chủ yếu được thực hiện trước khi cặp BS5 được phát hành lại. Lý do khác là vì ode45
chức năng được phát triển để giảm thiểu thời gian. Mặc dù cặp BS5 hiệu quả hơn (nghĩa là có độ chính xác thấp hơn), mục đích củaode45
là có lỗi đủ tốt để tạo ra một cốt truyện đủ tốt. Điều này có nghĩa là, để đối phó với các bước lớn, nó cũng tạo ra hai giải pháp nội suy bổ sung giữa mỗi bước. Đối với phương pháp DP5, có phép nội suy bậc 4 "miễn phí" và do đó, việc này nhanh hơn nhiều so với sử dụng BS5. Vì nó cũng "đủ chính xác" ở mức dung sai vừa phải, phương pháp này được đặt làm tiêu chuẩn vì nó mang lại trải nghiệm người dùng tiêu chuẩn tốt hơn BS5 khi thực hiện tính toán tương tác (vì vậy lựa chọn này là cụ thể theo ngữ cảnh).
Đây là một ít người biết về. Nó bắt nguồn từ bài báo này . Nó xuất phát bằng cách sử dụng ít giả định hơn phương pháp DP5 và cố gắng lấy một cặp có hệ số lỗi cắt ngắn theo nguyên tắc thấp hơn. Trong các thử nghiệm của nó, nó nói rằng nó đạt được điều này. Nó cũng có phép nội suy bậc 4 miễn phí như phương thức DP5.
Tôi đã viết gói số hiệu differentialEquations.jl là một bộ giải quyết khá toàn diện cho Julia. Dọc theo chiến tuyến, tôi đã thực hiện hơn 100 phương pháp Runge-Kutta và được tối ưu hóa bằng tay. Ba trong số các nhà tích hợp được tối ưu hóa là các phương pháp DP5, BS5 và Tsit5 (Tôi đã không làm CK5 bởi vì, như đã lưu ý trong câu chuyện hậu trường, đây là trường hợp chính dành cho các vấn đề khó khăn. Tôi nghĩ cách tốt hơn để xử lý chúng là sử dụng DP5 / BS5 và chuyển sang các bộ giải cứng khi cần theo cách như LSODE, nhưng đó là một câu chuyện cho một thời điểm khác) (một cách để thấy chúng gần tối ưu là các phương pháp này nhanh hơn các cách dopri5
thực hiện Hairer , vì vậy chúng ít nhất là thực hiện tốt). Các thử nghiệm giữa rất nhiều phương pháp Runge-Kutta về phương trình nonstiffcó thể được tìm thấy trong thư mục điểm chuẩn . Tôi đang bổ sung thêm khi tôi đi cùng, nhưng bạn có thể thấy từ sơ đồ chính xác của ODE tuyến tính và ba vấn đề cơ thể, tôi đo các phương pháp DP5 và Tsit5 để có hiệu quả gần như giống hệt nhau, đánh bại phương pháp BS5 trong ODE tuyến tính, trong khi đó là DP5 và BS5 gần như giống hệt nhau về vấn đề Ba thân với Tsit5 phía sau. Từ thông tin này, ít nhất là bây giờ, tôi đã giải quyết phương thức DP5 làm mặc định, phù hợp với các khuyến nghị trước đó. Điều đó có thể thay đổi với các bài kiểm tra trong tương lai (hoặc bạn có thể thêm điểm chuẩn! Hãy thoải mái đóng góp hoặc gắn sao cho repo để hỗ trợ thêm nỗ lực này).
Tóm lại, các cặp thứ tự 5 đi như thế này:
Cặp Dormand-Prince 4/5 là một cặp tốt vì nó được tối ưu hóa tốt về mặt hệ số lỗi cắt ngắn nguyên tắc và có phép nội suy 4 đơn hàng giá rẻ, giúp nhanh chóng tạo ra các lô tốt.
Cặp Cash-Karp có nhiều ràng buộc hơn để xử lý tốt hơn các phương trình cứng. Tuy nhiên, để có được lợi ích đầy đủ, bạn sẽ muốn sử dụng thuật toán đầy đủ với 5 phương thức được nhúng.
Phương pháp thứ tự Bogacki & Shampine Order 5 có thể hiệu quả nhất về mặt tạo ra lỗi cho mỗi lệnh gọi hàm (nó có một công cụ ước tính lỗi kép, do đó, trong các vấn đề khó hơn có thể sẽ tốt hơn), nhưng điều đó cho phép nó có thời gian lớn hơn. Tuy nhiên, nếu bạn chỉ muốn tạo ra một cốt truyện mượt mà, thì bạn phải chống lại phương pháp này: sử dụng dung sai thấp hơn (vì vậy sẽ mất nhiều thời gian hơn DP5 nhưng ít lỗi hơn) hoặc sử dụng nhiều bước được nội suy hơn. Cuối cùng, điều này có nghĩa là nó có thể không tốt hơn cho các ứng dụng tương tác, mặc dù nó có thể tốt hơn cho một số ứng dụng máy tính khoa học.
Thần thông 4/5. Được phát triển khá gần đây (2011) để đánh bại DP5 trong một so sánh trực tiếp. Các thử nghiệm của tôi không cho tôi một lý do để tin rằng nó tốt hơn DP5 đến mức bây giờ nó được coi là phương pháp tiêu chuẩn mới, nhưng các thử nghiệm trong tương lai có thể bắt đầu có lợi cho nó.
Tôi đã cải thiện việc thực hiện Tsit5. Hiện tại nó hoạt động tốt hơn DP5 trong hầu hết các thử nghiệm, cả triển khai dopri của DifentialEquations.jl và Hairer (mặc dù người ta có thể ngạc nhiên rằng việc triển khai differentialEquations.jl thực sự nhanh hơn, tất nhiên giúp triển khai Tsit5). Bây giờ tôi giới thiệu nó như là phương pháp 4/5 thứ tự mặc định.
Nếu bạn quan tâm đến việc so sánh hai tích hợp giải quyết