Matrisler
51 işlev. Her kaydın ne aldığı, ne verdiği ve çalışan örneği.
Aynı konumdaki hücreleri toplanmış yeni matris.
İki matris hücre hücre toplanır. Sonuç yeni matristir; girdiler değişmez.
a = matrixNew(2, 2, 1) b = matrixNew(2, 2, 2) s = matrixAdd(a, b) plot(matrixGet(s, 0, 0))
1+2 = 3 (her hücre).
Değer döndürmez (na); matrisi yerinde bir sütun büyütür.
Diziyi verilen konuma sütun olarak sokar ve sütun sayısını artırır. Matris boşsa (0 satır) eklenen sütunun uzunluğu satır sayısını belirler.
m = matrixNew(2, 1, 1) matrixAddCol(m, 1, arrayFrom(7, 8)) plot(matrixGet(m, 0, 1))
Sona eklenen sütunun ilk hücresi 7.
Değer döndürmez (na); matrisi yerinde bir satır büyütür.
Diziyi verilen konuma satır olarak sokar ve satır sayısını artırır. Matris boşsa (0 sütun) ilk eklenen satırın uzunluğu sütun sayısını belirler.
m = matrixNew(1, 2, 1) matrixAddRow(m, 1, arrayFrom(7, 8)) plot(matrixGet(m, 1, 0))
Sona eklenen satırın ilk hücresi 7.
Bütün hücrelerin aritmetik ortalaması; matris boşsa ya da matris değilse na.
Toplamı hücre sayısına böler. Boş matriste na döner (0 değil); sonucu na() ile koru.
m = matrixNew(2, 2, 4) plot(matrixAvg(m))
Tüm hücreler 4 → ortalama 4.
j. sütunun değerlerini taşıyan dizi; indeks sınır dışıysa boş dizi.
Sütunu yukarıdan aşağıya dizi olarak toplar. Dönen dizi kopyadır; matrisi etkilemez.
m = matrixNew(3, 2, 5) c = matrixCol(m, 1) plot(arraySize(c))
1. sütun 3 elemanlı.
Sütunlar üzerinde döngü sınırı için kullanılır. matrixColumns aynı işi yapan ikinci addır.
m = matrixNew(3, 2, 0) plot(matrixCols(m))
2 sütun.
matrixCols ile birebir aynı sonucu verir — okunurluk için sağlanan ikinci addır.
m = matrixNew(3, 4, 0) plot(matrixColumns(m))
4 sütun.
m1'in satırlarının altına m2'nin satırları eklenmiş yeni matris.
Dikey birleştirme yapar (satırları alt alta ekler). Sonuç yeni matristir; girdiler değişmez.
a = matrixNew(1, 2, 1) b = matrixNew(2, 2, 2) c = matrixConcat(a, b) plot(matrixRows(c))
1 satır + 2 satır → 3 satır.
Kaynağın bağımsız (derin) bir kopyası; matris değilse boş 0×0 matris.
Kopya asıldan tümüyle ayrıdır; birini değiştirmek diğerini etkilemez. Bir matrisi bozmadan üzerinde denemek için kullanılır.
m = matrixNew(2, 2, 1) c = matrixCopy(m) matrixSet(c, 0, 0, 9) plot(matrixGet(m, 0, 0))
Kopya değişse de asıl [0,0] hâlâ 1.
Matrisin determinantı (tek sayı); kare değilse ya da matris değilse na. Tekil (tersi olmayan) matriste 0 döner.
Kısmi pivotlu eleme ile hesaplanır. Determinantın 0 olması matrisin tersinin olmadığını (satır/sütunların bağımlı olduğunu) gösterir.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 2) matrixSet(m, 1, 1, 3) plot(matrixDet(m))
Köşegen 2,3 → determinant 6.
m1'den m2'nin çıkarıldığı yeni matris.
İkinci argüman matris ise hücre hücre çıkarma yapılır; tek sayı ise o sayı bütün hücrelerden çıkarılır. Sonuç yeni matristir.
a = matrixNew(2, 2, 5) b = matrixNew(2, 2, 2) d = matrixDiff(a, b) plot(matrixGet(d, 0, 0))
5-2 = 3 (her hücre).
Öz-değerleri büyükten küçüğe sıralı taşıyan dizi; kare değilse ya da boşsa boş dizi.
Simetrik matrisler için Jacobi yöntemiyle hesaplanır. Öz-değerler matrisin köşegen değerlerini (temel eksenlerdeki büyüklüğü) verir.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 2) matrixSet(m, 1, 1, 3) ev = matrixEigenvalues(m) plot(arrayGet(ev, 0))
Köşegen 2,3 → en büyük öz-değer 3.
Sütunları öz-vektörler olan yeni matris; kare değilse ya da boşsa boş matris.
Simetrik matrisler için Jacobi yöntemiyle hesaplanır; sonuç matrisinin her sütunu bir öz-vektördür ve matrixEigenvalues sırasıyla eşleşir.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 2) matrixSet(m, 1, 1, 3) v = matrixEigenvectors(m) plot(matrixRows(v))
2×2 simetrik → öz-vektör matrisi 2 satırlı.
Toplam hücre sayısı (satır × sütun); matris değilse 0.
İstatistik fonksiyonlarına (matrixAvg, matrixMedian) girmeden önce matrisin dolu olup olmadığını denetlemek için kullanışlıdır.
m = matrixNew(2, 3, 0) plot(matrixElementsCount(m))
2×3 = 6 hücre.
Değer döndürmez (na); matrisin bütün hücrelerini yerinde değere eşitler.
Boyutu değiştirmez, yalnız içeriği tek değerle ezer. Bir matrisi yeniden kullanmadan önce sıfırlamanın hızlı yoludur.
m = matrixNew(2, 2, 0) matrixFill(m, 3) plot(matrixSum(m))
Dört hücre 3 → toplam 12.
i. satır, j. sütundaki hücre değeri; indeks sınır dışıysa na döner (hata vermez).
Satır ve sütun 0'dan başlar. Sınır dışı indekste çökmez, na verir; sonucu na() ile kontrol edebilirsin.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 1, 9) plot(matrixGet(m, 0, 1))
0. satır 1. sütuna yazılan 9 okunur.
Matrisin tersi (yeni matris); kare değilse ya da tekil (tersi yok) ise na.
Gauss-Jordan eleme ile hesaplanır. Tersle çarpım birim matrisi verir. Determinantı 0 olan matrisin tersi yoktur; bu durumda na döner.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 4) matrixSet(m, 1, 1, 4) inv = matrixInv(m) plot(matrixGet(inv, 0, 0))
Köşegen 4 → ters köşegen 0.25.
Kare ve karşı köşegen (i+j = n-1) dışındaki bütün hücreleri 0 ise true; aksi hâlde false.
Karşı köşegen sağ-üstten sol-alta uzanan köşegendir; bu denetim yalnız o köşegenin dolu olabileceğini doğrular.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 1, 3) matrixSet(m, 1, 0, 4) plot(matrixIsAntidiagonal(m) ? 1 : 0)
Yalnız karşı köşegen dolu → 1 (evet).
Kare ve her hücre karşısının negatifine eşitse (m[i][j] = -m[j][i]) true; aksi hâlde false.
Ters-simetrik matriste köşegen zorunlu olarak 0'dır (çünkü m[i][i] = -m[i][i] ancak 0 için geçerlidir).
m = matrixNew(2, 2, 0) matrixSet(m, 0, 1, 3) matrixSet(m, 1, 0, -3) plot(matrixIsAntisymmetric(m) ? 1 : 0)
Köşegen 0, karşılıklar zıt işaretli → 1.
Bütün hücreler yalnız 0 ya da 1 ise true, aksi hâlde false.
Bağlantı/komşuluk matrisi gibi 0-1 içermesi gereken yapıları doğrulamak için kullanılır.
m = matrixNew(2, 2, 1) plot(matrixIsBinary(m) ? 1 : 0)
Tüm hücreler 1 → 1 (evet).
Kare ve köşegen dışındaki bütün hücreleri 0 ise true; aksi hâlde false.
Köşegen değerleri herhangi bir sayı olabilir; koşul yalnız köşegen dışının 0 olmasıdır.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 5) matrixSet(m, 1, 1, 7) plot(matrixIsDiagonal(m) ? 1 : 0)
Yalnız köşegen dolu → 1 (evet).
Kare, köşegeni 1 ve köşegen dışı hücreleri 0 ise true; aksi hâlde false.
Birim matris çarpımda etkisiz elemandır (m × birim = m). Bu denetim bir matrisin birim olup olmadığını söyler.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 1) matrixSet(m, 1, 1, 1) plot(matrixIsIdentity(m) ? 1 : 0)
Köşegen 1, gerisi 0 → 1 (evet).
Satır sayısı sütun sayısına eşitse true, değilse false.
Kare-gerektiren fonksiyonlardan (determinant, ters, kuvvet, iz) önce güvenlik denetimi olarak kullanılır.
m = matrixNew(3, 3, 0) plot(matrixIsSquare(m) ? 1 : 0)
3×3 kare → 1 (evet).
Her satırın toplamı 1 ise (küçük yuvarlama payıyla) true; aksi hâlde false.
Satır-stokastik denetimidir; kare olma şartı yoktur, yalnız satır toplamları 1 olmalıdır. Geçiş (Markov) matrislerini doğrulamak için kullanılır.
m = matrixNew(2, 2, 0.5) plot(matrixIsStochastic(m) ? 1 : 0)
Her satır 0.5+0.5 = 1 → 1 (evet).
Kare ve devriğine eşitse (m[i][j] = m[j][i]) true; aksi hâlde false.
Simetrik matris köşegene göre aynadır. Kovaryans ve korelasyon matrisleri simetriktir; öz-değer fonksiyonları bu tür matrisler için tasarlanmıştır.
m = matrixNew(2, 2, 5) plot(matrixIsSymmetric(m) ? 1 : 0)
Tüm hücreler eşit → simetrik → 1.
Kare ve alt-üçgen ya da üst-üçgen ise true (köşegenin bir yanı tümüyle 0); aksi hâlde false.
Üst-üçgende köşegenin altı, alt-üçgende üstü sıfırdır. İkisinden biri sağlanırsa üçgen kabul edilir.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 1) matrixSet(m, 0, 1, 2) matrixSet(m, 1, 1, 3) plot(matrixIsTriangular(m) ? 1 : 0)
Köşegen altı 0 → üst-üçgen → 1.
Bütün hücreler 0 ise true, biri bile sıfırdan farklıysa false.
Bir hesabın matrise değer yazıp yazmadığını denetlemek için kullanılabilir.
m = matrixNew(2, 2, 0) plot(matrixIsZero(m) ? 1 : 0)
Tüm hücreler 0 → 1 (evet).
İki matrisin Kronecker çarpımı; boyutu (m1.satır×m2.satır) × (m1.sütun×m2.sütun) olan yeni matris.
m1'in her hücresi m2'nin tümüyle çarpılıp blok blok yerleştirilir. Sonuç ikisinin boyutlarının çarpımı kadar büyür.
a = matrixNew(2, 2, 1) b = matrixNew(2, 2, 1) k = matrixKron(a, b) plot(matrixRows(k))
2×2 ⊗ 2×2 → 4×4, satır sayısı 4.
Bütün hücreler içindeki en büyük değer; matris boşsa ya da matris değilse na.
Satır/sütun ayrımı yapmadan tüm hücreleri karşılaştırır.
m = matrixNew(2, 2, 0) matrixSet(m, 1, 1, 8) plot(matrixMax(m))
Hücrelerden biri 8 → en büyük 8.
Bütün hücrelerin ortanca (medyan) değeri; hücre sayısı çiftse ortadaki iki değerin ortalaması. Boşsa na.
Tüm hücreler sıralanır, ortadaki değer alınır. Ortanca, aykırı değerlerden ortalamaya göre daha az etkilenir.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 1) matrixSet(m, 0, 1, 2) matrixSet(m, 1, 0, 3) matrixSet(m, 1, 1, 4) plot(matrixMedian(m))
1,2,3,4 → ortadaki ikisinin ortalaması 2.5.
Bütün hücreler içindeki en küçük değer; matris boşsa ya da matris değilse na.
Satır/sütun ayrımı yapmadan tüm hücreleri karşılaştırır.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, -5) plot(matrixMin(m))
Hücrelerden biri -5 → en küçük -5.
En sık yinelenen hücre değeri; birden fazla değer aynı sıklıktaysa en küçüğü. Boşsa na.
Aynı sıklıkta birden çok değer varsa en küçük değer seçilir (kararlı, deterministik sonuç).
m = matrixNew(2, 2, 1) matrixSet(m, 0, 0, 5) plot(matrixMode(m))
Üç adet 1, bir adet 5 → tepe değer 1.
a×b matris çarpımı; boyutu a.satır × b.sütun olan yeni matris.
Gerçek matris çarpımıdır (hücre hücre değil): sonuç[i][j] = a'nın i. satırı ile b'nin j. sütununun nokta çarpımı.
a = matrixNew(2, 2, 0) matrixSet(a, 0, 0, 1) matrixSet(a, 1, 1, 1) b = matrixNew(2, 2, 5) p = matrixMult(a, b) plot(matrixGet(p, 0, 0))
Birim matris × b = b → [0,0] = 5.
matrixNew(satır, sütun, başlangıç?)
satır×sütun boyutunda, tüm hücreleri başlangıç değerine eşit yeni bir matris.
Matris satır ve sütunlardan oluşan iki boyutlu sayı ızgarasıdır; diğer tüm matrix fonksiyonları bununla üretilen nesneyi bekler.
m = matrixNew(2, 3, 0) plot(matrixElementsCount(m))
2×3 = 6 hücreli boş matris.
m = matrixNew(2, 2, 5) plot(matrixSum(m))
Dört hücre de 5 → toplam 20.
Matrisin sözde-tersi (Moore-Penrose sol-ters); (mᵀm) tersi alınamıyorsa na.
(mᵀm)⁻¹mᵀ ile hesaplanır; kare olmayan ya da tam-tersi olmayan matrislerde en-küçük-kareler çözümü verir. Kare ve tersi olan matriste sonuç normal tersle aynıdır.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 2) matrixSet(m, 1, 1, 4) p = matrixPinv(m) plot(matrixGet(p, 0, 0))
Köşegen 2 → sözde-ters köşegen 0.5.
Matrisin n. kuvveti (matris×matris çarpımı n kez); yeni matris.
Matrisi kendisiyle n kez çarpar (sıradan sayı üssü değil). n=0'da birim matris, n=1'de matrisin kendisi döner.
m = matrixNew(2, 2, 0) matrixSet(m, 0, 0, 2) matrixSet(m, 1, 1, 3) p = matrixPow(m, 2) plot(matrixGet(p, 0, 0))
Köşegen 2 → kare 4.
Matrisin rankı (bağımsız satır/sütun sayısı); matris değilse 0.
Eleme ile hesaplanır. Rank, satır ya da sütun sayısından küçükse matriste bağımlılık (fazlalık) vardır ve tersi yoktur.
m = matrixNew(2, 2, 5) plot(matrixRank(m))
Bütün satırlar aynı → rank 1.
Çıkarılan sütunun değerlerini taşıyan dizi; indeks sınır dışıysa boş dizi.
Sütunu matristen siler (sütun sayısı bir azalır) ve o sütunu dizi olarak döndürür. Yerinde değiştirir.
m = matrixNew(2, 3, 0) matrixSet(m, 0, 1, 5) c = matrixRemoveCol(m, 1) plot(arrayGet(c, 0))
Çıkarılan 1. sütunun ilk değeri 5.
Çıkarılan satırın değerlerini taşıyan dizi; indeks sınır dışıysa boş dizi.
Satırı matristen siler (satır sayısı bir azalır) ve o satırı dizi olarak döndürür. Yerinde değiştirir.
m = matrixNew(3, 2, 0) matrixSet(m, 1, 0, 9) r = matrixRemoveRow(m, 1) plot(arrayGet(r, 0))
Çıkarılan 1. satırın ilk değeri 9.
matrixReshape(m, satır, sütun)
Aynı hücreleri yeni satır×sütun düzenine yerleştiren yeni matris.
Hücreler satır-öncelikli okunup yeni biçime doldurulur. Yeni boyut daha büyükse eksik hücreler 0 olur; daha küçükse fazla hücreler atılır. Kaynağı değiştirmez.
m = matrixNew(2, 3, 4) r = matrixReshape(m, 3, 2) plot(matrixRows(r))
2×3 (6 hücre) → 3×2, satır sayısı 3.
Değer döndürmez (na); satır ve sütun sırasını yerinde tersine çevirir.
Hem satırların hem de her satır içindeki hücrelerin sırasını ters çevirir; ilk hücre ile son hücre yer değiştirir (180° dönme etkisi). Yerinde değiştirir.
m = matrixNew(1, 3, 0) matrixSet(m, 0, 0, 1) matrixSet(m, 0, 2, 3) matrixReverse(m) plot(matrixGet(m, 0, 0))
[1,0,3] → ters [3,0,1], ilk hücre 3.
i. satırın bir kopyasını taşıyan dizi; indeks sınır dışıysa boş dizi.
Dönen dizi bir kopyadır; onu değiştirmek asıl matrisi etkilemez. Boş sonuç arraySize ile 0 döner.
m = matrixNew(2, 3, 4) r = matrixRow(m, 0) plot(arraySum(r))
0. satır [4,4,4] → toplam 12.
Satırlar üzerinde döngü kurmadan önce sınırı bilmek için kullanılır. Sütun sayısı için matrixCols.
m = matrixNew(3, 2, 0) plot(matrixRows(m))
3 satır.
matrixSet(matris, i, j, değer)
Değer döndürmez (na); matrisi yerinde değiştirir.
Var olan bir hücreyi günceller; matrisi büyütmez. İndeks sınır dışıysa sessizce hiçbir şey yapmaz. Yeni satır/sütun eklemek için matrixAddRow/matrixAddCol kullan.
m = matrixNew(2, 2, 0) matrixSet(m, 1, 1, 7) plot(matrixGet(m, 1, 1))
Sağ alt hücre 7 yapılır.
Değer döndürmez (na); matrisin satırlarını yerinde sıralar.
Satırlar, seçilen sütundaki değere göre bütün olarak yeniden dizilir (her satır kendi içinde bozulmaz). Sütun indeksi geçersizse hiçbir şey yapmaz.
m = matrixNew(2, 1, 0) matrixSet(m, 0, 0, 5) matrixSet(m, 1, 0, 1) matrixSort(m, 0, true) plot(matrixGet(m, 0, 0))
Artan sıralama → en küçük (1) başa gelir.
matrixSubmatrix(m, r1, r2, c1, c2)
[r1, r2) satırları ve [c1, c2) sütunlarından oluşan yeni matris.
Bitiş indeksleri hariçtir (r2 ve c2 dahil değildir). Kaynağı değiştirmez; kesilen bölgenin kopyasını verir.
m = matrixNew(3, 3, 0) matrixSet(m, 1, 1, 5) s = matrixSubmatrix(m, 1, 2, 1, 2) plot(matrixGet(s, 0, 0))
Ortadaki tek hücre (5) alınır.
Satır ve sütun ayrımı yapmadan tüm değerleri toplar. Boş matriste 0 verir.
m = matrixNew(2, 2, 2.5) plot(matrixSum(m))
Dört hücre 2.5 → toplam 10.
Değer döndürmez (na); i. ve j. sütunları yerinde yer değiştirir.
İki sütunu bütün olarak takas eder. İndekslerden biri sınır dışıysa hiçbir şey yapmaz.
m = matrixNew(1, 2, 0) matrixSet(m, 0, 0, 1) matrixSet(m, 0, 1, 2) matrixSwapColumns(m, 0, 1) plot(matrixGet(m, 0, 0))
Sütunlar takas → [0,0] artık 2.
Değer döndürmez (na); i. ve j. satırları yerinde yer değiştirir.
İki satırı bütün olarak takas eder. İndekslerden biri sınır dışıysa hiçbir şey yapmaz.
m = matrixNew(2, 1, 0) matrixSet(m, 0, 0, 1) matrixSet(m, 1, 0, 2) matrixSwapRows(m, 0, 1) plot(matrixGet(m, 0, 0))
Satırlar takas → [0,0] artık 2.
Ana köşegen (i==j) hücrelerinin toplamı; matris değilse 0.
Kare olmayan matriste kısa kenar kadar köşegeni toplar. İz, matrisin köşegen enerjisini tek sayıya indirir.
m = matrixNew(3, 3, 0) matrixSet(m, 0, 0, 1) matrixSet(m, 1, 1, 2) matrixSet(m, 2, 2, 3) plot(matrixTrace(m))
Köşegen 1+2+3 = 6.
Satır ve sütunları yer değiştirmiş yeni matris (sütun×satır boyutunda).
Kaynağı değiştirmez, yeni matris döner. i. satır j. sütun, çıktıda j. satır i. sütun olur.
m = matrixNew(2, 3, 0) t = matrixTranspose(m) plot(matrixRows(t))
2×3 → devrik 3×2, satır sayısı 3.