Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO;
- namespace Gauss
- {
- class Program
- {
- public static void Gauss(double[,] Matrix, ref double[] Bi, ref int[] trim)
- {
- int n = Matrix.GetLength(0);
- double swap;
- double Normalizer;
- //Поиск максимального элемента и обмен строк i-ой и index
- for (int j = 0; j < n; j++)
- {
- double maxElement = -1.0;
- int index = 0;
- for (int k = j; k < n; k++)
- {
- if (Math.Abs(Matrix[j, k]) > maxElement)
- {
- maxElement = Math.Abs(Matrix[j, k]);
- index = k;
- }
- }
- for (int i = 0; i < n; i++)
- {
- swap = Matrix[i, j];
- Matrix[i, j] = Matrix[i, index];
- Matrix[i, index] = swap;
- }
- int q = -1, w = -1;
- for (int i = 0; i < n; i++)
- {
- if (j == trim[i])
- q = i;
- }
- for (int i = 0; i < n; i++)
- {
- if (index == trim[i])
- w = i;
- }
- int tmp = trim[w];
- trim[w] = trim[q];
- trim[q] = tmp;
- //Прямой ход
- Normalizer = Matrix[j, j]; //Нормализуем строку
- for (int i = j; i < n; i++)
- Matrix[j, i] /= Normalizer;
- Bi[j] /= Normalizer;
- for (int i = j + 1; i < n; i++) //Вычитаем нормализованную строку из всех нижних
- {
- Normalizer = Matrix[i, j];
- for (int k = j; k < n; k++) // Вычитаем одну строку из другой
- Matrix[i, k] -= Matrix[j, k] * Normalizer;
- Bi[i] -= Bi[j] * Normalizer;
- }
- }
- //Обратный ход
- for (int i = n - 1; i >= 0; i--)
- {
- Normalizer = Matrix[i, i]; //Нормализуем строку
- for (int j = i; j < n; j++)
- Matrix[i, j] /= Normalizer;
- Bi[i] /= Normalizer;
- for (int j = i - 1; j >= 0; j--) //Вычитаем нормализованную строку из всех верхних
- {
- Normalizer = Matrix[j, i];
- for (int k = i; k < n; k++) // Вычитаем одну строку из другой
- Matrix[j, k] -= Matrix[i, k] * Normalizer;
- Bi[j] -= Bi[i] * Normalizer;
- }
- }
- }
- static void Main()
- {
- System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
- using (StreamReader inFile = new StreamReader("input.txt"))
- {
- using (StreamWriter outFile = new StreamWriter("output.txt", false))
- {
- ///////////////////////////// СЧИТЫВАНИЕ ДАННЫХ
- string S = inFile.ReadLine();
- int n = int.Parse(S);
- double[,] Matrix = new double[n, n];
- double[] Bi = new double[n];
- string[] line;
- for (int i = 0; i < n; i++)
- {
- S = inFile.ReadLine();
- line = S.Split(' ');
- for (int j = 0; j < n; j++)
- {
- Matrix[i, j] = double.Parse(line[j]);
- }
- Bi[i] = double.Parse(line[line.Length - 1]);
- }
- int[] trim = new int[n];
- for (int i = 0; i < n; i++)
- {
- trim[i] = i;
- }
- Gauss(Matrix, ref Bi, ref trim);
- for (int i = 0; i < Bi.Length; i++)
- {
- outFile.Write("{0:0.0000000000} ", Bi[trim[i]]);
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement