Saya akan mulai bekerja di perpustakaan perangkat lunak pemecah ODE numerik , dan saya berjuang dengan cara merumuskan tes untuk implementasi pemecah. Ambisi saya adalah bahwa perpustakaan, akhirnya, akan mencakup pemecah untuk kedua masalah nonstiff dan kaku, dan setidaknya satu pemecah implisit (kurang lebih setara dengan kemampuan yang ode
rutin di Matlab ), sehingga kebutuhan metodologi tes untuk mencerminkan berbagai jenis masalah dan kriteria untuk pemecah yang berbeda.
Masalah saya sekarang adalah bahwa saya tidak tahu harus mulai dari mana dengan pengujian ini. Saya dapat memikirkan beberapa cara berbeda untuk menguji output suatu algoritma:
Tes untuk masalah yang memiliki solusi analitis, dan periksa bahwa solusi numerik berada dalam level toleransi untuk semua titik data yang dikembalikan. Ini membutuhkan pengetahuan tentang sejumlah masalah analitis yang menunjukkan semua sifat yang saya inginkan untuk diselesaikan oleh berbagai solver (kekakuan, masalah implisit, dll.), Yang tidak saya miliki, setidaknya tidak lepas dari pikiran saya.
Metode ini menguji hasil metode solver. Jadi, tidak ada jaminan bahwa solver benar-benar berfungsi, hanya saja ia berfungsi untuk masalah tes yang diberikan . Oleh karena itu, saya menduga sejumlah besar masalah tes diperlukan untuk memastikan bahwa pemecah berhasil.
Secara manual menghitung solusi untuk beberapa langkah waktu menggunakan algoritma yang ingin saya terapkan, dan kemudian melakukan hal yang sama dengan solver dan memeriksa hasilnya hasilnya sama. Ini tidak memerlukan pengetahuan tentang solusi yang sebenarnya untuk masalah tersebut, tetapi pada gilirannya membutuhkan banyak pekerjaan langsung.
Metode ini, di sisi lain, hanya menguji algoritme , yang baik bagi saya - jika orang lain telah membuktikan bahwa urutan ke- 4 Runge-Kutta berfungsi, saya tidak merasa perlu untuk melakukannya. Namun, saya khawatir bahwa akan sangat merepotkan untuk merumuskan kasus uji, karena saya tidak tahu metode yang baik untuk menghasilkan data uji (kecuali mungkin dengan tangan, yang akan banyak pekerjaan ...).
Kedua metode di atas memiliki keterbatasan serius bagi saya dengan pengetahuan saya saat ini - Saya tidak tahu satu set masalah pengujian yang baik untuk yang pertama, dan saya tidak tahu metode yang baik untuk menghasilkan data uji untuk yang kedua.
Apakah ada cara lain untuk memverifikasi pemecah ODE numerik? Apakah ada kriteria lain tentang implementasi yang harus diverifikasi? Apakah ada sumber daya (gratis) yang bagus untuk menguji pemecah ODE di luar sana 1 ?
EDIT:
Karena pertanyaan ini sangat luas, saya ingin menjelaskan sedikit. Test suite yang ingin saya buat akan memenuhi dua tujuan utama:
Memverifikasi bahwa pemecah berfungsi seperti yang diharapkan, untuk masalah yang ingin mereka selesaikan. Dengan kata lain, seorang pemecah untuk masalah yang tidak kaku dibiarkan menggunakan pisang pada masalah yang kaku, tetapi harus bekerja dengan baik pada masalah yang tidak kaku. Juga, jika ada pemecah lain di perpustakaan yang menawarkan akurasi lebih tinggi, mungkin tidak perlu untuk menegakkan hasil yang sangat akurat - cukup "cukup akurat". Jadi, bagian dari pertanyaan saya adalah tes apa yang harus digunakan untuk pemecah apa; atau, paling tidak, bagaimana seseorang harus beralasan untuk memutuskan itu.
Tes kewarasan pada saat instalasi perpustakaan. Tes ini tidak perlu (tidak seharusnya) rumit atau memakan waktu; hanya dasar-dasar yang dapat dijalankan dalam waktu kurang dari 5 detik, tetapi itu akan mengingatkan pengguna jika ada sesuatu yang aneh. Jadi, saya juga membutuhkan cara untuk membuat tes yang sangat sederhana, tetapi masih memberi tahu saya tentang keadaan perpustakaan.
1 Ya, saya sudah mencari-cari di Googling, tetapi sebagian besar yang saya temukan adalah catatan kuliah dengan contoh-contoh yang sangat sepele, dengan perkecualian khusus dari rangkaian tes CWI ODE dari Bari yang saya tidak tahu jika, atau bagaimana, saya bisa digunakan untuk keperluan saya, karena itu memperlakukan pemecah jauh lebih canggih daripada yang saya ingin menguji ...