Advertisement
Xsufu

Метод Гаусса, 4х4 матрицы не работают

Sep 15th, 2020
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.95 KB | None | 0 0
  1. //метод Гаусса
  2.         static void Gauss (double[,] free, double[,] matrix, int n, int m) {
  3.             string path = @"E:\C#\Университет\Первый круг\1Ж\answer.txt";  //указываем путь к файлу
  4.             double[,] UsMatrix = new double[n, m];                         //копия матрицы
  5.             double[,] FreeCopy = new double[n, 1];                         //копия вектора
  6.             string[] lines = new string[n];                                //хранение ответов
  7.  
  8.             UsMatrix = (double[,])matrix.Clone();   //копирование матрицы
  9.             FreeCopy = (double[,])free.Clone();     //копирование вектора свободных членов
  10.  
  11.             for (int i = 0; i < n - 1; i++) {       //приведение к верхнему треугольному виду
  12.                 for (int j = i + 1; j < n; j++) {
  13.                     double koef = UsMatrix[j, i] / UsMatrix[i, i];
  14.                     for (int k = i; k < n; k++) {
  15.                         UsMatrix[j, k] -= UsMatrix[i, k] * koef;
  16.                     }
  17.                     FreeCopy[j, 0] -= FreeCopy[i, 0] * koef;        //изменение вектора свободных членов
  18.                 }
  19.             }
  20.  
  21.             int count = 1;    
  22.             double[] x = new double[n];                                   //x - массив хранения неизвестных
  23.             x[0] = FreeCopy[n-1, 0] / UsMatrix[n-1, m-1];                 //вычисление последнего неизвестного
  24.             for (int i = 1, k = n - 2; i < n && k >= 0; i++, k--) {       //обратный ход
  25.                 for (int j = m-1; j!=k; j--, count++) {
  26.                     //формула вычисления неизвестных суть в выражении неизвестного и последющем делении на диагональный элемент
  27.                     x[i] = (FreeCopy[k, 0] + UsMatrix[k, j] * (-1) * x[i - count]) / UsMatrix[k,k];
  28.                     //FreeCopy - преображённый вектор свободных членов, UsMatrix - преображённая матрица
  29.                 }
  30.                 count = 1;
  31.             }
  32.  
  33.             Array.Reverse(x, 0,n);              //разворот массива (массив, начальный элемент, длина разворота)
  34.             for (int i = 0; i<n; i++) {         //вывод результата на экран и перезапись в string массив
  35.                 Console.WriteLine($"x{i+1} = {x[i]}");
  36.                 lines[i] = Convert.ToString(x[i]);
  37.             }
  38.             File.WriteAllLines($"{path}", lines);       //запись в файл
  39.             Console.WriteLine("\nРезультат работы программы записан в файл answer.txt");
  40.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement