Вечный "?" Создание обратной матрицы. Нахождение детерминанта - C#
Формулировка задачи:
Возможно у кого- нибудь есть нормальный готовый код. Буду рад если дадите.
Суть вот в чём. Я уже замучился искать код для создания обратной матрицы. В общем всё свилось к нахождению просто определителя. Ниже представлен код для нахождения определителя матрицы.
Задача такая: сказать какие сборки были сипользованны.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Drawing.Drawing2D; namespace WindowsFormsApplication1 { class Class2 { public double DetGauss(Matrix M) { double det = 1; // Хранит определитель, который вернёт функция int n = M.Mr.Count; // Размерность матрицы int k = 0; const double E = 1E-9; // Погрешность вычислений for (int i = 0; i < n; i++) { k = i; for (int j = i + 1; j < n; j++) if (Math.Abs(M.Mr[j].Cells[i]) > Math.Abs(M.Mr[k].Cells[i])) k = j; if (Math.Abs(M.Mr[k].Cells[i]) < E) { det = 0; break; } Swap(ref M, i, k); if (i != k) det *= -1; det *= M.Mr[i].Cells[i]; for (int j = i + 1; j < n; j++) M.Mr[i].Cells[j] /= M.Mr[i].Cells[i]; for (int j = 0; j < n; j++) if ((j != i) && (Math.Abs(M.Mr[j].Cells[i]) > E)) for (k = i + 1; k < n; k++) M.Mr[j].Cells[k] -= M.Mr[i].Cells[k] * M.Mr[j].Cells[i]; } return det; } } }
Реализовать алгоритм нахождения обратной матрицы методом Гаусса
Что за сборки тут применяются?
Решение задачи: «Вечный "?" Создание обратной матрицы. Нахождение детерминанта»
textual
Листинг программы
using System; class Gauss { public static int Main(string[] args) { try { Matrix a = (args.Length == 0) ? SLAU.In() : SLAU.In(args[0]); for (int k = 1; k <= a.AmountOfRows - 1; k++) { if (a[k, k] == 0) for (int i = k + 1; i <= a.AmountOfRows; i++) if (a[i, k] != 0) { a.SwapRows(k, i); break; } double delElem = a[k, k]; if (delElem == 0) { Console.WriteLine("Система не совместна"); return 0; } a.MulRow(k, 1 / delElem); for (int i = k + 1; i <= a.AmountOfRows; i++) a.SumRows(k, i, -a[i, k]); } if (a[a.AmountOfRows, a.AmountOfColumns - 1] == 0) { Console.WriteLine("Система не совместна"); return 0; } a.MulRow(a.AmountOfRows, 1 / a[a.AmountOfRows, a.AmountOfColumns - 1]); Matrix res = new Matrix(a.AmountOfRows, 1); for (int i = a.AmountOfRows; i >= 1; i--) { double sum = 0; for (int j = a.AmountOfRows; j >= i + 1; j--) sum += res[j, 1] * a[i, j]; res[i, 1] = a[i, a.AmountOfColumns] - sum; } res.Out(); } catch (Exception exc) { Console.WriteLine("Произошла критическая ошибка. Дальнейшее выполение программы нецелесобразно!!!"); Console.WriteLine(exc.StackTrace); Console.WriteLine(exc.TargetSite); return 1; } finally { Console.WriteLine(); Console.Write("Для продолжения нажмите Enter ... "); Console.ReadLine(); } return 0; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д