BDF vs ngầm bước Runge Kutta


16

Có bất kỳ lý do tại sao một người nên chọn Runge Kutta (IMRK) theo thứ tự cao theo bước thời gian của BDF không? BDF dường như dễ dàng hơn nhiều với tôi như giai đoạn IMRK cần tuyến tính phá được mỗi bước thời gian. Sự ổn định cho BDF và IMRK có vẻ là một điểm cần thiết. Tôi không thể tìm thấy bất kỳ tài nguyên nào so sánh / đối chiếu các bước thời gian ẩn.qq

Nếu nó có ích, mục tiêu cuối cùng là để tôi chọn một bước thời gian ngầm định thứ tự cao cho PDE khuếch tán.

Câu trả lời:


34

Có, không có quá nhiều tài nguyên về điều này vì một số lý do. Trong một thời gian rất dài, goto tiêu chuẩn là "chỉ sử dụng các phương pháp BDF". Câu thần chú này đã được đặt ra vì một vài lý do lịch sử: vì một mã của Gear là bộ giải cứng có sẵn rộng rãi đầu tiên và đối với một bộ MATLAB khác không / không bao gồm một phương pháp RK ẩn. Tuy nhiên, heuristic này không phải lúc nào cũng đúng và tôi sẽ nói từ việc kiểm tra nó thường sai. Hãy để tôi giải thích chi tiết.

Các phương pháp BDF có chi phí cố định cao

Thứ tự thời gian thích ứng và thứ tự thích ứng trong các phương pháp BDF có chi phí thực sự cao. Các hệ số phải được tính toán lại hoặc các giá trị cần được nội suy theo các thời điểm khác nhau. Đã có rất nhiều công việc đang làm cho các mã BDF hiện tại làm tốt hơn ở đây (có hai "biểu mẫu" nổi tiếng để thực hiện cố gắng xử lý vấn đề này một cách khác nhau), nhưng thực sự đó chỉ là một vấn đề kỹ thuật phần mềm rất khó. Bởi vì điều này, thực tế hầu hết các mã BDF đều là hậu duệ từ mã gốc của Gear: Gear's, vode, lsoda, CVODE của Sundial, thậm chí cả bộ giải DAE DASKR và DASSL đều là hậu duệ từ cùng một mã.

Điều này có nghĩa là, nếu vấn đề của bạn là "quá nhỏ", chi phí cố định cao thực sự có vấn đề và các phương pháp RK tiềm ẩn sẽ làm tốt hơn.

Các phương pháp BDF bậc cao rất không ổn định đối với các giá trị riêng phức tạp

Các phương thức BDF cho phép bạn kiểm soát thứ tự tối đa và làm cho nó thận trọng hơn vì một lý do: các phương pháp BDF bậc cao hơn không thể xử lý tốt các giá trị riêng phức tạp "cỡ trung bình". Vì vậy, trong những trường hợp này, để ổn định, họ phải bỏ đơn hàng. Đây là lý do tại sao phương pháp BDF bậc 6, trong khi ổn định về mặt kỹ thuật, thường bị bỏ qua vì ngay cả lệnh thứ 5 cũng có vấn đề ở đây (và lệnh thứ 6 thậm chí còn kém ổn định hơn). Chỉ có thứ tự lên đến thứ 2 là ổn định A, vì vậy nó luôn có thể dự phòng ở đó, nhưng sau đó bước bị lỗi.

Vì vậy, khi sử dụng mã BDF cho các vấn đề không hề nhỏ, bạn sẽ không nhận được lệnh thứ 5 mọi lúc. Dao động gây ra trật tự của nó để giảm.

Các phương pháp BDF có chi phí khởi đầu cao

Các phương pháp BDF đang tự khởi động có chi phí bắt đầu cao. Chúng bắt đầu với một bước Euler nhỏ, sau đó là bước BDF-2 nhỏ, v.v ... Để tích hợp thời gian ngắn hơn, điều này có tác dụng rất không đáng kể. Nếu bạn thường xuyên dừng lại, hãy nói để xử lý sự kiện, điều này sẽ làm giảm đáng kể hiệu quả của các mã. Đây là một lý do tại sao bạn hiếm khi thấy các phương thức nhiều bước được sử dụng trong các tình huống xử lý sự kiện nặng hoặc trì hoãn phương trình (phương trình trễ khởi động lại ở mỗi lần gián đoạn đủ cao, được lan truyền tại mỗi cho mỗi thời gian trễ )Tôiττ

Các phương thức BDF, là các phương thức nhiều bước, có tỷ lệ tốt nhất

Nhưng đây là những gì phương pháp BDF đã dành cho họ: chúng có quy mô tốt nhất. Điều này là do họ có các cuộc gọi chức năng ít nhất. Điều này đã dẫn đến một ý tưởng sai lầm rằng bạn nên "luôn luôn mặc định cho các phương thức BDF" (vì lý do trên không phải lúc nào cũng đúng vì lý do hiệu quả và ổn định), nhưng điều đó có nghĩa là, nếu hàm gọi đủ đắt, thì Phương pháp BDF sẽ là tốt nhất. Nói chung, điều này có nghĩa là đối với sự phân biệt PDE đủ lớn và đủ cứng, các phương pháp BDF sẽ hiệu quả nhất. Điều đó nói rằng, "đủ lớn" này phụ thuộc rất nhiều vào vấn đề và tôi đã tìm thấy sự phân biệt PDE tốt hơn với các phương pháp lên tới 1.000 biến số không gian, vì vậy YMMV. Cách duy nhất để biết là kiểm tra.fradau

Những điểm chuẩn có sẵn?

Cuốn sách của Hairer và DiffEqBenchmark (giải thích bên dưới) có lẽ là tốt nhất về các sơ đồ chính xác công việc dễ dàng có sẵn. Hairer Giải các phương trình vi phân thông thường II có một loạt các sơ đồ chính xác công việc ở trang 154 và 155. Kết quả về các vấn đề anh ấy chọn phù hợp với những gì tôi đã nêu ở trên vì những lý do tôi đã nêu ở trên: RK ngầm sẽ hiệu quả hơn nếu vấn đề không xảy ra "Đủ lớn". Một điều thú vị khác cần lưu ý là các phương pháp Rosenbrock bậc cao xuất hiện là hiệu quả nhất trong nhiều thử nghiệm của anh ấy (như Rodas) trong chế độ có lỗi cao hơn và RK ẩn radau5là hiệu quả nhất với các lỗi thấp hơn. Nhưng vấn đề kiểm tra của ông chủ yếu không phải là sự phân biệt đối với các PDE lớn, vì vậy hãy tính đến các điểm trên.

Làm thế nào để bạn kiểm tra / điểm chuẩn?

Tôi muốn thử nghiệm điều này với differentialEquations.jl trong Julia (từ chối trách nhiệm: Tôi là một trong những nhà phát triển). Đây là ở Julia. Ngôn ngữ lập trình nên thực sự nhận được một ghi chú ở đây. Hãy nhớ rằng khi chi phí của lệnh gọi hàm tăng lên, các phương thức BDF sẽ tốt hơn. Trong R / MATLAB / Python, chức năng của người dùng là mã R / MATLAB / Python duy nhất mà người giải được tối ưu hóa phải thực sự sử dụng: nếu bạn đang sử dụng trình bao bọc SciPy hoặc Sundials, tất cả đều là mã C / Fortran ngoại trừ chức năng bạn vượt qua . Điều này có nghĩa là, trong các ngôn ngữ động (không phải Julia), các phương thức BDF hoạt động tốt hơn bình thường vì các lệnh gọi hàm rất không được tối ưu hóa (đây có thể là lý do tại sao Shampine đưa ode15svào bộ MATLAB, nhưng không có phương thức RK ẩn) .

Vì vậy, Julia là một nền tảng thử nghiệm tốt cho trường hợp tối ưu hơn vì nếu cuộc gọi chức năng ổn định kiểu, của bạn nhanh / hiệu quả như bất kỳ chức năng C / Fortran nào. Điều tuyệt vời với DifentialEquations.jl là bạn có thể kiểm tra giữa một tấn thuật toán chỉ bằng cách chuyển đổi một dòng mã. Đối với một thăm dò, bạn có thể chuyển đổi giữa hai với:fODEProblem

