Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.28 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[i][j] * sol[j];
  11.         }
  12.         nev[i] -= matr[i][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, double omega, double eps){
  24.  
  25.     double *sol = (double*)calloc(matr->m, sizeof(double))
  26.     double sum[2] = {0.0, 0.0};
  27.     do{
  28.         for(int i = 0; i < matr->m; i++){
  29.             sum[0] = 0.0;
  30.             sum[1] = 0.0;
  31.             for(int j = 0; j <= i-1; j++){
  32.                 sum[0] += matr->mas[ matr->str[i] ][ matr->col[j] ] * sol[j];
  33.             }
  34.             for(int j = i; j < matr->m; j++){
  35.                 sum[1] += matr->mas[ matr->str[i] ][ matr->col[j] ] * sol[j];
  36.             }
  37.             sol[i] += (omega/matr->mas[ matr->str[i] ][ matr->col[i] ]) * (matr[ matr->str[i] ][ matr->col[matr->m] ] - sum[0] - sum[1]);
  38.         }
  39.     }
  40.     while(norm(matr, sol) > eps);
  41.  
  42.     for (int i = 0; i < matr->m; i++){
  43.         printf("%lf ", sol[i]);
  44.     }
  45.     printf ("\n");
  46.  
  47.     free(sol);
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement