.NET 4.x В прилагаемом демо-проекте решение 10 задач с матрицами - C#
Формулировка задачи:
Набросал небольшую библиотеку для упрощения решения академических задач связанных с матрицами. Может кому пригодится.
В прилагаемом демо-проекте решение 10 задач с матрицами (брал с киберфорума ) Текст задач под спойлером. Решение в среднем занимает 6-8 строчек, с помощью LINQ легко сократить до 2-4.
Краткое описание классов библиотеки:
Matrix<T> - основной класс инкапсулирующий работу с матрицей. Поддерживает интерфейсы IEnumerator<T>, IEnumerable<T> (возможность использования в LINQ-запросах и цикле foreach) и обращение через индексатор.
Возможности:
- Получение и запись строк/столбцов
- Получение максимальных/минимальных индексов элементов в строках/столбцах или всей матрицы
- Преобразование матрицы в одномерный массив и обратно
- Перемещение строк/столбцов
- Возможность исключения строк/столбцов
- Получение транспонированной матрицы
MathM - класс реализующий работу с матрицами. Определен для типов int, double.
Возможности:
- Сложение, вычитание, умножение матриц (в том числе и на число)
- Вычисление определителя методом Гаусса
- Вычисление обратной матрицы
- Получение транспонированной матрицы
- Вычисление ранга матрицы
- Несколько методов для работы с одномерными массивами (поэлементное сложение, умножение, деление массивов etc)
SortM - несколько методов сортировки матрицы.
SizeMatrix - размер матрицы. X - количество строк, Y - количество столбцов.
Position - позиция элемента в матрице. X - номер строки, Y - номер столбца
TypeMatrix - тип матрицы (перечисление) - квадратная, прямоугольная
ConvertM - вспомогательный класс, преобразует Matrix<int> в Matrix<double> и обратно.
Generate - класс, генератор значений матриц. Заполняет матрицы случайными или значениями по-умолчанию. Определен для типов int, double.
Задачи из демо-проекта:
1. Как определить минимальный элемент главной диагонали квадратной матрицы размером 5х5 и номер строки, в котором он находится?
2. Дана матрица А (5х3). Получить одномерный массив, элементы которого равны сумме элементов каждого столбца заданной матрицы"
3. Дана квадратная матрица NхN. Найти произведение суммы элементов исходной матрицы на определитель транспонированной матрицы.
4. Вычислить среднее арифметическое элементов матрицы по строкам."
5. Вычислить произведение элементов матрицы А(рА) и сумму элементов матрицы В(сВ). Вычислить матрицу С=рА*сВ*А*В'.
6. Дана действительная матрица размером n x m упорядочить(переставить) строки матрицы по неубыванию значений наименьших элементов строк."
7. Дана вещественная квадратная матрица n x n. Нужно преобразовать матрицу следующим образом: поэлементно вычесть последнюю строку из всех строк, кроме последней."
8. Дана целочисленная прямоугольная матрица. Определить произведение элементов в тех строках, которые не содержат нулевых элементов."
9. Дана матрица N x M.Записать в другой массив строку, составленную из сумм отрицательных элементов столбцов матрицы."
10. Дана матрица размера 3 x 10. Вывести количество столбцов, элементы которых возрастают.
Решение задачи: «.NET 4.x В прилагаемом демо-проекте решение 10 задач с матрицами»
textual
Листинг программы
/// <summary> /// Вычисление определителя матрицы методом Гаусса (Приводим матрицу к треугольному виду и перемножаем главную диагональ). /// </summary> public static double Determinant(Matrix<double> mA) { if (mA.Size.X != mA.Size.Y) throw new ArgumentException("Вычисление определителя возможно только для квадратных матриц."); Matrix<double> matrix = mA.Clone(); double det = 1; int order = mA.Size.X; for (int i = 0; i < order - 1; i++) { double[] masterRow = matrix.GetRow(i); det *= masterRow[i]; if (det == 0) return 0; for (int t = i + 1; t < order; t++) { double[] slaveRow = matrix.GetRow(t); double[] tmp = MulArrayConst(masterRow, slaveRow[i] / masterRow[i]); double[] source = matrix.GetRow(t); matrix.SetRow(SubArray(source, tmp), t); } } det *= matrix[order - 1, order - 1]; return det; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д