Làm thế nào để kiểm tra một triển khai ODE số?


26

Tôi sắp bắt đầu làm việc với một thư viện phần mềm gồm các bộ giải ODE số và tôi đang vật lộn với cách xây dựng các bài kiểm tra cho việc triển khai bộ giải. Tham vọng của tôi là thư viện, cuối cùng, sẽ bao gồm những người giải quyết cho cả những vấn đề không nghiêm trọng và cứng nhắc, và ít nhất một người giải quyết ngầm (ít nhiều ngang bằng với khả năng của các odethói quen trong Matlab ), vì vậy phương pháp kiểm tra cần phải phản ánh nhiều cách khác nhau các loại vấn đề và tiêu chí cho người giải quyết khác nhau.

Vấn đề của tôi bây giờ là tôi không biết bắt đầu từ đâu với thử nghiệm này. Tôi có thể nghĩ ra một vài cách khác nhau để kiểm tra đầu ra của thuật toán:

  • Kiểm tra một vấn đề có giải pháp phân tích và kiểm tra xem giải pháp số có nằm trong mức dung sai cho tất cả các điểm dữ liệu được trả về hay không. Điều này đòi hỏi kiến ​​thức về một số vấn đề phân tích thể hiện tất cả các tính chất mà tôi muốn các bộ giải khác nhau làm việc với (độ cứng, các vấn đề ngầm, v.v.), mà tôi không có, ít nhất là không nằm trên đỉnh đầu.

    Phương pháp này kiểm tra kết quả của phương pháp giải. Vì vậy, không có gì đảm bảo rằng bộ giải thực sự hoạt động, chỉ là nó hoạt động cho bài toán kiểm tra đã cho . Do đó, tôi nghi ngờ một số lượng lớn các vấn đề kiểm tra là cần thiết để tự tin xác minh rằng bộ giải hoạt động.

  • Tự tính toán giải pháp cho một vài bước thời gian bằng cách sử dụng các thuật toán tôi dự định thực hiện, sau đó thực hiện tương tự với các bộ giải và kiểm tra xem kết quả có giống nhau không. Điều này đòi hỏi không có kiến ​​thức về giải pháp thực sự cho vấn đề, nhưng đến lượt nó đòi hỏi khá nhiều công việc thực hành.

    Mặt khác, phương pháp này chỉ kiểm tra thuật toán , điều này cũng ổn đối với tôi - nếu ai đó đã chứng minh rằng Runge-Kutta thứ 4 hoạt động, tôi không cảm thấy cần phải tuyệt vọng. Tuy nhiên, tôi lo lắng rằng việc xây dựng các trường hợp thử nghiệm sẽ rất phức tạp, vì tôi không biết một phương pháp tốt để tạo dữ liệu thử nghiệm (ngoại trừ có thể bằng tay, sẽ rất nhiều công việc ...).

Cả hai phương pháp trên đều có những hạn chế nghiêm trọng đối với tôi với kiến ​​thức hiện tại của tôi - Tôi không biết một loạt vấn đề kiểm tra tốt cho lần đầu tiên và tôi không biết một phương pháp tốt để tạo dữ liệu kiểm tra cho lần thứ hai.

Có cách nào khác để xác minh người giải ODE số không? Có các tiêu chí khác về việc thực hiện cần được xác minh? Có bất kỳ tốt (miễn phí) nguồn lực vào thử nghiệm giải quyết ODE ra có 1 ?

EDIT:
Vì câu hỏi này rất rộng, tôi muốn làm rõ một chút. Bộ thử nghiệm tôi muốn tạo sẽ điền vào hai mục đích chính:

  1. Xác minh rằng người giải quyết làm việc như mong đợi, cho các vấn đề họ dự định sẽ giải quyết. Nói cách khác, một người giải quyết các vấn đề không cứng được phép đi chuối trong một vấn đề cứng, nhưng nên thực hiện tốt các vấn đề không cứng. Ngoài ra, nếu có các bộ giải khác trong thư viện cung cấp độ chính xác cao hơn, có thể không cần thực thi các kết quả rất chính xác - chỉ "đủ chính xác". Vì vậy, một phần của câu hỏi của tôi là những bài kiểm tra nào nên được sử dụng cho những gì người giải quyết; hoặc, ít nhất, làm thế nào người ta nên lý do để quyết định điều đó.

  2. Kiểm tra vệ sinh khi cài đặt thư viện. Những thử nghiệm này không cần (không nên) được xây dựng hoặc tốn thời gian; chỉ những điều cơ bản có thể chạy trong dưới 5 giây, nhưng điều đó sẽ cảnh báo người dùng nếu có thứ gì đó kỳ lạ. Vì vậy, tôi cũng cần một cách để xây dựng các bài kiểm tra rất đơn giản, nhưng điều đó vẫn cho tôi biết điều gì đó về trạng thái của thư viện.


