Sayısal ODE çözücülerinin bir yazılım kütüphanesinde çalışmaya başlamak üzereyim ve çözücü uygulamaları için testlerin nasıl formüle edileceği ile mücadele ediyorum. Benim hırs kütüphane, sonuçta, hem nonstiff ve sert problemleri için çözücüleri ve (az ya da çok yetenekleri ile eşit en az bir örtük çözücüsü içerecektir olmasıdır Matlabda rutinleri Test metodolojisi ihtiyaçları çeşitli yansıtmak için bu nedenle,) farklı çözücüler için problem türleri ve kriterleri.ode
Şimdi benim sorunum bu teste nereden başlayacağımı bilmemem. Bir algoritmanın çıktısını test etmenin birkaç farklı yolunu düşünebilirim:
Analitik bir çözümü olan bir sorunu test edin ve sayısal çözümün tüm iade edilen veri noktaları için tolerans seviyeleri dahilinde olduğunu kontrol edin. Bu, farklı çözücülerin çalışmasını istediğim tüm özellikleri (sertlik, örtük sorunlar vb.) Sergileyen, en azından başımın üstünde olmayan bir dizi analitik problem hakkında bilgi gerektirir.
Bu yöntem, çözücü yönteminin sonuçlarını test eder . Dolayısıyla, çözücünün gerçekten çalıştığının, sadece verilen test problemi için işe yaradığının garantisi yoktur . Bu nedenle, çözücünün çalıştığını doğrulamak için çok sayıda test sorununa ihtiyaç duyulduğundan şüpheleniyorum.
Uygulamayı düşündüğüm algoritmaları kullanarak çözümü bir kaç adım için manuel olarak hesaplayın ve ardından çözücülerle aynı işlemi yapın ve sonuçların aynı olup olmadığını kontrol edin. Bu , soruna gerçek çözüm hakkında hiçbir bilgi gerektirmez , ancak sırayla çok fazla pratik çalışma gerektirir.
Bu yöntem, diğer taraftan, sadece test algoritması bana göre gayet, - başkası 4 kanıtlamıştır eğer inci Runge-Kutta işleri düzeni, ben umutsuz bir ihtiyaç hissetmiyorum. Ancak, test verilerini formüle etmenin çok zahmetli olacağından endişe duyuyorum, çünkü test verilerini oluşturmak için iyi bir yöntem bilmiyorum (belki de çok fazla iş olacak ... elle).
Yukarıdaki iki yöntemin de benim için şu anki bilgilerimle ilgili ciddi kısıtlamaları var - birincisi için iyi bir test problemi kümesi bilmiyorum ve ikincisi için test verisi üretmenin iyi bir yöntemini bilmiyorum.
Sayısal ODE çözücülerini doğrulamanın başka yolları var mı? Uygulamalarda doğrulanması gereken başka kriterler var mı? ODE çözücülerini test etmek için iyi (ücretsiz) kaynaklar var mı 1 ?
EDIT:
Bu soru çok geniş olduğu için biraz açıklığa kavuşturmak istiyorum. Oluşturmak istediğim test paketi iki ana amacı dolduracak:
Çözücülerin, çözmeyi amaçladıkları sorunlar için beklendiği gibi çalıştığını doğrulayın. Başka bir deyişle, sert olmayan problemler için bir çözücünün sert bir problem için muz kullanmasına izin verilir, ancak sert olmayan problemlerde iyi performans göstermesi gerekir. Ayrıca, kütüphanede daha yüksek doğruluk sunan başka çözücüler varsa, çok kesin sonuçların uygulanması gerekli olmayabilir - sadece "yeterince doğru". Bu yüzden sorumun bir kısmı, hangi çözücüler için hangi testlerin kullanılması gerektiğidir; veya, en azından bir kişinin buna karar vermesi için neden olması gerektiği.
Kütüphanenin kurulumu üzerine sağlık testi. Bu testlerin ayrıntılı veya zaman alıcı olması gerekmez (olmamalıdır); sadece 5 saniyenin altında çalıştırılabilecek temel bilgiler, ancak grafik dışı bir şey olursa kullanıcıyı uyaracaktır. Bu yüzden, aynı zamanda çok basit testler inşa etmenin bir yoluna ihtiyacım var, ancak bu bana kütüphanenin durumu hakkında bir şeyler söylüyor.
1 Evet, gözlerimin gözünü kestirdim, fakat bulduğum şeylerin çoğu, bilmiyorum veya nasıl, bilmediğim , Bari'den alınan CWI ODE testinin istisnai durumları dışında, çok önemsiz örnekleri olan ders notları. Amaçlarım için kullanabilir, çünkü test etmek istediğimden çok daha karmaşık çözücülere davranır ...