akhm-2

17
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++)

Upload: mohamad-fitrah-bahari

Post on 18-Feb-2015

41 views

Category:

Documents


1 download

DESCRIPTION

umum

TRANSCRIPT

Page 1: akhm-2

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 : ");

Page 2: akhm-2

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;

Page 3: akhm-2

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

Page 4: akhm-2

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]);}}

Page 5: akhm-2

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]);

Page 6: akhm-2

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++)

Page 7: akhm-2

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

Page 8: akhm-2
Page 9: akhm-2
Page 10: akhm-2

3. Spectral radius

Listing Program

/* Spectral Radius */

#include<stdio.h>

#include<math.h>

#include<conio.h>

main()

Page 11: akhm-2

{

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

Page 12: akhm-2

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.

Page 13: akhm-2

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.

Page 14: akhm-2

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.

Page 15: akhm-2