Program Bahasa C Menghitung Faktorisasi LU Menggunakan Metode Doolittle

Metode Doolittle merupakan suatu metode untuk menyelesaikan beberapa persamaan linear. Pada dasarnya cara kerja metode ini adalah dengan memasukkan komponen-komponen persamaan ke dalam bentuk matriks, sehingga matriks koefisien persamaan tersebut dapat difaktorkan menjadi matriks L dan U. Oleh karena itu, metode ini juga akrab disebut sebagai metode LU, dimana matriks L adalah matriks segitiga bawah dan matriks U adalah matriks segitiga atas. Melalui matriks LU tersebut jika dioperasikan akan didapatkan nilai dari variabel persamaannya.

 Berikut ini merupakan tampilan program menggunakan bahasa C yang telah saya buat :



Untuk Source kodenya tinggal di copas sj gan !!!!

int n,i,j,k;
float kali[50],perkalian[50],A[50][50],U[50][50],jumlah,sigma,L[50][50],B[50];
main()
{
    kembali:
   printf("KELOMPOK 14 [ FAKTORISASI LU ]: \n");
   printf(" MUH. HATTA \n\n");
   printf("Faktorisasi LU Dengan Menggunakan Metode Doolittle Dengan persamaan berbentuk : \n\n");
   printf("A11X1 + A12X2 + ..... + A1nXn = B1\n");
   printf("A21X1 + A22X2 + ..... + A2nXn = B2\n");
   printf(":\n:\n");
   printf("An1x1 + An2x2 + ..... + Annxn = Bn\n\n");
   printf("=================================================\n\n");
   printf("Jumlah Baris Matriks =  ");
   scanf("%d",&n);
   for(i=0;i<n;i++)
   {
       for(j=0;j<n;j++)
      {
          printf("Elemen matriks A baris ke-%d kolom ke-%d = ",i+1,j+1);
         scanf("%f",&A[i][j]);
      }
      printf("\n");
   }
   printf("Masukkan Komponen Vektor B  \n");
   for(i=0;i<n;i++)
   {
       printf("Komponen vektor ke-%d = ",i+1);
      scanf("%f",&B[i]);
   }
   if(A[0][0]==0)
   {
      printf("\nPersamaan tidak dapat diselesaikan karena pembagi = 0 tidak terdefenisi\n\n");
       goto kembali;
   }
   printf("\n============================================\n\n");
   printf("\n\n");
   //bagian penyelesain
  for(i=0;i<n;i++)
  {
          for(j=0;j<n;j++)
      {
          U[0][j]=A[0][j];
         L[j][0]=A[j][0]/A[0][0];
      }
  }
  for(i=1;i<n;i++)
  {
          for(j=i;j<=n;j++)
      {
          jumlah=0;
          sigma=0;
          for(k=0;k<i;k++)
         {
             kali[k]=L[i][k]*U[k][j];
            perkalian[k]=L[j][k]*U[k][i];
            jumlah=jumlah+kali[k];
            sigma=sigma+perkalian[k];
         }
         U[i][j]=A[i][j]-jumlah;
         if(U[i][i]==0)
         {
             printf("\n\n Persamaan tidak dapat diselesaikan karena pembagi = 0 tidak terdefenisi\n\n");
               goto kembali;
         }
         L[j][i]=(A[j][i]-sigma)/U[i][i];

         kali[j+1]=0;
          perkalian[j+1]=0;
      }
  }

  printf("Nilai Matriks L    = \n\n");
  for(i=0;i<n;i++)
  {
          for(j=0;j<n;j++)
      {
          printf("%4.1f   ",L[i][j]);
      }
          printf("\n\n");
  }
  printf("============================================\n\n");
  printf("Nilai Matriks U    = \n\n");
  for(i=0;i<n;i++)
  {
          for(j=0;j<n;j++)
      {
          printf("%4.1f   ",U[i][j]);
      }
          printf("\n\n");
  }

// substitusi kedepan
for(i=1;i<n;i++)
{
    for(j=0;j<i;j++)
   {
   B[i]=B[i]-L[i][j]*B[j];
   }
}
// substitusi kebelakang
B[n-1]=B[n-1]/U[n-1][n-1];
for(i=n-2;i>=0;i--)
{
    for(j=i+1;j<n;j++)
   {
   B[i]=B[i]-U[i][j]*B[j];
   }
   B[i]=B[i]/U[i][i];
}
printf("Jadi, Hasil akhirnya Adalah\n");
for(i=0;i<n;i++)
{
    printf("X[%2d] = %g\n",i+1,B[i]);
   
}

getch();
}
Share On:

No comments:

Post a Comment