Magentax

JAcobi

Jan 19th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. //Jacobi
  2.  
  3. #include <stdio.h>
  4. #include <iostream.h>
  5. #include <conio.h>
  6. #include <math.h>
  7.  
  8. #define N 7
  9.  
  10. typedef unsigned char LOGIC;
  11.  
  12. LOGIC Jacobi(int,float A[][N],float *,float *,float);
  13.  
  14. int main(void)
  15. {
  16.   int i,j;
  17.   float er=0.001;
  18.   float A[N][N],B[N],X[N];
  19.   int grad;
  20.  
  21.   printf("\nIntroduceti gradul : ");
  22.   scanf("%d",&grad);
  23.   for(i=1;i<=grad;i++)
  24.     for(j=1;j<=grad;j++)
  25.     {
  26.       printf("\nA[%d][%d] = ",i,j);
  27.       scanf("%f",&A[i][j]);
  28.       }
  29.   for(i=1;i<=grad;i++)
  30.     {
  31.         printf("\nB[%d] = ",i);
  32.         scanf("%f",&B[i]);
  33.         X[i] = B[i];    // stabilirea valorilor vectorului de start, egal cu
  34.                         // vectorul termenilor liberi
  35.         }
  36.  
  37. // apelul functiei si verificarea rezultatelor
  38.   if(Jacobi(grad,A,B,X,er))
  39.     {
  40.     for(i=1;i<=grad;i++)   printf("\nX[%d] = %f",i,X[i]);
  41.     }
  42.   else printf("\nEroare");
  43.  
  44.   getch();
  45.   return 1;
  46. }
  47.  
  48. LOGIC Jacobi(int n,float A[][N],float *B,float *X,float er)
  49. {
  50.   int i,j;
  51.   float sum;
  52.   float Xn[N],Xn_1[N];
  53.   LOGIC sem;
  54.   for(i=1;i<=n;i++) {
  55.   sum=0;
  56.   for(j=1;j<=n;j++) sum=sum+fabs(A[i][j]);
  57.   if(sum>2*fabs(A[i][i])) {return(0);}
  58.   }
  59.  
  60.   for(i=1;i<=n;i++) Xn[i]=X[i];
  61.   do {
  62.   sem=1;
  63.   for(i=1;i<=n;i++) Xn_1[i]=Xn[i];
  64.   for(i=1;i<=n;i++)
  65.   {
  66.   Xn[i]=B[i];
  67.   for(j=1;j<=n;j++) if(j!=i) Xn[i]=Xn[i]-A[i][j]*Xn_1[j];
  68.   Xn[i]=Xn[i]/A[i][i];
  69.   cout << " componenta " << i << " este " << Xn[i];
  70.   }
  71.   cout << "\n";
  72.  
  73.   for(i=1;i<=n;i++) if(fabs(Xn[i]-Xn_1[i])>er) sem=0;
  74.   } while(sem==0);
  75.  
  76.   for(i=1;i<=n;i++) X[i]=Xn[i];
  77.   return(1);
  78. }
Add Comment
Please, Sign In to add comment