Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //входные данные:
- //free - вектор свободных членов
- //matrix - непосредственно матрица
- //n и m - размерность
- static void Gauss (double[,] free, double[,] matrix, int n, int m) {
- string path = @"E:\C#\Университет\Первый круг\1Ж\answer.txt"; //указываем путь к файлу
- double[,] UsMatrix = new double[n, m]; //копия матрицы
- double[,] FreeCopy = new double[n, 1]; //копия вектора
- string[] lines = new string[n]; //хранение ответов
- UsMatrix = (double[,])matrix.Clone(); //копирование матрицы
- FreeCopy = (double[,])free.Clone(); //копирование вектора свободных членов
- for (int i = 0; i < n - 1; i++) { //приведение к верхнему треугольному виду
- for (int j = i + 1; j < n; j++) {
- double koef = UsMatrix[j, i] / UsMatrix[i, i];
- for (int k = i; k < n; k++) {
- UsMatrix[j, k] -= UsMatrix[i, k] * koef;
- }
- FreeCopy[j, 0] -= FreeCopy[i, 0] * koef; //изменение вектора свободных членов
- }
- }
- int count = 1;
- double[] x = new double[n]; //x - массив хранения неизвестных
- x[0] = FreeCopy[n-1, 0] / UsMatrix[n-1, m-1]; //вычисление последнего неизвестного
- for (int i = 1, k = n-2; i<n && k>=0; i++, k--) { //обртаный ход
- for (int j = n-1; j!=k; j--, count++) {
- //формула вычисления неизвестных суть в выражении неизвестного и последющем делении на диагональный элемент
- x[i] = (FreeCopy[k, 0] + UsMatrix[k, j] * (-1) * x[i - count]) / UsMatrix[k,k];
- //FreeCopy - преображённый вектор свободных членов, UsMatrix - преображённая матрица
- }
- count = 1;
- }
- Array.Reverse(x, 0,n); //разворот массива (массив, начальный элемент, длина разворота)
- for (int i = 0; i<n; i++) { //вывод результата на экран и перезапись в string массив
- Console.WriteLine($"x{i+1} = {x[i]}");
- lines[i] = Convert.ToString(x[i]);
- }
- File.WriteAllLines($"{path}", lines); //запись в файл
- Console.WriteLine("\nРезультат работы программы записан в файл answer.txt");
- }
Add Comment
Please, Sign In to add comment