Ana Sayfa / MATLAB / Python / Vaka çalışması
Vaka: Bir Patlama Analiz Kodu Neden Yanlıştı?
Gerçek bir MATLAB paketinin (BlastShelterMaster, Archi-Civil) sürümler boyunca denetlenmesinde bulunan hatalar. Amaç kimseyi suçlamak değil: bu hataların hiçbiri kodu çökertmedi (biri hariç) — hepsi makul görünen sayılar üretti. Mühendislik yazılımındaki en tehlikeli hata budur.
Doğrulama durumu her satırda belirtilmiştir. bu sitede yeniden hesaplandı işaretli bulgular bu sayfanın hazırlanması sırasında bağımsız olarak yeniden hesaplanmış ve tutmuştur. inceleme raporunda belgelenmiş işaretliler paketin kendi denetim raporundan aktarılmıştır ve burada ayrıca doğrulanmamıştır.
Kodu hiç çalıştırmamak
(i==1)*u_prev + (i>1)*u(:,i-1) ifadesinde MATLAB iki terimi de hesaplar; i = 1 iken u(:,0) geçersiz indeks hatası verir. Önceki denetimler yalnızca kodu okumuştu. Ders: bir denetim, kod gerçekten çalıştırılmadan yapılmış sayılmaz.
Formülü yanlış aktarmak
Kinney-Graham td paydasında yalnızca son terim karekök içindedir. Eski kodda (Z/0,74)⁶ de içeri alınmıştı. Hata Z ile büyür, bu yüzden tek bir test noktası onu gizleyebilir. → Problem 6
Tek eksenli gerinimde PHEL = HEL·(1+ν)/[3(1−ν)] olmalıdır; kod (1−2ν) kullanıyordu. Doğru biçim, tek eksenli gerinim bağıntısından türetilerek doğrulanabilir; raporun 8,71 / 5,04 GPa oranı ν ≈ 0,16 ile tutarlıdır.
Fiziği eksik bırakmak
Duvar patlamaya dönük olduğu hâlde serbest alan basıncı uygulanıyordu. Rankine-Hugoniot normal yansıma katsayısı, raporun demo değeri Pso = 237,3 kPa için Cr = 3,504 verir — Pr = 831,5 kPa, raporla birebir.
Kalınlık doğrultusundaki analizde lif doğrultusu modülü E₁ kullanılmıştı (Kevlar için ~125 GPa yerine ~6 GPa olmalı). Anizotrop malzemede “hangi E?” sorusu atlanırsa sonuç bir mertebe kayar.
D = max(0, σ/fc − 1)/0,5 ifadesi, gerilme dayanımı aşmadığı sürece hep 0 verir — model fiilen elastik kaldı. Bir büyüklüğün tüm çözüm boyunca sabit kalması, kendi başına bir uyarı işaretidir.
Yanlış problemi çözmek
Duvar kalınlık yönünde bir yay zinciri gibi modellenmiş ve hasar, bu yayın milimetre cinsinden sıkışmasına göre değerlendirilmişti. Sığınak duvarının gerçek göçme modu eğilmedir ve θ ile μ üzerinden değerlendirilir. → Problem 7
Sayısal yöntemin sınırını bilmemek
Açık sonlu fark şeması keskin darbe cephesinde σt/σ0 = 1,211 veriyordu — yansıyan çekme gelen tepeyi aşamayacağı için fiziksel olarak imkânsız. Kesin d’Alembert çözümü 1,000 verir. → Problem 8
Bu hatayı ararken yazılan analitik kontrol (“ince duvarda çekme σ₀·2t/λ ile sönümlenir”) yalnızca ilk yansımayı sayıyordu. Kesin çözüm, koddaki hatayla birlikte denetimdeki hatayı da gösterdi. Doğrulama aracı da doğrulanmalıdır.
Çıkarılan dersler
- Kodu gerçekten çalıştırın. Okuyarak yapılan denetim, çöken bir kodu bile kaçırabilir.
- Fiziksel sınırlarla karşılaştırın. “Yansıyan çekme gelen tepeyi aşamaz”, “bu süre makul mü?” gibi sorular en ucuz ve en güçlü denetimlerdir.
- Kapalı form çözümlere bağlayın. İmpulsif enerji dengesi, yarı-statik DLF = 2, d’Alembert — sayısal çözüm bunlardan birine yakınsamıyorsa hata vardır.
- Birden fazla bağımsız uygulama. Bu bölümdeki üç problem Python, MATLAB (Octave) ve sitenin JavaScript motoruyla ayrı ayrı çözüldü; sonuçlar karakter karakter aynıdır. Bu, aktarım hatalarını yakalar — ama formülün kendisini doğrulamaz.
- Hatayı parametre aralığında arayın. td hatası bir Z değerinde 17 kat, diğerinde 2500 kat. Tek bir test noktası yetmez.
- Denetleyiciyi de denetleyin. Bu vakada analitik kontrolün kendisi de yanlıştı.