You are on page 1of 15

I. Program Praktikum 1.

Power method Listing Program


/* power method */ #include <stdio.h> #include <math.h> #include <conio.h> main() { float x[5][5],a[5][5],b[5][5],c[5][5],g[5][5], eps, mn, mg, er, eigen; int i, j, k, iterasi, itermax; printf("Masukkan for(i=1;i<=3;i++){ for(j=1;j<=3;j++){ printf("A[%d][%d] = ",i,j); scanf("%f",&a[i][j]);}} printf("\n\tMatriks A:\n"); for(i=1; i<=3; i++){ for (j=1; j<=3; j++) printf("%.2f\t",a[i][j]); printf("\n");} for(i=1; i<=3; i++) for(j=1; j<=1; j++) x[i][j]=1; eigen=1; printf("\nMasukkan epsilon : "); scanf("%f", &eps); printf("Masukkan galat : "); matriks A:\n\n");

scanf("%f", &er); printf("Masukkan iterasi maksimum : "); scanf("%d", &itermax); iterasi=1; do { for(i=1;i<=3;i++){ for(j=1;j<=1;j++){ b[i][j] = 0; for(k=1;k<=1;k++) b[i][j] = b[i][j] + a[i][k] * x[k][j];}} mn = fabs(b[1][1]); for(i=1; i<=3; i++) for(j=1; j<=1; j++){ if (mn < fabs(b[i][j])) mn = fabs(b[i][j]);} for(i=1; i<=3; i++) for(j=1; j<=1; j++){ c[i][j] = (1/mn)*b[i][j];} for(i=1; i<=3; i++) for(j=1; j<=1; j++) g[i][j]=c[i][j]-x[i][j]; mg = fabs(g[1][1]); for(i=1; i<=3; i++) for(j=1; j<=1; j++){ if (mg < fabs(g[i][j])) mg = fabs(g[i][j]);} er = fabs(mn-eigen); for(i=1; i<=3; i++) for(j=1; j<=1; j++){ x[i][j]=c[i][j];} eigen = mn;

iterasi++; } while(er>eps); printf("\nNilai eigen terbesar adalah: %.2f\n",eigen); printf("dan getch(); } vektor eigennya adalah \n%.2f\n%.2f\n %.2f\n",x[1][1],x[2][1],x[3][1]);

Tampilan Program

2. Power invers method Listing Program


/* power invers method */ #include <stdio.h> #include <math.h> #include <conio.h> main() { float m[5][5], mc[5][5], mct[5][5],mi[5][5],x[5][5],a[5] [5],b[5][5],c[5][5],g[5][5], eps, mn, mg, er, eigen,det; int i, j, k, iterasi, itermax; printf("Masukkan matriks A:\n"); for(i=1;i<=3;i++){ for(j=1;j<=3;j++){ printf("A[%d][%d] = ",i,j); scanf("%f",&m[i][j]);}}

printf("\n\tMatriks A:\n"); for(i=1; i<=3; i++){ for (j=1; j<=3; j++) printf("\t%.2f",m[i][j]); printf("\n");} det =((m[1][1]*((m[2][2]*m[3][3])-(m[2][3]*m[3][2])))(m[1][2]*((m[2][1]*m[3][3])-(m[2][3]*m[3][1])))+ (m[1][3]*((m[2][1]*m[3][2])-(m[2][2]*m[3][1])))); printf("\nDeterminan matriks A adalah %.2f\n", det); if(det ==0) printf("Matriks A tidak memiliki invers\n"); else{ mc[1][1] = m[2][2]*m[3][3] - m[2][3]*m[3][2]; mc[1][2] = m[2][3]*m[3][1] - m[2][1]*m[3][3]; mc[1][3] = m[2][1]*m[3][2] - m[2][2]*m[3][1]; mc[2][1] = m[1][3]*m[3][2] - m[1][2]*m[3][3]; mc[2][2] = m[1][1]*m[3][3] - m[1][3]*m[3][1]; mc[2][3] = m[1][2]*m[3][1] - m[1][1]*m[3][2]; mc[3][1] = m[1][2]*m[2][3] - m[1][3]*m[2][2]; mc[3][2] = m[1][3]*m[2][1] - m[1][1]*m[2][3]; mc[3][3] = m[1][1]*m[2][2] - m[1][2]*m[2][1]; printf("\nKofaktor matrtiks A\n"); for(i=1; i<=3; i++){ for (j=1; j<=3; j++) printf("\t%.2f",mc[i][j]); printf("\n");} for(i=1;i<=3;i++){ for(j=1;j<=3;j++){ mct[i][j]=mc[j][i];}} printf("\nKofaktor transposnya matriks A\n"); for(i=1; i<=3; i++){ for (j=1; j<=3; j++) printf("\t%.2f",mct[i][j]);

printf("\n");} for(i=1; i<=3; i++){ for (j=1; j<=3; j++) mi[i][j]=mct[i][j]/det;} printf("\nInvers matriks A\n"); for(i=1; i<=3; i++){ for (j=1; j<=3; j++) printf("\t%.2f",mi[i][j]); printf("\n");}} for(i=1;i<=3;i++){ for(j=1;j<=3;j++){ a[i][j]=mi[i][j];}} for(i=1; i<=3; i++) for(j=1; j<=1; j++) x[i][j]=1; eigen=1; printf("\nMasukkan epsilon : "); scanf("%f", &eps); printf("Masukkan galat : "); scanf("%f", &er); printf("Masukkan iterasi maksimum : "); scanf("%d", &itermax); iterasi=1; do { for(i=1;i<=3;i++){ for(j=1;j<=1;j++){ b[i][j] = 0; for(k=1;k<=1;k++) b[i][j] = b[i][j] + a[i][k] * x[k][j];}} mn = fabs(b[1][1]); for(i=1; i<=3; i++)

for(j=1; j<=1; j++){ if (mn < fabs(b[i][j])) mn = fabs(b[i][j]);} for(i=1; i<=3; i++) for(j=1; j<=1; j++){ c[i][j] = (1/mn)*b[i][j];} for(i=1; i<=3; i++) for(j=1; j<=1; j++) g[i][j]=c[i][j]-x[i][j]; mg = fabs(g[1][1]); for(i=1; i<=3; i++) for(j=1; j<=1; j++){ if (mg < fabs(g[i][j])) mg = fabs(g[i][j]);} er = fabs(mn-eigen); for(i=1; i<=3; i++) for(j=1; j<=1; j++){ x[i][j]=c[i][j];} eigen = mn; iterasi++; } while(er>eps); printf("\nNilai eigen terkecil adalah: %.2f\n",eigen); printf("dan getch(); } vektor eigennya adalah \n%.2f\n%.2f\n %.2f\n",x[1][1],x[2][1],x[3][1]);

Tampilan Program

3. Spectral radius Listing Program


/* Spectral Radius */ #include<stdio.h> #include<math.h> #include<conio.h> main()

{ int i, j; float A[10][10], radius=0; printf("Spectral Radius\n"); printf("\nMasukkan nilai matriks A \n"); for(i=0; i<3; i++) { for(j=0; j<3; j++) { printf("\tA[%d][%d] = ", i, j); scanf("%f", &A[i][j]); } } for(i=0; i<3; i++) { for(j=0; j<3; j++) { if(j!=i) { radius += fabs(A[i][j]); } } } printf("\ntitik pusatnya : "); for(i=0; i<3; i++) { printf("\t%f", A[i][i]); } printf("\nradiusnya adalah : %f", radius); getch(); }

Tampilan Program

II. Tugas Akhir 1) Jelaskan peranan nilai spectral radius dalam mencari solusi persamaan linier menggunakan metoda iterasi. Jawab : Spectral radius merupakan nilai eigen absolute terbesar dari suatu matriks bujursangkar atau matriks n x n. Nilai eigen yang mempunyai magnitude terbesar disebut dengan nilai eigen dominan. Untuk mendapatkan nilai eigen yang dominan dari matriks A yang berukuran n x n, pertama kali kita set nilai vector eigen awal. Selanjutnya kita hitung hasil perkalian matriks dan vector. Hasil dari perkalian tersebut akan menghasilkan sebuah vector baru.Vector tersebut kemudian dinormalisasi, sehingga akhirnya vector tersebut merupakan vector yang ternirmalisasi dan nilai skalarnya merupakan aproksimasi dari nilai eigenvalue.

Spectral radius

dari matriks A didefinisikan sebagai

2) Buatlah summary (tidak boleh dari satu halaman) untuk menganalisa dari semua metoda yang telah anda kerjakan.

Jawab : Pada percobaan kali ini kita membuat program untuk menghitung nilai dan vector eigen dari suatu matriks bujursangkar menggunakan metode pangkat(power method) dan metode pangkat inverse (inverse power method). Menghitung eigenvalue dan eigenvector dari suatu matriks bujursangkar dengan metode pangkat(power method) memerlukan banyak iterasi. Oleh karena itu untuk menjalankannya diperlukan bantuan komputer.Pada metode pangkat(power method) kita menggunakan nilai eigen terbesar sebagai factor normalisasinya. Sedangkan pada metode pangkat inversi kita menggunakan nilai eigen terkecil sebagai factor normalisasinya. Proses pada power method hampir sama dengan inverse power method,namun perbedaannya pada inverse power method kita meghitung dahulu inverse matriksnya. Baru kemudian inverse matriksnya tersebut digunakan sebagai matriks A nya. Konvergensi pada metode pangkat menjadi lambat jika terdapat dua nilai absolute eigenvalue terbesar yang hampir sama. Dan begitu juga dengan konvergensi metode inverse pangkat akan menjadi lambat jika terdapat dua nilai absolute eigenvalue terkecil yang hampir sama. Metode ini, baik itu metode pangkat maupun metode inverse pangkat akan menjadi gagal apabila terdapat dua nilai absolute eigen yang sama.

Dengan menggunakan kedua metode ini,mempermudah kita dalam menentukan nilai dan vector eigen dari suatu matriks bujursangkar, karena eigenvalue dan eigenvektornya dapat ditentukan sekaligus. Dan juga akan mempermudah kita dalam menentukan eigenvalue dan eigenvector dari matriks bujursangkar yang memiliki orde n x n nya lebih dari dua.

KESIMPULAN Untuk menentukan eigenvalue maupun eigenvector dari suatu matriks bujursangkar dapat digunakan metode di bawah ini : a. Metode pangkat (power method) Metode ini digunakan untuk mencari nilai eigen terbesar. Apabila nilai eigen dari suatu matriks yang berukuran n x n diurutkan dari yang terbesar sampai yang terkecil, maka didapatkan nilai eigen dengan magnitude terbesar yang disebut dengan nilai eigen dominan. b. Metode pangkat inverse (inverse power method) Metode ini digunakan untuk mencari nilai eigen terkecil yang merupakan kebalikan dari metode pangkat, algoritma dan prosedurnya sama dengan metode pangkat hanya saja matriks yang digunakan terlebih dahulu harus diinversikan. Perbandingan antara ke-dua metode: a. Power method dan inverse power method mempunyai banyak iterasi, karena itu memerlukan bantuan computer. b. Konvergensi pada power method menjadi lambat jika terdapat nilai absolut eigenvalue terbesar yang hampir sama. c. Konvergensi pada inverse power method menjadi lambat jika terdapat nilai absolut eigenvalue terkecil yang hampir sama. d. Metode pangkat dan metode pangkat inversi akan gagal jika terdapat dua nilai absolute eigenvalue yang sama. e. Keuntungan menggunakan kedua metode adalah eigenvalue dan eigenvektor dapat ditentukan sekaligus.