@time sol = solve(prob,CVODE_BDF())
@time sol = solve(prob,radau())

trong đó cái đầu tiên sử dụng Sundials ' CVODE(phương pháp BDF) và cái thứ hai sử dụng Hairer radau(RK ngầm).

Đối với bất kỳ ODEProblem, bạn có thể sử dụng các công cụ đo điểm chuẩn để xem tỷ lệ các thuật toán khác nhau cho các dung sai thích ứng khác nhau. Một số kết quả được đăng tại DiffEqBenchmark.jl . Ví dụ, trong bài toán ROBER (hệ thống gồm 3 ODE cứng), bạn có thể thấy rằng Sundials thực sự không ổn định và phân kỳ với dung sai đủ cao (trong khi các phương pháp khác hội tụ tốt), hiển thị lưu ý ở trên về các vấn đề ổn định. Về vấn đề Van Der Pol , bạn có thể thấy nó rõ hơn. Tôi có nhiều hơn những gì tôi chưa đăng, nhưng có lẽ sẽ không nhận được cho đến khi tôi hoàn thành một số phương pháp Rosenbrock bậc cao hơn (Rodas là phiên bản Fortran của những phương pháp đó).

(Lưu ý: những điểm chuẩn cứng đó cần cập nhật. Đối với một, văn bản cần cập nhật vì một số lý do phương thức của ODE.jl ...)

Phương pháp đùn và RKC

Ngoài ra còn có các phương pháp ngoại suy giống như seulexđược thực hiện cho các vấn đề cứng. Đây là "thứ tự thích ứng vô hạn", nhưng điều đó chỉ có nghĩa là chúng không tốt về mặt bản chất khi bạn đang tìm kiếm một lỗi rất thấp (nghĩa là tìm cách giải quyết các vấn đề cứng ở mức thấp hơn 1e-10hoặc hơn , trong trường hợp đó bạn có thể sử dụng một phương pháp rõ ràng) . Tuy nhiên, trong hầu hết các trường hợp chúng không hiệu quả và nên tránh.

Runge-Kutta Chebyschev là một phương pháp rõ ràng cũng hoạt động trên các vấn đề cứng mà bạn nên xem xét. Tôi chưa bao bọc nó trong differentialEquations.jl vì vậy tôi không có bất kỳ bằng chứng cứng nào về việc nó diễn ra như thế nào.

Các phương pháp khác cần xem xét: phương pháp chuyên biệt cho PDE cứng

Có lẽ nên lưu ý rằng các phương pháp Rosenbrock bậc cao thực sự làm rất tốt, thậm chí tốt hơn nhiều lần, đối với các vấn đề cứng cỡ nhỏ vừa khi bạn có thể dễ dàng tính toán Jacobian. Tuy nhiên, đối với một số PDE, tôi tin rằng các vấn đề khuếch tán tiến bộ thuộc loại này, Rosenbrock có thể mất một số đơn đặt hàng chính xác. Ngoài ra, họ cần người Jacob rất chính xác để giữ độ chính xác của họ. Trong Julia điều này là dễ dàng bởi vì người giải quyết đi kèm với biểu tượng và tự động hóa có thể chính xác với máy epsilon. Tuy nhiên, những thứ như MATLABode23scó thể có vấn đề vì những triển khai này sử dụng sự khác biệt hữu hạn. Đối với phương pháp BDF và các phương pháp RK ngầm định, các lỗi trong Jacobian dẫn đến sự hội tụ chậm hơn, trong khi đối với Rosenbrock, vì đây không phải là các phương trình ngầm định và là các phương pháp RK với các phép nghịch đảo Jacobian trong đó, chúng chỉ mất đi độ chính xác.

Các phương pháp khác để xem xét là phương pháp RK theo cấp số nhân, phân biệt thời gian theo hàm mũ (ETD), hệ số tích hợp ngầm (IIF) và phương pháp Rosenbrock theo cấp số nhân. Ba cái đầu tiên sử dụng thực tế là, trong nhiều phân biệt PDE,

bạnt= =Mộtbạn+f(bạn)

