akhm-2
DESCRIPTION
umumTRANSCRIPT
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 matriks A:\n\n");
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 : ");
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 vektor eigennya adalah \n%.2f\n%.2f\n%.2f\
n",x[1][1],x[2][1],x[3][1]);
getch();
}
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 vektor eigennya adalah \n%.2f\n%.2f\n%.2f\
n",x[1][1],x[2][1],x[3][1]);
getch();
}
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.