Advertisement
lpuarmy

Gauss Seidel | Numerik

May 22nd, 2013
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #define maks 100
  5.  
  6. float A[maks][maks],x[maks], b[maks];
  7. int n;
  8.  
  9. void tukar_baris(int i, int besar) {
  10.     float temp[100];
  11.     int j;
  12.     for(j=0;j<=n;j++) {
  13.         temp[j] = A[i][j];
  14.         A[i][j] = A[besar][j];
  15.         A[besar][j] = temp[j];
  16.     }
  17. }
  18.  
  19. void carimatriksb() {
  20.     static int i,j;
  21.     for(i=0;i<n;i++) {
  22.         b[i]=A[i][n];
  23.     }
  24. }
  25.  
  26. void tampil() {
  27.     int i,j;
  28.     for(i=0;i<n;i++) {
  29.         for(j=0;j<n+1;j++) {
  30.             printf("%3g",A[i][j]);
  31.         }
  32.         printf("\n");
  33.     }
  34.     printf("\n");
  35. }
  36.  
  37. void masukkan() {
  38.     int i,j;
  39.     float v[100];
  40.  
  41.     printf(" Masukkan ukuran matriks : "); scanf("%d",&n);
  42.     puts("----------------------------------------");
  43.    
  44.     for(i=0;i<n;i++) {
  45.         for(j=0;j<n;j++) {
  46.             printf(" matrik A[%d][%d] = ",i+1,j+1);
  47.             scanf("%f",&A[i][j]);
  48.             A[i][j] = A[i][j];
  49.         }
  50.     }
  51.  
  52.     puts("----------------------------------------");
  53.     printf(" Masukkan vektor matriks : \n");
  54.     puts("----------------------------------------");
  55.  
  56.     for(i=0;i<j;i++) {
  57.         printf(" vektor [%d] = ",i+1);
  58.         scanf("%f",&v[i]);
  59.         A[i][j] = v[i];
  60.     }
  61.  
  62.     printf("\n Matriks awal:\n");
  63.     puts("----------------------------------------");
  64.     tampil();
  65. }
  66.  
  67. void main() {
  68.     int i,j, konvergen, max_iter, iter;
  69.     float smtr, temp, e, ep;
  70.     float xnow[100], xbef[100];
  71.    
  72.     puts(" METODE ELIMINASI GAUSS SEIDEL");
  73.     puts("========================================");
  74.  
  75.     masukkan();
  76.  
  77.     printf(" Jumlah iterasi maksimum : ");
  78.     scanf("%d",&max_iter);
  79.     printf(" Toleransi error         : ");
  80.     scanf("%f",&ep);
  81.     puts("----------------------------------------");
  82.     fflush(stdin);
  83.  
  84.     carimatriksb();
  85.  
  86.     for(i=0;i<n;i++) {
  87.         xnow[i] = 0; // nilai awal
  88.     }
  89.  
  90.     puts("");
  91.     printf("%-5s","iter x1");
  92.         for(i=1;i<n;i++) {
  93.         printf("%10.5s%d","x",i+1);
  94.     }
  95.     for(i=0;i<n;i++) {
  96.         printf("%10.5s","e");
  97.     }
  98.  
  99.     printf("\n%-5d",0);
  100.     for(i=0;i<n;i++) {
  101.         printf("%-11.5g",xnow[i]);
  102.     }
  103.  
  104.     printf("\n");
  105.     iter = 1;
  106.     konvergen = 0;
  107.  
  108.     while(konvergen==0 && iter<max_iter) {
  109.         for(i=0;i<n;i++) {
  110.             temp = 0;
  111.             for(j=0;j<n;j++) {
  112.                 if(i != j) {
  113.                     temp = temp + A[i][j] * xnow[j];
  114.                 }
  115.             }
  116.             smtr = (b[i] - temp) / A[i][i];
  117.             xbef[i] = xnow[i];
  118.             xnow[i] = smtr;
  119.         }
  120.  
  121.         printf("%-5d",iter);
  122.         for(i=0;i<n;i++) {
  123.             printf("%-11.5g",xnow[i]);
  124.         }
  125.         for(i=0;i<n;i++) {
  126.             e = fabs(xnow[i] - xbef[i]);
  127.             printf("%-11.5g",e);
  128.             if(i==0 && e<ep) {
  129.                 konvergen = 1;
  130.             }
  131.             if(e > 100) {
  132.                 printf("hasil divergen\n");
  133.                 exit(0);
  134.             }
  135.         }
  136.         printf("\n");
  137.         iter++;
  138.     }
  139.  
  140.     printf("Hasilnya : \n");
  141.     for(i=0;i<n;i++) {
  142.         printf("x%d : %g\n",i+1,xnow[i]);
  143.     }  
  144. }
  145.  
  146. // lpuarmy.blogspot.com
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement