İnverse (Ters) Matris çıktıları karmaşık sayı gibi duruyor

Karmaşık sayı değil aslında onlar, gerçek değerli bir matrisin tersi (varsa) yine gerçek değerlidir (mesela reduced row echelon form üzerinden bunu gösterebilirsiniz). Çıktıdaki sayılar bilimsel gösterim ile gösteriliyor; dikkat ederseniz e var hepsinde sonlara doğru, exponent’in yani üssün e’si. En sağ alttaki sayı mesela 3.19744231 x 10⁻¹⁴ sayısına tekabül ediyor (neredeyse 0 evet). En sağ üstteki de 3 x 10⁰ yani direkt 3 aslında. Peki niye direkt 3 yazmıyor da öyle yazıyor? Küsuratlı sayıların bilgisayarlardaki temsili (ya da tamamen temsil edilemeyişi) yüzünden:

>>> 7/3 - 4/3 - 1
2.220446049250313e-16

Yani sizdeki ters matristeki -30 ve -14 üslü iki sayı aslında 0 ama makine onları tam 0 diye temsil edemiyor. Onların çok küsuratlı gösterimleri yüzünden noktadan sonra varsayılan olarak bıraktığı 8 sayıya diğerleri de şeklen uysun diye 6.00000000e+00 yazıyor 6. yazmak yerine.

Hesaplamadaki kusurun önüne geçemeseniz bile gösterimi değiştirebilirsiniz, mesela np.printoptions context manager’ı ile (yani geçici süreliğine, with ile):

with np.printoptions(suppress=True):
    print(np.linalg.inv(matrix))

suppress=True’nun yaptığı:

If True, always print floating point numbers using fixed point notation, in which case numbers equal to zero in the current precision will print as zero.

Bunun sonucunda (matris metin olarak paylaşılmadığı için kopyalanamaz vaziyette) daha “normal” bir çıktı alabilirsiniz.


Tabii bazı diller başka bir tip kullanarak bu küsuratlı sayıların gürültüsünden kurtulabiliyor :ğ

$ raku -e "say 7/3 - 4/3 - 1"
0
$ python -c "print(7/3 - 4/3 - 1)"
2.220446049250313e-16
2 Beğeni