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 ode
thó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:
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 đó.
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 ...