Aodai

LR Factorization Doolittle

Apr 2nd, 2019
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int n, i, j, k, h;
  4. float a[100][100], S, piv, aux;
  5. int main()
  6. {
  7.     scanf("%d", &n);
  8.     for (i = 1; i <= n; i++)
  9.         for (j = 1; j <= n + 1; j++)
  10.             scanf("%f", &a[i][j]);
  11.     if (a[1][1] == 0)
  12.     {
  13.         i = 1;
  14.         do
  15.         {
  16.             i++;
  17.         } while (a[i][1] == 0 && i <= n);
  18.         if (i > n)
  19.         {
  20.             printf("The system does not unique solution");
  21.             return 0;
  22.         }
  23.         for (j = 1; j <= n + 1; j++)
  24.         {
  25.             aux = a[1][j];
  26.             a[1][j] = a[i][j];
  27.             a[i][j] = aux;
  28.         }
  29.     }
  30.     for (i = 2; i <= n; i++)
  31.         a[1][i] = a[1][i] / a[1][1];
  32.     for (k = 2; k <= n; k++)
  33.     {
  34.         i = k;
  35.         do
  36.         {
  37.             S = 0;
  38.             piv = 0;
  39.             for (h = 1; h <= k - 1; h++)
  40.                 S = S + a[i][h] * a[h][k];
  41.             piv = a[i][k] - S;
  42.             i++;
  43.         } while (piv == 0 && i <= n);
  44.         if (piv == 0)
  45.         {
  46.             printf("The system does not have unique solution");
  47.             return 0;
  48.         }
  49.         if (i != k + 1)
  50.         {
  51.             for (j = 1; j <= n + 1; j++)
  52.             {
  53.                 aux = a[k][j];
  54.                 a[k][j] = a[i - 1][j];
  55.                 a[i - 1][j] = aux;
  56.             }
  57.         }
  58.         for (i = k; i <= n; i++)
  59.         {
  60.             S = 0;
  61.             for (h = 1; h <= k - 1; h++)
  62.                 S = S + a[i][h] * a[h][k];
  63.             a[i][k] = a[i][k] - S;
  64.         }
  65.         for (j = k + 1; j <= n; j++)
  66.         {
  67.             S = 0;
  68.             for (h = 1; h <= k - 1; h++)
  69.                 S = S + a[k][h] * a[h][k];
  70.             a[k][j] = (a[k][j] - S) / a[k][k];
  71.         }
  72.     }
  73.     for (i = 2; i <= n; i++)
  74.     {
  75.         S = 0;
  76.         for (k = 1; k <= i - 1; k++)
  77.             S = S + a[i][k] * a[k][n + 1];
  78.         a[i][n + 1] = a[i][n + 1] - S;
  79.     }
  80.     a[n][n + 1] = a[n][n + 1] / a[n][n];
  81.     for (i = n - 1; i >= 1; i--)
  82.     {
  83.         S = 0;
  84.         for (j = i + 1; j <= n; j++)
  85.             S = S + a[i][j] * a[j][n + 1];
  86.         a[i][n + 1] = (a[i][n + 1] - S) / a[i][i];
  87.     }
  88.     for (i = 1; i <= n; i++)
  89.         printf("x%d = %f ", i, a[i][n + 1]);
  90.     printf("\n");
  91.     system("pause");
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment