Verilen 3×3’lük Matrisin Determinantını alan programın Algoritması ve Kodu

Soru: Verilen 3×3’lük Matrisin Determinantını alan programın Algoritmasını ve Kodunu yazınız.

Yanıt: Öncelikle 3×3’lük bir matrisin determinantı nasıl alınır ? Sorusunu yanıtlayalım. Birkaç çeşit yöntem vardır bunun için ve bunlardan birisi Sarrus Yöntemi dediğimiz aşağıdaki resimde anlatılan yöntem.

Yukarıdaki resme ek olarakta T1 – T2 yaparak sonuca ulaşıyoruz.

Diğer yöntem hakkında ise iyi bir görsel bulamadığım için kısa bir izleti atıyorum. Ona da “Standard Method” deniyor.

https://www.khanacademy.org/math/algebra-home/alg-matrices/alg-determinants-and-inverses-of-large-matrices/v/finding-the-determinant-of-a-3×3-matrix-method-2

Bu sorunun çözümünü parça parça anlatmak istiyorum.

print (Türkçesi Bastır demek) isminde void tipinde bir fonksiyon tanımlayıp içine A[][] parametresi geçiyorum. Bizim bu fonksiyondan istediğimiz tek şey A matrisini ekrana basması. Bunun için iç içe for döngüsü tanımlıyorum ve sayaçları(i ve j) 0’dan başlatıp A dizisinin uzunluğuna kadar birer birer arttırıyorum. İlk for satır sayısını, ikinci for sütun sayısını temsil eder. İçine de elemanları yazdır komutunu yazıyorum.

  1. print(A[][])
  2. Ekrana Bastırma döngüsü oluştur (i=0’dan A.length’e kadar birer birer)
  3. Sütun sayısı (j=0’dan A.length’e kadar birer birer)
  4. Yazdır A[i][j]
  5. Döndür

Bu sefer determinant isminde bir fonksiyon oluşturup yine içinde A[][] parametresi tanımlıyoruz. İsminden de anlaşılacağı üzere bu fonksiyon matrisin determinantını hesaplayacak. Hatta biz biraz daha detaylandırıp tek elemanlı, 2×2’lik ve 3×3’lük matrisleri hesaplayabilecek bir algoritma oluşturacağız. sonuc isimli bir değişken tanımlayıp 0 atıyoruz. Bu değişken yine isminden de anlaşılacağı üzere matrisin determinantı hesaplandığında çıkan sonuç bu değişkene atanacak. Eğer matris 1×1’lik yani tek elemanlı ise direk bu elemanı sonuc a atayıp döndürüyoruz. Eğer matris 2×2’lik ise sol üst ve sağ alttaki elemanları çarpıp, geriye kalan elemanların çarpımından çıkarıyoruz ve çıkan sonucu sonuc a atayıp döndürüyoruz.

Şimdi gelelim asıl konuya; Ben soruyu “Standard Method” ile çözeceğim. Bu yöntem de ilk satırın 1. Elemanı * 2×2’lik Determinant – 2.Elamanı * 2×2’lik Determinant + 3.Elemanı * 2×2’lik Determinant işlemini yapıyordum. Java kodunun 34. satırında yazdığım işlem ona denk geliyor. Bu yöntem için 3 tane for döngüsünü iç içe kullanacağız ve bir tane gecici[2][2] isminde bir dizi (geçici bir 2×2 matris) tanımlayacağız. Bu gecicinin içine eleman atayacağız. En son sonucu döndüreceğiz.

  1. determinant(A[][])
  2. sonuc = 0
  3. Eğer A.length == 1
  4. sonuc = A[0][0]
  5. döndür sonuc
  6. Eğer A.length == 2
  7. sonuc = A[0][0] * A[1][1] – A[0][1] * A[1][0]
  8. döndür sonuc
  9. Döngü oluştur (i=0’dan A[0].length’e kadar birer birer)
  10. 2×2’lik geçici matris oluştur (gecici[A.length-1][ A[0].length-1])
  11. j=1’den A.length’e kadar birer birer
  12. k=0’dan A[0].length’e kadar birer birer
  13. Eğer k küçükse i den
  14. gecici[j-1][k] = A[j][k]
  15. Eğer k büyükse i den
  16. gecici[j-1][k-1] = A[j][k]
  17. sonuc += A[0][i] * Math.pow(-1, (int) i) * determinant(gecici);
  18. Döndür sonuc

İsteğimiz yukarıdaki izlediğiniz izletideki sorunun aynısını çözmek. Bu yüzden main (yani ana) fonksiyon içine

|4 -1 1|
|4  5 3|
|-2 0 0|
matrisinin elemanlarını A dizisi içinde tanımladık. Determinant sınıfından d objesi oluşturup yukarıda yazdığımız determinant fonksiyonunu A matrisinin determinantını hesaplaması için çağırdık. Sonra ilk yazdığımız print fonksiyonu ile elemanları ekrana bastırıp, determinantın sonucunu ekrana yazdırdık.

  1. Başla
  2. Matris oluştur (A[][]={{4,-1,1},{4,5,3},{-2,0,0}}
  3. Determinant fonksiyonunu çağır (d.Determinant(A))
  4. Sonuca ata (sonuc=d.Determinant(A))
  5. A Matrisininin Elemanlarını ekrana yazdır (d.print(A))
  6. Yazdır sonuc
  7. Son

(Tüm Akış Diyagramlarını Microsoft Visio 2013 ile yazdım.)

(Java Programlama Dili ile kodunu yazdım.)

Leave a Reply

Your email address will not be published. Required fields are marked *