Bir sayısal ODE çözücü uygulamasını nasıl test eder?


26

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:

  1. Çö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.

  2. 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 ...


2
@ user75064: Kesinlikle! O sitenin bile var olduğunu bilmiyordum =) Herhangi bir mod, beni oraya taşımaktan çekinmeyin.
Tomas Aschan

Math Stack Exchange'de bu cevaptaki diğer test setlerine bağlantılar vardır .
Geoff Oxberry

@ GeorgeOxberry: Daha önce bunlardan birkaçını buldum. Bunların çoğu FORTRAN'da uygulandı ve okuyucunun çözücüleri aynı dilde test etmek istediğini ve başka bir hata kaynağı eklediğini varsayar ... Ancak, bir çift (DETEST paketindeki yazılar) gerçekten yararlı oldu. Çok teşekkürler!
Tomas Aschan

Yanıtlar:


12

Bu çok geniş bir sorudur ve size düşünmeniz gereken bazı şeyler vereceğim (bazıları görevinize zaten eklenmiş, ancak tamlık için burada tekrar ediyorlar).

Problemlerin Kapsamı

  • Sorunların nasıl belirleneceği ile ilgili arayüzü tanımlamanız gerekir.
  • Sabitlenebilecek veya çözümlerde değişiklik gösterebilecek parametrelere izin verecek misiniz?
  • ε herhangi bir yerde tanımlanacak parametresi) izin verecek misiniz?
  • Sonsuz hassasiyete izin verecek misiniz?
  • Sayısal hassasiyete hız ve hassasiyet testi yapacak mısınız?
  • Sonuçları karşılaştırmak için zaten mevcut olan iki (belki daha fazla) kütüphaneyi seçtiniz mi?
  • Durma ölçütlerini nasıl seçeceksiniz, çeşitli yöntemler kullanacak ve kullanıcının kendi seçimini yapmasına veya tanımlamasına izin verecek misiniz?
  • Çeşitli ölçümleri kullanarak hatayı ölçecek ve kullanıcının bunları açıp kapatmasına izin verecek misiniz?
  • Bilgisayar-Cebir Sistemleri (CAS) gibi profesyonel paketlere baktınız ve izin verdikleri tüm seçenekleri anladınız mı?
  • Sonuçların ve / veya karşılaştırmaların ve / veya arsaların gösterilmesine izin verecek misiniz?

Problem önerileri

  • Sorunların kaynağını, sorunların nasıl test edildiğini, sonuçları yakalamayı ve yordamları çalıştırmanın metriklerini tanımlayan bir test özelliği yazmanız gerekir.
  • Kesinlikle kullandıkları problemler için zaten orada bulunan diğer kütüphanelere bakardım (belki test dosyaları).
  • Üniversite kütüphanelerine giderim ve ODE'lerin kitaplarını okurdum ve her türden, kapalı formda ya da yalnızca sayısal çözümde bilinenleri ortaya çıkarırdım.
  • 1. Durum: Kesin ve sayısal sonuçları karşılaştırmak için alabildiğimiz kadar çok kapalı form çözüm sorunu varyasyonunu istiyoruz.
  • 2. Durum: Çalıştığım örnekleri bulup yakalayabildiğim ve bunları çoğaltabildiğim her sayısal analiz kitabına giderdim. Ayrıca problem setlerini, özellikle de çoğu kitapta bulunan bazı patolojileri olanları (buna veya bu tiplere duyarlılığı) yakalayacağım.
  • 3. Durum: Fizik, Ekoloji, Biyoloji, İktisat ve diğerleri gibi uygulamalı matematiğin farklı dallarına giderdim. ve sorunlara yönelik spesifikasyon dilinizin bu tür örneklere izin verdiğini doğrulamak için bu alanların her birinden sorunları yakalayın.
  • 4. Durum: Belirli bir yazarın bazı patolojileri veya garipliği veya sertliği hesaba katmak için belirli bir yaklaşımı değiştirmek zorunda kaldığı en yararlı örnekleri içeren makaleleri / dergileri araştırırdım.
  • Durum 5: Ek örnekler için web’de arama yapın. İçin cesetten , burada referanslara bakın ve test problemleri ortaya çıkarmak için TÜM bunları incelemek. İşte incelemek için bazı MATLAB örnekleri.

Bu benzersiz değil. Dennis ve Schnabel'in "Kısıtsız Optimizasyon ve Doğrusal Olmayan Denklemler için Sayısal Yöntemleri" adlı kitabına bakarsanız, B Testinin "Problemleri" nasıl yaptıklarını görebilirsiniz. Şimdiye kadar gördüğüm en güzel algoritma yazma setlerinden birini geliştirdikten sonra, buna çıldırırsa yapılan bir sorun koleksiyonu attılar. Burada ve orada ince ayar yapmak zorundaydınız! Çözücülerin yeteneklerini zorlayan beş farklı ve patolojik problemi içeriyorlardı. Bu bana birçok nedenden dolayı kullanamayacakları algoritmalarda sorun çıkarmaya devam edebileceğimizi öğretti. Not, bu sorun kümesini More ', Garbow ve Hillstrom'dan da ödünç aldılar (ayrıca bu referansa bakabilirsiniz ve belki bir rehber olarak kullanabileceğiniz başkaları da vardır).

Başka bir deyişle, bu önemsiz bir iş değildir. Her zaman güncellemelerin geçerliliğini test etmenize izin veren ve bazı şeyleri bozmayan Test-Test vakalarına ihtiyacınız var. Yani, düşükten yükseğe, kolaydan zordan, mümkün olandan imkansıza kadar tekrarlanabilir ve kapsamlı bir sorun kümesi ... Ayrıca, çözücülerinizin sınırlarını gerçekten anlayabilmesi için üstesinden gelemediği bir sorun koleksiyonuna ihtiyacınız var.


2

ODE çözücülerime karşı koyduğum bir sağlık kontrolü, sistemin matrisinin üstelini tam olarak hesaplayarak küçük doğrusal sistemler üzerinde kontrol etmektir. yani verilen

dudt=biru

hatayı kontrol et

exp(tbir)u0-u^(t)

u^(t)

Üstelik üsteli zaman adımlarından biriyle hesaplamayın (ör. 6 numaralı şüpheli yöntem: http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf )


Sadece bir not: DE entegratörleri, yanlışlıktan değil, ölçekleme + karelere kıyasla oldukça yetersiz oldukları için "şüpheli" kabul edildi.
JM,

1

PDE'leri çözen kodların uygulanmasını test etmek için kullanılan genel bir metodoloji olan "İmal Edilen Çözümler Yöntemi" ni araştırmayı deneyebilirsiniz (hem matematiksel hem de kodlama hatalarını bulmak için kullanılabilir). Çözüm metodolojiniz yeterince genelse, ODE'leri çözmek için çalışmanın uyarlanabileceğini hayal ediyorum.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.