Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<math.h>
- #include<stdlib.h>
- #define eps 1.0e-5
- int n;
- bool converge(double *xk, double *xkp)
- {
- double norm = 0;
- for (int i = 0; i < n; i++)
- norm += (xk[i] - xkp[i])*(xk[i] - xkp[i]);
- return (sqrt(norm)<eps);
- }
- double Zeydel(double **a,double *b,double *x, double *p)
- {
- do
- {
- for (int i = 0; i < n; i++)
- p[i] = x[i];
- for (int i = 0; i < n; i++)
- {
- double var = 0;
- for (int j = 0; j < i; j++)
- var += (a[i][j] * x[j]);
- for (int j = i + 1; j < n; j++)
- var += (a[i][j] * p[j]);
- x[i] = (b[i] - var) / a[i][i];
- }
- }
- while (!converge(x, p));
- }
- int main(){
- FILE *input = fopen("C:\\Users\\Miron\\Desktop\\input.txt","r");
- fscanf(input, "%d",&n);
- double **A = (double **)malloc(n*sizeof(double *)); //ìàññèâ êîýôôèöèåíòîâ
- for(int i = 0; i < n; i++){
- A[i] = (double *)malloc(n*sizeof(double));
- }
- double *B = (double *)malloc(n*sizeof(double)); //ìàññèâ ïðàâûõ ÷àñòåé
- double *x = (double *)malloc(n*sizeof(double)); //ìàññèâ ðåøåíèé
- double *p = (double *)malloc(n*sizeof(double));
- for(int i = 0; i<n; i++){
- for(int j = 0; j<n; j++){
- fscanf(input, "%f",&A[i][j]);
- }
- fscanf(input, "%f",&B[i]);
- x[i] = 0;
- }
- Zeydel(A,B,x,p);
- for(int i = 0; i<n; i++)
- printf("%f\n", x[i]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement