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

Kod ilk zaman adımında çöküyorduinceleme raporunda belgelenmiş
çalışmıyordu

(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

Pozitif faz süresinde karekök yanlış yerdebu sitede yeniden hesaplandı
Z = 4,3’te 197 kat · Z = 10’da ~2500 kat

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

JH-2 seramik modelinde PHEL ifadesibu sitede yeniden hesaplandı
yaklaşık 1,7 kat

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

Yansıma hiç uygulanmamıştıbu sitede yeniden hesaplandı
yük 3,5 kat eksik

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.

Kompozitte yanlış doğrultudaki modülinceleme raporunda belgelenmiş
yaklaşık 20 kat fazla rijitlik

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.

Beton hasar değişkeni her zaman sıfırdıinceleme raporunda belgelenmiş
hasar hiç hesaplanmıyordu

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

Göçme modu yanlış seçilmiştiinceleme raporunda belgelenmiş
standarda dayanmayan eşikler

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

Kabuk kırılmasında sayısal aşımbu sitede yeniden hesaplandı
%21–29 fazla çekme

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

Denetimin kendisi de yanlıştıbu sitede yeniden hesaplandı
ilk-yansıma formülü

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

  1. Kodu gerçekten çalıştırın. Okuyarak yapılan denetim, çöken bir kodu bile kaçırabilir.
  2. 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.
  3. 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.
  4. 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.
  5. Hatayı parametre aralığında arayın. td hatası bir Z değerinde 17 kat, diğerinde 2500 kat. Tek bir test noktası yetmez.
  6. Denetleyiciyi de denetleyin. Bu vakada analitik kontrolün kendisi de yanlıştı.
Problem 6 → ← MATLAB / Python Patlama araçları