Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Jacobi
- #include <stdio.h>
- #include <iostream.h>
- #include <conio.h>
- #include <math.h>
- #define N 7
- typedef unsigned char LOGIC;
- LOGIC Jacobi(int,float A[][N],float *,float *,float);
- int main(void)
- {
- int i,j;
- float er=0.001;
- float A[N][N],B[N],X[N];
- int grad;
- printf("\nIntroduceti gradul : ");
- scanf("%d",&grad);
- for(i=1;i<=grad;i++)
- for(j=1;j<=grad;j++)
- {
- printf("\nA[%d][%d] = ",i,j);
- scanf("%f",&A[i][j]);
- }
- for(i=1;i<=grad;i++)
- {
- printf("\nB[%d] = ",i);
- scanf("%f",&B[i]);
- X[i] = B[i]; // stabilirea valorilor vectorului de start, egal cu
- // vectorul termenilor liberi
- }
- // apelul functiei si verificarea rezultatelor
- if(Jacobi(grad,A,B,X,er))
- {
- for(i=1;i<=grad;i++) printf("\nX[%d] = %f",i,X[i]);
- }
- else printf("\nEroare");
- getch();
- return 1;
- }
- LOGIC Jacobi(int n,float A[][N],float *B,float *X,float er)
- {
- int i,j;
- float sum;
- float Xn[N],Xn_1[N];
- LOGIC sem;
- for(i=1;i<=n;i++) {
- sum=0;
- for(j=1;j<=n;j++) sum=sum+fabs(A[i][j]);
- if(sum>2*fabs(A[i][i])) {return(0);}
- }
- for(i=1;i<=n;i++) Xn[i]=X[i];
- do {
- sem=1;
- for(i=1;i<=n;i++) Xn_1[i]=Xn[i];
- for(i=1;i<=n;i++)
- {
- Xn[i]=B[i];
- for(j=1;j<=n;j++) if(j!=i) Xn[i]=Xn[i]-A[i][j]*Xn_1[j];
- Xn[i]=Xn[i]/A[i][i];
- cout << " componenta " << i << " este " << Xn[i];
- }
- cout << "\n";
- for(i=1;i<=n;i++) if(fabs(Xn[i]-Xn_1[i])>er) sem=0;
- } while(sem==0);
- for(i=1;i<=n;i++) X[i]=Xn[i];
- return(1);
- }
Add Comment
Please, Sign In to add comment