Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.38 KB | None | 0 0
  1. double
  2. norm(matrix *matr, double *sol){
  3.     double *nev = (double *)calloc(matr->m, sizeof(double));
  4.     long double sum = 0.0;
  5.  
  6.     for(int i = 0; i < matr->m; i++)
  7.     {
  8.         for(int j = 0; j < matr->m; j++)
  9.         {
  10.             nev[i] += matr->mas[ matr->str[i] ][ matr->col[j] ] * sol[j];
  11.         }
  12.         nev[i] -= matr->mas[ matr->str[i] ][ matr->col[matr->m] ];
  13.     }
  14.     for(int i = 0; i < matr->m; i++)
  15.     {
  16.         sum += nev[i] * nev[i];
  17.     }
  18.     free(nev);
  19.     return sqrt(sum);
  20. }
  21.  
  22. void
  23. uprel(matrix *matr){
  24.     double omega = 4.0 / 3.0;
  25.     double eps = 0.001;
  26.     double *sol = (double *)calloc(matr->m, sizeof(double));
  27.     double sum[2] = {0.0, 0.0};
  28.     do{
  29.         for(int i = 0; i < matr->m; i++){
  30.             sum[0] = 0.0;
  31.             sum[1] = 0.0;
  32.             for(int j = 0; j <= i - 1; j++){
  33.                 sum[0] += matr->mas[ matr->str[i] ][ matr->col[j] ] * sol[j];
  34.             }
  35.             for(int j = i; j < matr->m; j++){
  36.                 sum[1] += matr->mas[ matr->str[i] ][ matr->col[j] ] * sol[j];
  37.             }
  38.             sol[i] += (omega / matr->mas[ matr->str[i] ][ matr->col[i] ]) * (matr->mas[ matr->str[i] ][ matr->col[matr->m] ] - sum[0] - sum[1]);
  39.         }
  40.     }
  41.     while(norm(matr, sol) > eps);
  42.  
  43.     for (int i = 0; i < matr->m; i++){
  44.         printf("%lf ", sol[i]);
  45.     }
  46.     printf ("\n");
  47.  
  48.     free(sol);
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement