ariestamirra

seidel

Apr 20th, 2014
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int i , j, k ,n;
  5. double a[20][20],awal,xnow[20],xbef[20],temp,ep,b[20],smtr,e;
  6. int i,j,n,k=0,jum,konvergen=0;
  7.  
  8. int iterasi=1;
  9. void input();
  10. void tampil();
  11. void gaussiedel();
  12.  
  13. main()
  14. {
  15.     char p = 'y';
  16.     int kondisi=1;
  17.     while(p=='y' || p=='Y')
  18.     {
  19.         printf("Penyelsaian Sistem Persamaan Linear\nMetode Gauss Seidel\n");
  20.         printf("==============================================\n");
  21.         input();
  22.         gaussiedel();
  23.         tampil();
  24.         puts("=====================================");
  25.         fflush(stdin);
  26.         printf("Ingin ulangi??? y/n = ");
  27.         scanf("%c",&p);
  28.         puts("");
  29.     }
  30. }
  31.  
  32. void input()
  33. {
  34.     printf("Masukkan jumlah ordo : ");
  35.     scanf("%i",&n);
  36.     printf("Masukkan Augmented Matrik : \n");
  37.     for(i=0; i<n; i++)
  38.     {
  39.         printf("Persamaan ke-%d\n", i+1);
  40.         for(j=0; j<n; j++)
  41.         {
  42.             printf("Nilai ke-%d : ",j+1);
  43.             scanf("%lg", &a[i][j]);
  44.             if(j==n-1)
  45.             {
  46.                 printf("Nilai y : ");
  47.                 scanf("%lg", &a[i][j+1]);
  48.                 break;
  49.             }
  50.         }
  51.     }
  52.     printf("Masukkan nilai awal : ");
  53.     scanf("%lg",&awal);
  54.     printf("Masukkan jumlah iterasi : ");
  55.     scanf("%i",&jum);
  56.     printf("Masukkan nilai epsilon : ");
  57.     scanf("%lg",&ep);
  58.     puts("Augmented Matrik asal : ");
  59.     for(i=0; i<n; i++)
  60.     {
  61.         for(j=0; j<=n; j++)
  62.         {
  63.             printf("%-5lg",a[i][j]);
  64.         }
  65.         puts("");
  66.     }
  67.     puts("");
  68. }
  69.  
  70.  
  71. void gaussiedel()
  72. {
  73.     printf("%-3i",k);
  74.     for(i=0; i<n; i++)
  75.     {
  76.         xnow[i]=awal;
  77.         printf("%-10lg",xnow[i]);
  78.         b[i]=a[i][3];
  79.     }
  80.     puts("");
  81.     k=1;
  82.     while(iterasi<jum && konvergen==0)
  83.     {
  84.         printf("%-3i",k);
  85.         for(i=0; i<n; i++)
  86.         {
  87.             temp=0;
  88.             for(j=0; j<n; j++)
  89.             {
  90.                 if(i!=j)
  91.                 {
  92.                     temp=temp+a[i][j]*xnow[j];
  93.                 }
  94.             }
  95.             smtr=(b[i]-temp)/a[i][i];
  96.             xbef[i]=xnow[i];
  97.             xnow[i]=smtr;
  98.         }
  99.         for(i=0; i<n; i++)
  100.         {
  101.             printf("%-10lg",xnow[i]);
  102.         }
  103.         for(i=0; i<n; i++)
  104.         {
  105.             e=fabs(xnow[i]-xbef[i]);
  106.             printf("%-10lg",e);
  107.             if(i==0 && e<ep)
  108.             {
  109.                 konvergen=1;
  110.             }
  111.             if(e>100)
  112.             {
  113.                 printf("\nIni divergen\n");
  114.                 konvergen=2;
  115.                 break;
  116.             }
  117.         }
  118.         puts("");
  119.         k++;
  120.         iterasi++;
  121.         if(konvergen==2)
  122.             break;
  123.     }
  124.     puts("");
  125. }
  126. void tampil()
  127. {
  128.     for(i=0; i<n; i++)
  129.     {
  130.         printf("Akar x%d = %-10lg",i+1,xnow[i]);
  131.     }
  132.     puts("");
  133. }
Advertisement
Add Comment
Please, Sign In to add comment