1 Vâng, tôi đã rời mắt ra, nhưng hầu hết những gì tôi tìm thấy là các ghi chú bài giảng với các ví dụ rất tầm thường, ngoại trừ đáng chú ý là bài kiểm tra CWI ODE được đặt từ Bari mà tôi không biết, hoặc làm thế nào, tôi có thể sử dụng cho mục đích của tôi, vì nó xử lý những người giải quyết phức tạp hơn nhiều so với những người tôi muốn kiểm tra ...


2
@ user75064: Hoàn toàn đúng! Tôi không biết rằng trang web thậm chí còn tồn tại =) Bất kỳ mod nào, vui lòng di chuyển tôi đến đó.
Tomas Aschan

Có các liên kết đến các bộ kiểm tra khác trong câu trả lời này trên Math Stack Exchange .
Geoff Oxberry

@GeoffOxberry: Tôi đã tìm thấy một vài trong số đó trước đây. Hầu hết trong số chúng được triển khai trong FORTRAN và giả định rằng người đọc muốn kiểm tra người giải quyết trong cùng một ngôn ngữ, thêm một nguồn lỗi khác ... Tuy nhiên, một cặp đôi (các bài viết trên bộ DETEST) thực sự hữu ích. Cảm ơn rất nhiều!
Tomas Aschan

Câu trả lời:


12

Đây là một câu hỏi rất rộng và tôi sẽ cung cấp cho bạn một số điều cần suy nghĩ (một số đã được đưa vào bài đăng của bạn, nhưng chúng được lặp lại ở đây cho đầy đủ).

Phạm vi vấn đề

  • Bạn cần xác định giao diện về cách chỉ định vấn đề.
  • Bạn sẽ cho phép các tham số có thể được sửa chữa hoặc có thể thay đổi cho các giải pháp?
  • ϵ
  • Bạn sẽ cho phép độ chính xác vô hạn?
  • Bạn sẽ kiểm tra tốc độ và độ nhạy với độ chính xác số?
  • Bạn đã chọn hai (có thể nhiều hơn) thư viện đã tồn tại để so sánh kết quả chưa?
  • Làm thế nào bạn sẽ chọn tiêu chí dừng, bạn sẽ sử dụng các phương pháp khác nhau và cho phép người dùng chọn hoặc xác định tiêu chí của riêng họ?
  • Bạn sẽ đo lỗi bằng các biện pháp khác nhau và cho phép người dùng bật và tắt chúng?
  • Bạn đã xem các gói chuyên nghiệp như Máy tính-Đại số-Hệ thống (CAS) và hiểu tất cả các tùy chọn mà họ cho phép chưa?
  • Bạn sẽ cho phép hiển thị kết quả và / hoặc so sánh và / hoặc lô?