Trong đó là toán tử tuyến tính và tuyến tính này cho phép bạn giải quyết chính xác phần toán tử . Nhược điểm là, phương pháp kết quả phải sử dụng dày đặc ngay cả khi thưa thớt, và do đó, có rất nhiều công việc trong phương pháp Krylov. Tuy nhiên, đây là những phương pháp ổn định A, tránh các phương trình ngầm định và vì vậy chúng có thể rất hiệu quả đối với sự phân biệt PDE.MộtMộtbạneMộtMột

Các phương pháp Rosenbrock theo cấp số nhân không cần , và thay vào đó được phân chia bởi trong đó là Jacobian và , nhưng đó là cùng một ý tưởng.MộtJbạn+g(bạn)Jf= =Jbạn+g

Vẫn còn các phương pháp khác: những sáng tạo mới nhất

Các phương pháp hoàn toàn ẩn rõ ràng làm tốt cho các phương trình cứng. Nếu PDE không đủ lớn, bạn không thể "song song trong không gian" một cách hiệu quả để sử dụng HPC. Thay vào đó, bạn có thể tạo ra sự rời rạc song song trong thời gian hoàn toàn ẩn và do đó tốt cho các phương trình cứng, nhưng song song để sử dụng toàn bộ phần cứng. XBear là một người giải sử dụng một kỹ thuật như thế này và các phương thức chính là phương pháp PFFAST và parareal. DifentialEquations.jl đang phát triển một phương thức mạng thần kinh hoạt động tương tự.

Một lần nữa, điều này là tối ưu khi bạn không có sự phân tách không gian đủ lớn để song song hiệu quả, nhưng có sẵn các tài nguyên cho tính toán song song.

Kết luận: cân nhắc tiệm cận với một hạt muối

Trong một thời gian rất dài trong lịch sử diffeq số, có ý kiến ​​cho rằng các phương pháp ngoại suy là tốt nhất vì về mặt kỹ thuật chúng có thể đạt được bất kỳ trật tự nào. Điều này có nghĩa là, đối với một đủ nhỏ , chúng sẽ là hiệu quả nhất (vì vậy, nếu bạn đang tìm kiếm một giải pháp rất chính xác, vâng!). Tuy nhiên, hầu như không ai thực sự làm việc trong chế độ nơi những thứ này hiệu quả, đó là lý do tại sao mọi người thường không sử dụng các phương pháp ngoại suy nữa. Đây là một lời cảnh báo: cân nhắc tiệm cận với một hạt muốiΔt

Các phương pháp BDF là không có triệu chứng tốt nhất, nhưng trong hầu hết các trường hợp, có lẽ bạn không làm việc trong chế độ đó. Nhưng nếu sự rời rạc không gian có đủ điểm, các phương thức BDF có thể song song hiệu quả trong không gian (bằng cách song song hóa giải tuyến tính) và sẽ có ít lời gọi hàm nhất, và do đó sẽ làm tốt nhất. Nhưng nếu sự phân biệt PDE của bạn không đủ lớn, hãy xem xét kỹ các phương pháp RK, Rosenbrock, RK theo cấp số nhân, v.v. Sử dụng bộ phần mềm như differentialEquations.jl giúp dễ dàng trao đổi giữa các phương thức khác nhau có thể thực sự hữu ích cho bạn để hiểu phương pháp nào tốt nhất cho miền vấn đề của bạn, vì trong nhiều trường hợp không thể biết trước được.

[Nếu bạn có bất kỳ vấn đề ví dụ nào bạn muốn thêm vào bộ thử nghiệm, xin vui lòng giúp đỡ để có được một cái gì đó trong đó. Tôi muốn giữ một nguồn lực rất toàn diện về điều này. Tôi hy vọng sẽ sớm có tất cả các điểm chuẩn của Hairer ở dạng máy tính xách tay có thể chạy được và muốn có các vấn đề khác đại diện cho các lĩnh vực khoa học. Bất kỳ trợ giúp đều được đánh giá cao!]


3
Đây là một phản hồi rất chi tiết, tôi có một số hướng mới để xem xét! Tôi đánh giá rất cao thời gian của bạn.
107904

3
Câu trả lời tốt nhất cho bất kỳ câu hỏi trong diễn đàn này trong một thời gian tốt!
Wolfgang Bangerth
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.