Archi-Civilarchi-civil.com
Savunabileceğiniz Hesaplar · HES-04  |  Güven: A

Ana Sayfa / Yazılar / Savunabileceğiniz Hesaplar HES-04

Sessizce Yanlış Sonuç Veren Çözücüler

Bu sitenin beş farklı hesap motoru, çözümü olmayan bir problem verildiğinde hata vermek yerine bir sonuç döndürüyordu: 10¹¹ mertebesinde yer değiştirmeler, dengeyi bozan tepkiler. Bu yazı, neden olduğunu, nasıl düzeltildiğini ve düzeltmelerin kendisinin nasıl hata yaptığını anlatıyor.

Güven: A Motor: engine/statics.js Test: tests/v585-engine-audit.test.js Okuma: ~12 dk Son doğrulama: 2026-10-22 English: read in English
Hesap aracını aç → Tüm yazılar →

1. Çökmeyen bir program

Bir hesap programının çökmesi kötüdür; ama çökmeden yanlış bir sayı göstermesi çok daha kötüdür. Çöken program kullanıcıyı durdurur; yanlış sayı gösteren program ise kullanıcıyı yanlış bir karara yürütür. Ekim 2026'daki denetimlerde archi-civil.com'un beş farklı motorunda aynı kalıp bulundu: Çözülemeyen bir problem verildiğinde motor hata vermek yerine bir sonuç döndürüyordu.

2. Beş motor, tek kalıp

FonksiyonBulunduGirdiÇıktıKök neden
dynamics.eigenSolvev584Köşegen olmayan kütle matrisiİlk özdeğer 0,879 (doğrusu 0,649, +%35)Varsayım bir yorum satırındaydı, kodda korunmuyordu
statics.gaussElim (kafes)v585İki kayıcı mesnet + yatay yükMakul görünen çubuk kuvvetleri; ΣFx = 3, ΣFy = −1,17, ΣM = 8,66Tekillik denetimi yoktu
statics.solve3x3v58510⁻⁵ ölçekli iyi koşullu sistem"Tekil matris" — sağlıklı sistem reddedildiMutlak eşik birime bağlıydı
fem2d.solveDensev586Mesnetlenmemiş eleman~10¹⁴ yer değiştirmeEşik 10⁻³⁰⁰: yalnız tam sıfırı yakalıyordu
frame-solver.solveLinearv588Eğik eleman + tek mafsal6,3·10¹¹ yer değiştirme, dengesiz tepkilerMutlak eşik 10⁻¹⁴; eksene paralel durumda yakalanıyordu, eğikte yakalanmıyordu

Beşinin ortak noktası şu: Hiçbiri, gerçekten çözümü olmayan bir girdiyle karşılaştığında bunu fark etmiyordu. Kararsız bir kafesin, mesnetlenmemiş bir sonlu eleman modelinin ya da yalnızca bir mafsalla tutulan bir çerçevenin denge denklemleri tekildir: Bu yapıların çözümü yoktur, çünkü yük altında sonsuz yer değiştirirler. Doğru davranış "bu yapı kararsız" demektir.

3. Neden sıfır, sıfır değildir?

Bir denklem sistemi tekilse, Gauss eliminasyonunda bir pivot sıfır olur. Ama bilgisayar gerçek sayılarla değil, sınırlı hassasiyetli kayan noktalı sayılarla çalışır. Kuramsal olarak sıfır olan bir pivot, hesapta 10⁻⁹ ya da 10⁻¹² gibi küçük bir yuvarlama artığı olarak çıkar. Bu artığa bölmek, dev ama sonlu sayılar üretir: 10¹¹, 10¹⁴. Program çökmez, çünkü teknik olarak sıfıra bölmemiştir.

Çerçeve çözücüsündeki örnek bunu çok net gösteriyor. Aynı mekanizma, eleman eksenlere paralel kurulduğunda yakalanıyordu: Matris terimleri tam sıfır çıkıyor ve pivot da tam sıfır oluyordu. Eleman eğik kurulduğunda ise sinüs ve kosinüs çarpımları yuvarlama artığı üretiyor ve aynı mekanizma sessizce "çözülüyordu". Basit, eksenlere paralel test örnekleri bu hatayı hiçbir zaman göremezdi.

4. Mutlak eşik: iki yönde de yanlış

Üç motor tekilliği mutlak bir sayıyla denetliyordu: pivot 10⁻¹⁴'ten, 10⁻¹²'den ya da 10⁻³⁰⁰'den küçükse tekil. Bu yaklaşım iki yönde birden başarısız olur:

Doğrusu, eşiği matrisin kendi ölçeğine göre göreli tanımlamaktır: pivot, matrisin en büyük teriminin küçük bir kesrinden küçükse tekil. Böylece aynı sistem metre ya da milimetre ile yazılsa da aynı kararı verir. Denetimde bu, 10⁻⁶'dan 10⁶'ya beş ölçekte 200 rastgele sistemle sınandı.

5. Fizik bir kâhindir: denge denetimi

Göreli eşik bile her durumu yakalamayabilir. Bu yüzden kafes ve çerçeve çözücülerine ikinci bir katman eklendi: Çözümden sonra genel denge denetlenir. Doğru bir statik çözüm ΣFx = 0, ΣFy = 0 ve ΣM = 0 koşullarını sağlamak zorundadır. Bu denetim, çözücünün nasıl yazıldığından tamamen bağımsızdır; tekillik denetimi bir durumu kaçırsa bile yakalar. İki kayıcı mesnetli kafes örneğinde eski çözücünün çıktısı üç denge koşulunun üçünü de bozuyordu.

6. Düzeltmeler de hata yapar

Bu denetimlerin en öğretici kısmı, düzeltmelerin kendisinde çıkan hatalardır:

7. Hiç çalışmayan testler

Aynı kalıbın bir de doğrulamanın kendisinde görülen hâli var. Denetimler boyunca her turda "yeni başarısızlık yok" denildi; karşılaştırma, başlangıçta zaten başarısız görünen 49 testlik bir listeye göre yapılıyordu. İnceleme, bunların 45'inin bir kütüphane eksikliği nedeniyle daha ilk satırda çöktüğünü, yani hiç çalışmadığını gösterdi. Eksik kütüphane kurulunca hepsi geçti; ama o ana kadar verilen güvence, o testlerin kapsadığı araçlar için sahteydi. Sessizce yanlış sonuç veren bir çözücü ile sessizce hiçbir şey denetlemeyen bir test aynı sorunun iki yüzüdür.

8. Kurallar

  1. Çözülemeyeni çözmeye çalışma. Tekil bir sistem bir sonuç değil, bir teşhistir: "Yapı kararsız."
  2. Eşikler göreli olmalı. Mutlak bir eşik birime bağlıdır ve iki yönde de yanılır.
  3. Varsayımlar kodda korunmalı. Bir yorum satırındaki varsayım ("M köşegen") hiçbir şeyi engellemez.
  4. Fiziksel bir kâhin ekle. Denge, enerji, simetri: koddan bağımsız gerçekler.
  5. Düzeltmeyi de sına. Rastgele, geniş aralıklı girdilerle yanlış alarm oranını ölç; bilerek yapılan gösterimleri kırma.
  6. Testin çalıştığını doğrula. Başarısız bir testin nedenini bilmeden ona göre "yeni başarısızlık yok" deme.

Kaynaklar

  1. archi-civil.com sürüm notları (README) ve docs/MOTOR-DENETIM-KAYDI.md, v584–v588: her hatanın girdisi, çıktısı, düzeltmesi ve testleri. docs/TEST-ORTAMI.md (v587).
  2. Higham, N. J. (2002). Accuracy and Stability of Numerical Algorithms, 2. baskı, Bölüm 9 (Gauss eliminasyonu, pivotlama). SIAM.
  3. Golub, G. H. ve Van Loan, C. F. (2013). Matrix Computations, 4. baskı, Bölüm 3 ve 5 (koşul sayısı, sayısal rank). Johns Hopkins University Press.

Yazıdaki sayılar sitenin motorlarıyla üretilmiştir; yönetmelik değerleri kaynak madde numarasıyla verilmiştir.

archi-civil.com — Sessizce Yanlış Sonuç Veren Çözücüler · HES-04 ·