Đề xuất vấn đề

  • Bạn cần viết một đặc tả kiểm tra xác định nguồn gốc của các vấn đề, phạm vi của các vấn đề đã được kiểm tra, nắm bắt kết quả và số liệu của việc chạy các thói quen.
  • Tôi chắc chắn sẽ tìm đến các thư viện khác đã có sẵn cho các vấn đề họ đang sử dụng (có thể kiểm tra các tệp).
  • Tôi sẽ đến các thư viện đại học và xem qua các cuốn sách về ODE và tìm ra các vấn đề thuộc mọi loại, những loại có dạng đóng hoặc các giải pháp chỉ được biết đến.
  • Trường hợp 1: Chúng tôi muốn có nhiều biến thể của các vấn đề về giải pháp dạng đóng mà chúng tôi có thể nhận được để so sánh kết quả chính xác và số.
  • Trường hợp 2: Tôi sẽ đi đến mọi cuốn sách phân tích số mà tôi có thể tìm và nắm bắt các ví dụ đã làm việc và sao chép chúng. Tôi cũng sẽ nắm bắt các bộ vấn đề, đặc biệt là những bộ có một số bệnh lý tồn tại trong hầu hết các cuốn sách (độ nhạy cảm với loại này hoặc loại đó).
  • Trường hợp 3: Tôi sẽ đi đến các ngành toán ứng dụng khác nhau như Vật lý, Sinh thái học, Sinh học, Kinh tế, et. al và nắm bắt các vấn đề từ mỗi miền đó để xác thực rằng ngôn ngữ đặc tả của bạn cho các vấn đề cho phép các ví dụ đó.
  • Trường hợp 4: Tôi sẽ nghiên cứu các bài báo / tạp chí có chứa các ví dụ hữu ích nhất mà tác giả cụ thể phải sửa đổi một cách tiếp cận cụ thể để giải thích cho một số bệnh lý hoặc kỳ lạ hoặc độ cứng.
  • Trường hợp 5: Tìm kiếm trên web cho các ví dụ bổ sung. Đối với cứng , xem các tài liệu tham khảo ở đây và kiểm tra chúng TẤT CẢ để tìm ra các vấn đề kiểm tra. Dưới đây là một số ví dụ MATLAB để xem xét.

Đây không phải là duy nhất. Nếu bạn xem cuốn sách "Phương pháp số cho tối ưu hóa không giới hạn và phương trình phi tuyến" của Dennis và Schnabel, Phụ lục B, "Các vấn đề kiểm tra", bạn có thể thấy họ đã làm như thế nào. Sau khi phát triển một trong những bộ thuật toán viết đẹp nhất mà tôi từng thấy, họ đã đưa ra một tập hợp các vấn đề mà nó tạo ra nếu bị hỏng. Bạn phải điều chỉnh ở đây và ở đó! Chúng bao gồm năm vấn đề rất khác nhau và bệnh lý làm căng thẳng khả năng của người giải quyết. Điều này đã dạy tôi rằng chúng ta có thể tiếp tục ném các vấn đề vào các thuật toán mà chúng không có khả năng xử lý vì một loạt lý do. Lưu ý, họ thậm chí đã mượn bộ vấn đề này từ More ', Garbow và Hillstrom (bạn cũng có thể tra cứu tài liệu tham khảo đó và có lẽ có những vấn đề khác bạn có thể sử dụng làm hướng dẫn).

Nói cách khác, đây không phải là một nhiệm vụ tầm thường. Bạn cần các trường hợp kiểm tra đã biết Trả lời luôn cho phép bạn kiểm tra tính hợp lệ của các cập nhật và không phá vỡ mọi thứ. Đó là, một tập hợp các vấn đề có thể lặp lại và mở rộng từ thấp đến cao, từ dễ đến khó, từ có thể đến không thể, ... Bạn cũng cần một tập hợp các vấn đề mà người giải quyết của bạn không thể xử lý để thực sự hiểu được những hạn chế của nó.


2

Một kiểm tra độ tỉnh táo mà tôi chạy đối với các bộ giải ODE của mình là chỉ cần kiểm tra nó trên các hệ thống tuyến tính nhỏ hơn thông qua việc tính toán chính xác hàm mũ của ma trận hệ thống. tức là đã cho

dudt=Au

kiểm tra lỗi trong

exp(tA)u0u^(t)

u^(t)

Chỉ cần không tính toán số mũ với một trong những bước thời gian của bạn (ví dụ: phương pháp không rõ ràng số 6 :) http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf )


Chỉ cần lưu ý: Các nhà tích hợp DE được coi là "đáng ngờ" ở chỗ chúng khá kém hiệu quả so với tỷ lệ + bình phương, không phải do không chính xác.
JM

1

Bạn có thể thử nghiên cứu "Phương pháp giải pháp sản xuất", đây là phương pháp chung được sử dụng để kiểm tra việc thực thi mã giải quyết PDE (có thể được sử dụng để tìm cả lỗi toán học và mã hóa). Tôi tưởng tượng nó có thể được điều chỉnh để hoạt động để giải quyết ODE, nếu phương pháp giải pháp của bạn đủ chung chung.

http://prod.sandia.gov/techlib/access-control.cgi/2000/001444.pdf

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.