elsemTim

Gaus

Dec 14th, 2017
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.33 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace GaussAndSeidel
  8. {
  9.     class Program
  10.     {
  11.  
  12.         const double epsilon = 0.00001;
  13.        
  14.         static double[,] A =
  15.         {
  16.             {7.4, 2.2, -3.1, -0.7 },
  17.             {1.6, 4.8, -8.5, 4.5 },
  18.             {4.7, 7.0, -6.0, 6.6 },
  19.             {5.9, 2.7, 4.9, -6.3 }
  20.         };
  21.        
  22.         static double[] B = { 2, 4, 6, 8 };
  23.  
  24.         static int N = A.GetLength(0);
  25.  
  26.         static void Gauss(double[] X)
  27.         {
  28.             double[] Q = new double[N - 1];
  29.  
  30.             for (int k = 0; k < N - 1; k++)
  31.             {
  32.                 for (int i = 0; i < N - 1; i++)
  33.                     Q[i] = A[i + 1, k] / A[k, k];
  34.                 for (int i = 0, j = k; j < N - 1;)
  35.                 {
  36.                     A[j + 1, i] = A[j + 1, i] - Q[j] * A[k, i];
  37.                     if (i == N - 1)
  38.                     {
  39.                         B[j + 1] = B[j + 1] - Q[j] * B[k];
  40.                         j++;
  41.                         i = 0;
  42.                     }
  43.                     else i++;
  44.                 }
  45.             }
  46.  
  47.             X[N - 1] = B[N - 1] / A[N - 1, N - 1];
  48.             double s;
  49.             for (int i = N - 2; ; i--)
  50.             {
  51.                 s = 0;
  52.                 for (int j = i + 1; j < N; j++)
  53.                     s += A[i, j] * X[j];
  54.                 X[i] = (B[i] - s) / A[i, i];
  55.                 if (i == 0)
  56.                     break;
  57.             }
  58.             Console.WriteLine("Метод Гаусса.");
  59.             for (int i = 0; i < N; i++)
  60.                 Console.WriteLine(X[i]);
  61.             Console.WriteLine();
  62.         }
  63.  
  64.         static void Seidel()
  65.         {
  66.             Random r = new Random();
  67.  
  68.             double[] X = { r.Next(4), r.Next(4), r.Next(4), r.Next(4) };
  69.             double[] newX = { 0, 0, 0, 0 };
  70.             bool first = true;
  71.             int i = 0;
  72.  
  73.             do
  74.             {
  75.                 i++;
  76.                 if (!first)
  77.                 {
  78.                     X[0] = newX[0];
  79.                     X[1] = newX[1];
  80.                     X[2] = newX[2];
  81.                     X[3] = newX[3];
  82.                 }
  83.                 else
  84.                     first = false;
  85.  
  86.                 newX[0] = 1 / A[0, 0] * (-A[0, 1] * X[1] - A[0, 2] * X[2] - A[0, 3] * X[3] + B[0]);
  87.  
  88.                 newX[1] = 1 / A[1, 1] * (-A[1, 0] * newX[0] - A[1, 2] * X[2] - A[1, 3] * X[3] + B[1]);
  89.  
  90.                 newX[2] = 1 / A[2, 2] * (-A[2, 0] * newX[0] - A[2, 1] * newX[1] - A[2, 3] * X[3] + B[2]);
  91.  
  92.                 newX[3] = 1 / A[3, 3] * (-A[3, 0] * newX[0] - A[3, 1] * newX[1] - A[3, 2] * newX[2] + B[3]);
  93.  
  94.             } while (Math.Sqrt(Math.Pow((newX[0] - X[0]), 2) + Math.Pow((newX[1] - X[1]), 2)
  95.                         + Math.Pow((newX[2] - X[2]), 2) + Math.Pow((newX[3] - X[3]), 2)) > epsilon);
  96.  
  97.             Console.WriteLine("Метод Зейделя:");
  98.             Console.WriteLine("{0}\n{1}\n{2}\n{3}\nКоличество итераций:{4}", newX[0], newX[1], newX[2], newX[3], i);
  99.         }
  100.  
  101.         static void Main(string[] args)
  102.         {
  103.             Console.WriteLine(N+"\n");
  104.             double[] X = new double[N];
  105.  
  106.             Gauss(X);
  107.             Seidel();
  108.             Console.ReadKey();
  109.         }
  110.     }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment