Advertisement
Guest User

Untitled

a guest
Nov 26th, 2015
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.61 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. using System.IO;
  7.  
  8. namespace Gauss
  9. {
  10.     class Program
  11.     {
  12.         public static void Gauss(double[,] Matrix, ref double[] Bi, ref int[] trim)
  13.         {
  14.             int n = Matrix.GetLength(0);
  15.             double swap;
  16.             double Normalizer;
  17.             //Поиск максимального элемента и обмен строк i-ой и index
  18.             for (int j = 0; j < n; j++)
  19.             {
  20.                 double maxElement = -1.0;
  21.                 int index = 0;
  22.                 for (int k = j; k < n; k++)
  23.                 {
  24.                     if (Math.Abs(Matrix[j, k]) > maxElement)
  25.                     {
  26.                         maxElement = Math.Abs(Matrix[j, k]);
  27.                         index = k;
  28.                     }
  29.                 }
  30.  
  31.                 for (int i = 0; i < n; i++)
  32.                 {
  33.                     swap = Matrix[i, j];
  34.                     Matrix[i, j] = Matrix[i, index];
  35.                     Matrix[i, index] = swap;
  36.                 }
  37.  
  38.                 int q = -1, w = -1;
  39.                 for (int i = 0; i < n; i++)
  40.                 {
  41.                     if (j == trim[i])
  42.                         q = i;
  43.                 }
  44.                 for (int i = 0; i < n; i++)
  45.                 {
  46.                     if (index == trim[i])
  47.                         w = i;
  48.                 }
  49.                 int tmp = trim[w];
  50.                 trim[w] = trim[q];
  51.                 trim[q] = tmp;
  52.  
  53.  
  54.                 //Прямой ход
  55.                 Normalizer = Matrix[j, j];        //Нормализуем строку
  56.                 for (int i = j; i < n; i++)
  57.                     Matrix[j, i] /= Normalizer;
  58.                 Bi[j] /= Normalizer;
  59.  
  60.                 for (int i = j + 1; i < n; i++)     //Вычитаем нормализованную строку из всех нижних
  61.                 {
  62.                     Normalizer = Matrix[i, j];
  63.                     for (int k = j; k < n; k++)     // Вычитаем одну строку из другой
  64.                         Matrix[i, k] -= Matrix[j, k] * Normalizer;
  65.                     Bi[i] -= Bi[j] * Normalizer;
  66.                 }
  67.             }
  68.             //Обратный ход
  69.             for (int i = n - 1; i >= 0; i--)
  70.             {
  71.                 Normalizer = Matrix[i, i];        //Нормализуем строку
  72.                 for (int j = i; j < n; j++)
  73.                     Matrix[i, j] /= Normalizer;
  74.                 Bi[i] /= Normalizer;
  75.                 for (int j = i - 1; j >= 0; j--)     //Вычитаем нормализованную строку из всех верхних
  76.                 {
  77.                     Normalizer = Matrix[j, i];
  78.                     for (int k = i; k < n; k++)     // Вычитаем одну строку из другой
  79.                         Matrix[j, k] -= Matrix[i, k] * Normalizer;
  80.                     Bi[j] -= Bi[i] * Normalizer;
  81.                 }
  82.  
  83.             }
  84.         }
  85.         static void Main()
  86.         {
  87.             System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
  88.  
  89.             using (StreamReader inFile = new StreamReader("input.txt"))
  90.             {
  91.                 using (StreamWriter outFile = new StreamWriter("output.txt", false))
  92.                 {
  93.                     ///////////////////////////// СЧИТЫВАНИЕ ДАННЫХ
  94.                     string S = inFile.ReadLine();
  95.                     int n = int.Parse(S);
  96.                     double[,] Matrix = new double[n, n];
  97.                     double[] Bi = new double[n];
  98.                     string[] line;
  99.                     for (int i = 0; i < n; i++)
  100.                     {
  101.                         S = inFile.ReadLine();
  102.                         line = S.Split(' ');
  103.                         for (int j = 0; j < n; j++)
  104.                         {
  105.                             Matrix[i, j] = double.Parse(line[j]);
  106.                         }
  107.                         Bi[i] = double.Parse(line[line.Length - 1]);
  108.                     }
  109.                     int[] trim = new int[n];
  110.                     for (int i = 0; i < n; i++)
  111.                     {
  112.                         trim[i] = i;
  113.                     }
  114.                     Gauss(Matrix, ref Bi, ref trim);
  115.                     for (int i = 0; i < Bi.Length; i++)
  116.                     {
  117.                         outFile.Write("{0:0.0000000000} ", Bi[trim[i]]);
  118.                     }
  119.                 }
  120.             }
  121.         }
  122.     }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement