Ana Sayfa / MATLAB / Python / Problem 6
Patlama Yükü — Kinney-Graham ve Yansıma
100 kg TNT eşdeğeri, 20 m mesafe. Ölçekli mesafe Z, tepe serbest alan basıncı Pso, pozitif faz süresi td ve normal yansıyan basınç Pr.
Yöntem notu (v298). Bu problem Kinney-Graham formüllerinin doğru aktarılmasını öğretir. Ancak UFC 3-340-02 Şekil 2-7 ile tüm ölçekli mesafe aralığında karşılaştırıldığında Kinney-Graham pozitif faz süresi −%78 ile +%428 arasında sapıyor; süreden türetilen impuls uzak alanda %33–43 düşük kalıyor. Sitenin patlama yükü aracı bu yüzden artık varsayılan olarak UFC eğrilerini kullanır. Bir formülün doğru aktarılması, doğru formül olduğunu göstermez.
Bu kodun bir hikâyesi var. Bir patlama analiz paketinin eski sürümünde td formülünün paydasında karekök yanlış yere konmuştu: yalnızca son terimin √[1+(Z/6,9)²] karekök içinde olması gerekirken, (Z/0,74)⁶ terimi de içeri alınmıştı. Kod çalışıyordu ve sayı üretiyordu — ama bu mesafede 197 kat yanlış. Hata Z büyüdükçe artar. Kod her iki biçimi de hesaplayıp farkı basar.
Neden kimse fark etmemişti? Çünkü hiçbir sonuç bir referansla karşılaştırılmamıştı. 100 kg TNT için 20 m'de iki saniyelik bir basınç darbesi fiziksel olarak saçmadır — ama bunu görmek için sayıya bakıp "bu mantıklı mı?" diye sormak gerekir.
| Büyüklük | Python | MATLAB (Octave) | Site motoru (JS) |
|---|---|---|---|
| Z | 4,3089 | 4,3089 | 4,3089 |
| Pso (kPa) | 38,71 | 38,71 | 38,71 |
| Cr | 2,3105 | 2,3105 | 2,3105 |
| Pr (kPa) | 89,43 | 89,43 | 89,43 |
Üç bağımsız uygulamanın uyuşması formülün doğru aktarıldığını kanıtlar. Formülün kendisinin doğruluğu Kinney & Graham (1985) kaynağına dayanır — bunlar farklı şeylerdir.
PYTHON blast_load.py
# blast_load.py -- Kinney-Graham serbest alan patlama parametreleri + normal yansima
# Kaynak: Kinney & Graham (1985), Explosive Shocks in Air; Rankine-Hugoniot (gamma=1.4)
import math
W = 100.0 # kg TNT esdegeri
R = 20.0 # m, mesafe
P0 = 101.325 # kPa, atmosfer basinci (deniz seviyesi)
Wc = W ** (1/3)
Z = R / Wc # m/kg^(1/3), olcekli mesafe
# Tepe serbest alan asinc basinci
num = 808 * (1 + (Z/4.5)**2)
den = math.sqrt((1+(Z/0.048)**2) * (1+(Z/0.32)**2) * (1+(Z/1.35)**2))
Pso = P0 * num / den # kPa
# Pozitif faz suresi -- DOGRU bicim: YALNIZCA son terim karekok icinde
tn = 980 * (1 + (Z/0.54)**10)
tdn = (1+(Z/0.02)**3) * (1+(Z/0.74)**6) * math.sqrt(1+(Z/6.9)**2)
td = tn / tdn * Wc # ms
# HATALI bicim (eski v2.0 kodu): (Z/0.74)^6 terimi de karekok icine alinmis
tdn_bad = (1+(Z/0.02)**3) * math.sqrt((1+(Z/0.74)**6) * (1+(Z/6.9)**2))
td_bad = tn / tdn_bad * Wc
# Normal yansima (Rankine-Hugoniot, ideal gaz)
Cr = 2 * (7*P0 + 4*Pso) / (7*P0 + Pso)
Pr = Cr * Pso
print(f"Z = {Z:.4f} m/kg^(1/3)")
print(f"Pso = {Pso:.2f} kPa")
print(f"td = {td:.3f} ms (dogru bicim)")
print(f"td_hatali= {td_bad:.3f} ms (eski kod) -> {td_bad/td:.1f} kat hata")
print(f"Cr = {Cr:.4f}")
print(f"Pr = {Pr:.2f} kPa")
✓ Bu kod Python 3 ile gerçekten çalıştırıldı — çıktı yukarıdaki kutudur.
MATLAB blast_load.m
% blast_load.m -- Kinney-Graham serbest alan patlama parametreleri + normal yansima
% Kaynak: Kinney & Graham (1985), Explosive Shocks in Air; Rankine-Hugoniot (gamma=1.4)
W = 100.0; % kg TNT esdegeri
R = 20.0; % m, mesafe
P0 = 101.325; % kPa, atmosfer basinci
Wc = W^(1/3);
Z = R / Wc;
num = 808 * (1 + (Z/4.5)^2);
den = sqrt((1+(Z/0.048)^2) * (1+(Z/0.32)^2) * (1+(Z/1.35)^2));
Pso = P0 * num / den;
% DOGRU bicim: YALNIZCA son terim karekok icinde
tn = 980 * (1 + (Z/0.54)^10);
tdn = (1+(Z/0.02)^3) * (1+(Z/0.74)^6) * sqrt(1+(Z/6.9)^2);
td = tn / tdn * Wc;
% HATALI bicim (eski v2.0 kodu)
tdn_bad = (1+(Z/0.02)^3) * sqrt((1+(Z/0.74)^6) * (1+(Z/6.9)^2));
td_bad = tn / tdn_bad * Wc;
Cr = 2 * (7*P0 + 4*Pso) / (7*P0 + Pso);
Pr = Cr * Pso;
fprintf('Z = %.4f m/kg^(1/3)\n', Z);
fprintf('Pso = %.2f kPa\n', Pso);
fprintf('td = %.3f ms (dogru bicim)\n', td);
fprintf('td_hatali= %.3f ms (eski kod) -> %.1f kat hata\n', td_bad, td_bad/td);
fprintf('Cr = %.4f\n', Cr);
fprintf('Pr = %.2f kPa\n', Pr);
✓ Bu kod GNU Octave 8.4 (MATLAB uyumlu) ile gerçekten çalıştırıldı — çıktı Python ile karakter karakter aynıdır.