Pengolahan Matriks (manual)
Pengolahan Matriks dan Vektor¶
Pada tulisan berikut, akan diberikan contoh algoritma dan program untuk mengolah matriks dan vektor tanpa menggunakan library atau fungsi yang sudah tersedia.
Transpose Matriks¶
Misalkan matriks $A=\begin{bmatrix}a_{1,1}&a_{1,2}&\cdots&a_{1,n} \\a_{2,1}&a_{2,2}&\cdots&a_{2,n} \\\vdots&\ddots&\ddots&\vdots \\a_{m,1}&a_{m,2}&\cdots&a_{m,n}\end{bmatrix}$
Transpose dari matriks $A$ adalah $A^T=\begin{bmatrix}a_{1,1}&a_{2,1}&\cdots&a_{m,1}
\\a_{1,2}&a_{2,2}&\cdots&a_{m,2}
\\\vdots&\ddots&\ddots&\vdots
\\a_{1,n}&b_{2,n}&\cdots&a_{n,m}\end{bmatrix}$,
atau $B=\begin{bmatrix}b_{1,1}&b_{1,2}&\cdots&b_{1,m}
\\b_{2,1}&b_{2,2}&\cdots&b_{2,m}
\\\vdots&\ddots&\ddots&\vdots
\\b_{n,1}&b_{n,2}&\cdots&b_{n,m}\end{bmatrix}$
, untuk setiap $i\in\{1,2,...,m\}$ dan $j\in\{1,2,...,n\}$ berlaku $b_{j,i}=a_{i,j}$
Algoritma Membuat Matriks Transpose
- Deskripsi : Membuat Matriks Transpose
- Masukkan : masukkan ukuran matriks (m,n), atau masukkan matriksnya
- Keluaran : transpose dari matriks yang diberikan
- Langkah-langkah :
- masukkan ukuran matriks (m,n)
- masukkan elemen-elemen matriks A, atau buat secara random
- buat matriks B dengan ukuran (n,m), berikan elemen matriksnya 0, hanya untuk sementara
- Untuk setiap i pada {1,2,3,...,m}
- untuk setiap j pada {1,2,3,...,n} *b[j][i]=a[i][j]
- Keluarkan hasil
- print("Transpose dari matriks A adalah",B)
index perlu disesuaikan apabila program menggunakan python, karena index python mulai dari 0
import numpy as np
import random
print("Program mencari nilai mutlak terbesar dari elemen matriks beserta indexnya")
print("Masukkan ukuran baris matriks A, m=") ; m=int(input())
print("Masukkan ukuran kolom matriks A, n=") ; n=int(input())
random.seed(10)
A = np.array([[random.randrange(-100, 100, 1) for j in range(n)] for i in range(m)])
print("Matriks A=") ; print(A)
B = np.array([[0 for i in range(m)] for j in range(n)])
for i in range(m):
for j in range(n):
B[j][i]=A[i][j]
print("Transpose dari matriks A =") ; print(B)
Program mencari nilai mutlak terbesar dari elemen matriks beserta indexnya Masukkan ukuran baris matriks A, m= 4 Masukkan ukuran kolom matriks A, n= 6 Matriks A= [[ 46 -92 9 23 47 -97] [-48 18 25 -29 67 -59] [-92 33 25 -17 -81 -37] [ 90 -8 -89 7 -65 54]] Transpose dari matriks A = [[ 46 -48 -92 90] [-92 18 33 -8] [ 9 25 25 -89] [ 23 -29 -17 7] [ 47 67 -81 -65] [-97 -59 -37 54]]
Perkalian Matriks/Vektor¶
Misalkan matriks $A=\begin{bmatrix}a_{1,1}&a_{1,2}&\cdots&a_{1,n} \\a_{2,1}&a_{2,2}&\cdots&a_{2,n} \\\vdots&\ddots&\ddots&\vdots \\a_{m,1}&a_{m,2}&\cdots&a_{m,n}\end{bmatrix}$
Misalkan matriks $B=\begin{bmatrix}b_{1,1}&a_{1,2}&\cdots&a_{1,r} \\a_{2,1}&a_{2,2}&\cdots&a_{2,r} \\\vdots&\ddots&\ddots&\vdots \\a_{n,1}&a_{n,2}&\cdots&a_{n,r}\end{bmatrix}$
Perkalian matriks $\displaystyle A_{m\times n}\times B_{n\times r}=\begin{bmatrix}\sum_{j=1}^n a_{1,j}b_{j,1}&\sum_{j=1}^n a_{1,j}b_{j,2}&\cdots&\sum_{j=1}^n a_{1,j}b_{j,r} \\\sum_{j=1}^n a_{2,j}b_{j,1}&\sum_{j=1}^n a_{2,j}b_{j,2}&\cdots&\sum_{j=1}^n a_{2,j}b_{j,r} \\\vdots&\ddots&\ddots&\vdots \\\sum_{j=1}^n a_{m,j}b_{j,1}&\sum_{j=1}^n a_{m,j}b_{j,2}&\cdots&\sum_{j=1}^n a_{m,j}b_{j,r}\end{bmatrix}$
Algoritma Perkalian Matriks
- Deskripsi : Perkalian 2 buah Matriks
- Masukkan :
- masukkan ukuran matriks A (m,n), atau masukkan matriksnya
- masukkan ukuran matriks B (p,q), atau masukkan matriksnya
- Keluaran : hasil kali matriks A*B, (jika bisa dikalikan)
- Langkah-langkah :
- masukkan ukuran matriks A (m,n)
- masukkan elemen-elemen matriks A, atau buat secara random
- masukkan ukuran matriks B (p,q)
- masukkan elemen-elemen matriks B, atau buat secara random
- jika n=p
- Buat matriks penyimpanan C berukuran (m,r)
- untuk setiap i pada {1,2,...,m}
- untuk setiap j pada {1,2,...,r}
- sum=0 #variabel tempat penyimpanan jumlah
- untuk setiap k pada {1,2,...,j}
- sum=sum+A[i][k]*B[k][j]
- untuk setiap j pada {1,2,...,r}
- keluarkan hasilnya
- jika tidak/else (otomatis n tidak sama dengan p)
- beri keterangan bahwa matriks A dan B tidak bisa dikalikan
index perlu disesuaikan apabila program menggunakan python, karena index python mulai dari 0
import numpy as np
import random
random.seed(10)
print("Program mengalikan matriks A dan B")
print("Masukkan ukuran baris matriks A, m=") ; m=int(input())
print("Masukkan ukuran kolom matriks A, n=") ; n=int(input())
A = np.array([[random.randrange(-100, 100, 1) for j in range(n)] for i in range(m)])
print("Matriks A=") ; print(A)
print("Masukkan ukuran baris matriks B, p=") ; p=int(input())
print("Masukkan ukuran kolom matriks B, q=") ; q=int(input())
B = np.array([[random.randrange(-100, 100, 1) for j in range(q)] for i in range(p)])
print("Matriks B=") ; print(B)
if n==p:
C=np.array([[0 for j in range(q)] for i in range(m)])
for i in range(m):
for j in range(q):
sum=0
for k in range(n):
sum=sum+A[i][k]*B[k][j]
C[i][j]=sum
print("Hasil kali, A*B=C=")
print(C)
else:
print("A tidak bisa dikalikan dengan B, karena ukuran kolom A tidak sama dengan ukuran baris B")
Program mengalikan matriks A dan B Masukkan ukuran baris matriks A, m= 2 Masukkan ukuran kolom matriks A, n= 3 Matriks A= [[ 46 -92 9] [ 23 47 -97]] Masukkan ukuran baris matriks B, p= 3 Masukkan ukuran kolom matriks B, q= 4 Matriks B= [[-48 18 25 -29] [ 67 -59 -92 33] [ 25 -17 -81 -37]] Hasil kali, A*B=C= [[-8147 6103 8885 -4703] [ -380 -710 4108 4473]]
Elemen Terbesar Matriks¶
Misalkan matriks $A=\begin{bmatrix}a_{1,1}&a_{1,2}&\cdots&a_{1,n} \\a_{2,1}&a_{2,2}&\cdots&a_{2,n} \\\vdots&\ddots&\ddots&\vdots \\a_{m,1}&a_{m,2}&\cdots&a_{m,n}\end{bmatrix}$
Carilah nilai mutlak terbesar dari elemen matriks tersebut!
Algoritma mencari nilai mutlak terbesar dari elemen matriks beserta indexnya
- Deskripsi : Algoritma mencari nilai mutlak terbesar dari elemen matriks
- Masukkan : masukkan ukuran matriks (m,n), atau masukkan matriksnya
- Keluaran : nilai mutlak terbesar dari elemen matriks
- Langkah-langkah :
- masukkan ukuran matriks (m,n)
- masukkan elemen-elemen matriks, atau buat secara random
- baris=1
- kolom=1
- Misalkan max=a[baris][kolom]
- Untuk setiap i pada {1,2,3,...,m}
- untuk setiap j pada {1,2,3,...,n}
- jika abs(a[i][j])>max
- max=abs(a[i][j])
- baris=i
- kolom=j
- Keluarkan hasil
- print("Nilai mutlak terbesar dari elemen matriks A adalah A[",baris,",kolom,"]=",max)
index perlu disesuaikan apabila program menggunakan python, karena index python mulai dari 0
def cari_max(inputmatriks):
baris=0
kolom=0
max=inputmatriks[baris][kolom]
for i in range(m):
for j in range(n):
if abs(inputmatriks[i][j])>max:
baris=i
kolom=j
max=abs(inputmatriks[baris][kolom])
return max,baris,kolom
import numpy as np
import random
print("Program mencari nilai mutlak terbesar dari elemen matriks beserta indexnya")
print("Masukkan ukuran baris matriks A, m=") ; m=int(input())
print("Masukkan ukuran kolom matriks A, n=") ; n=int(input())
random.seed(10)
A = np.array([[random.randrange(-100, 100, 1) for j in range(n)] for i in range(m)])
print("Matriks A=") ; print(A)
x=cari_max(A)
print("Nilai mutlak terbesar dari elemen matriks A adalah |A[",x[1]+1,",",x[2]+1,"]|=",x[0])
Program mencari nilai mutlak terbesar dari elemen matriks beserta indexnya Masukkan ukuran baris matriks A, m= 3 Masukkan ukuran kolom matriks A, n= 5 Matriks A= [[ 46 -92 9 23 47] [-97 -48 18 25 -29] [ 67 -59 -92 33 25]] Nilai mutlak terbesar dari elemen matriks A adalah |A[ 2 , 1 ]|= 97
Mengubah Matriks Menjadi Vektor¶
Misalkan matriks $A=\begin{bmatrix}a_{1,1}&a_{1,2}&\cdots&a_{1,n} \\a_{2,1}&a_{2,2}&\cdots&a_{2,n} \\\vdots&\ddots&\ddots&\vdots \\a_{m,1}&a_{m,2}&\cdots&a_{m,n}\end{bmatrix}$
Misalkan $A^j$ merupakan vektor-vektor kolom dari $A$, dengan $j\in\{1,2,...,n\}$
Vektor hasil transformasinya adalah $u=\begin{bmatrix}A^1\\A^2\\\vdots\\A^n\end{bmatrix}$ atau $u=\begin{bmatrix}a_{1,1}\\a_{1,2}\\\vdots\\a_{1,n} \\a_{2,1}\\a_{2,2}\\\vdots\\a_{2,n} \\\vdots \\a_{m,1}\\a_{m,2}\\\vdots\\a_{m,n}\end{bmatrix}$
import numpy as np
import random
random.seed(10)
print("Program Transformasi Matriks menjadi Vektor")
print("Masukkan ukuran baris matriks A, m=") ; m=int(input())
print("Masukkan ukuran kolom matriks A, n=") ; n=int(input())
A = np.array([[random.randrange(-100, 100, 1) for j in range(n)] for i in range(m)])
print("Matriks A=") ; print(A)
u=np.array([0 for i in range(m*n)])
for j in range(n):
for i in range(m):
u[j*i+i]=A[i][j]
print("Vektor u=",u)
print("Keterangan : tampilan vektor pada python selalu ditulis menyamping")
print("Jika ingin dituliskan ke bawah, maka buat vektor u sebagai matriks berukuran (m*n,1)")
u=np.array([[0] for i in range(m*n)])
for j in range(n):
for i in range(m):
u[j*i+i,0]=A[i][j]
print("Vektor u=") ; print(u)
Program Transformasi Matriks menjadi Vektor Masukkan ukuran baris matriks A, m= 2 Masukkan ukuran kolom matriks A, n= 3 Matriks A= [[ 46 -92 9] [ 23 47 -97]] Vektor u= [ 9 23 47 -97 0 0] Keterangan, tampilan vektor pada python selalu ditulis menyamping Jika ingin dituliskan ke bawah, maka buat vektor u sebagai matriks berukuran (m*n,1) Vektor u= [[ 9] [ 23] [ 47] [-97] [ 0] [ 0]]
Membuat Submatriks $\frac{1}{4}$ Matriks Semula¶
Misalkan matriks $A=\begin{bmatrix}a_{1,1}&a_{1,2}&a_{1,3}&a_{1,4}&\cdots&a_{1,n-1}&a_{1,n} \\a_{2,1}&a_{2,2}&a_{2,3}&a_{2,4}&\cdots&a_{2,n-1}&a_{2,n} \\\vdots&\vdots&\vdots&\vdots&\ddots&\vdots&\vdots \\a_{m-1,1}&a_{m-1,2}&a_{m-1,3}&a_{m-1,4}&\cdots&a_{m-1,n-1}&a_{m-1,n} \\a_{m,1}&a_{m,2}&a_{m,3}&a_{m,4}&\cdots&a_{m,n-1}&a_{m,n}\end{bmatrix}$, dengan $m,n$ adalah bilangan genap
Sajikan matriks A, sebagai berikut $A=\begin{bmatrix}\begin{bmatrix}a_{1,1}&a_{1,2}\\a_{2,1}&a_{2,2}\end{bmatrix}&\begin{bmatrix}a_{1,3}&a_{1,4}\\a_{2,3}&a_{2,4}\end{bmatrix}&\cdots&\begin{bmatrix}a_{1,n-1}&a_{1,n}\\a_{2,n-1}&a_{2,n}\end{bmatrix} \\\vdots&\vdots&\ddots&\vdots& \\\begin{bmatrix}a_{m-1,1}&a_{m-1,2}\\a_{m,1}&a_{m,2}\end{bmatrix}&\begin{bmatrix}a_{m-1,3}&a_{m-1,4}\\a_{m,3}&a_{m,4}\end{bmatrix}&\cdots&\begin{bmatrix}a_{m-1,n-1}&a_{m-1,n}\\a_{m,n-1}&a_{m,n}\end{bmatrix} \end{bmatrix}$
Terdapat beberapa cara membuat submatriks yang ukurannya $\frac{1}{4}$ ukuran matriks A. Misalkan dibuat matriks $B$, dengan ketentuan elemen-elemen matriks $B$ sebagai berikut :
- elemen-elemen matriks $B$ adalah rata-rata dari sub matriks persegi berukuran 2*2
- elemen-elemen matriks $B$ adalah maksimum dari elemen submatriks persegi berukuran 2*2
- elemen-elemen matriks $B$ adalah minimum dari elemen submatriks persegi berukuran 2*2
Misalkan $avg$ adalah rata-rata dari elemen-elemen submatriks 2*2,
Misalkan $B=\begin{bmatrix}avg\left(\begin{bmatrix}a_{1,1}&a_{1,2}\\a_{2,1}&a_{2,2}\end{bmatrix}\right)&avg\left(\begin{bmatrix}a_{1,3}&a_{1,4}\\a_{2,3}&a_{2,4}\end{bmatrix}\right)&\cdots&avg\left(\begin{bmatrix}a_{1,n-1}&a_{1,n}\\a_{2,n-1}&a_{2,n}\end{bmatrix}\right)
\\\vdots&\vdots&\ddots&\vdots&
\\avg\left(\begin{bmatrix}a_{m-1,1}&a_{m-1,2}\\a_{m,1}&a_{m,2}\end{bmatrix}\right)&avg\left(\begin{bmatrix}a_{m-1,3}&a_{m-1,4}\\a_{m,3}&a_{m,4}\end{bmatrix}\right)&\cdots&avg\left(\begin{bmatrix}a_{m-1,n-1}&a_{m-1,n}\\a_{m,n-1}&a_{m,n}\end{bmatrix}\right)
\end{bmatrix}$
import numpy as np
import random
random.seed(10)
print("Program Submatriks 1/4")
print("Masukkan ukuran baris matriks A (bilangan genap), m=") ; m=int(input())
print("Masukkan ukuran kolom matriks A (bilangan genap), n=") ; n=int(input())
A = np.array([[random.randrange(0, 100, 1) for j in range(n)] for i in range(m)])
print("Matriks A=") ; print(A)
B = np.array([[0 for j in range(int(n/2))] for i in range(int(m/2))])
for i in range(int(m/2)):
for j in range(int(n/2)):
B[i][j]=(A[2*i][2*j]+A[2*i+1][2*j]+A[2*i][2*j+1]+A[2*i+1][2*j+1])/4
print("Matriks B=") ; print(B)
Program Submatriks 1/4 Masukkan ukuran baris matriks A (bilangan genap), m= 4 Masukkan ukuran kolom matriks A (bilangan genap), n= 8 Matriks A= [[73 4 54 61 73 1 26 59] [62 35 83 20 4 66 62 41] [ 9 31 95 46 5 53 17 77] [45 48 53 36 86 33 58 22]] Matriks B= [[43 54 36 47] [33 57 44 43]]
Comments
Post a Comment