Дана квадратная матрица размерности n*n вычислить ее определитель - C#
Формулировка задачи:
Дана квадратная матрица размерности n*n вычислить ее определитель.
Нужна помощь в написании кода, за ранее спасибо
Решение задачи: «Дана квадратная матрица размерности n*n вычислить ее определитель»
textual
Листинг программы
- using System;
- using System.Linq;
- using System.Text;
- namespace ConsoleApplication
- {
- class Program
- {
- public class Matrix
- {
- public float[,] matrix = null;
- public int CountColumn { get; private set; }
- public int CountRow { get; private set; }
- public Matrix(int x = 1, int y = 1)
- {
- matrix = new float[x, y];
- CountColumn = y;
- CountRow = x;
- }
- public float this[int x, int y]
- {
- get { return matrix[x, y]; }
- set { matrix[x, y] = value; }
- }
- public float[] GetRow(int row)
- {
- if (row >= CountRow) throw new IndexOutOfRangeException("Индекс строки не принадлежит массиву.");
- float[] ret = new float[CountColumn];
- for (int i = 0; i < CountColumn; i++)
- ret[i] = matrix[row, i];
- return ret;
- }
- public void SetRow(float[] values, int row)
- {
- if (row >= CountRow) throw new IndexOutOfRangeException("Индекс строки не принадлежит массиву.");
- for (int i = 0; i < (CountColumn > values.Length ? values.Length : CountColumn); i++)
- matrix[row, i] = values[i];
- }
- public float Determinant()
- {
- if (CountColumn != CountRow) throw new ArgumentException("Вычисление определителя возможно только для квадратных матриц.");
- Matrix _matrix = new Matrix(CountRow, CountColumn);
- _matrix.matrix = (float[,])this.matrix.Clone();
- float det = 1;
- int order = CountRow;
- for (int i = 0; i < order - 1; i++)
- {
- float[] masterRow = _matrix.GetRow(i);
- det *= masterRow[i];
- if (det == 0) return 0;
- for (int t = i + 1; t < order; t++)
- {
- float[] slaveRow = _matrix.GetRow(t);
- float[] tmp = MulArrayConst(masterRow, slaveRow[i] / masterRow[i]);
- float[] source = _matrix.GetRow(t);
- _matrix.SetRow(SubArray(source, tmp), t);
- }
- }
- det *= _matrix[order - 1, order - 1];
- return det;
- }
- public override string ToString()
- {
- StringBuilder ret = new StringBuilder();
- if (matrix == null) return ret.ToString();
- for (int i = 0; i < CountRow; i++)
- {
- for (int t = 0; t < CountColumn; t++)
- {
- ret.Append(matrix[i, t]);
- ret.Append("\t");
- }
- ret.Append("\n");
- }
- return ret.ToString();
- }
- float[] SubArray(float[] A, float[] B)
- {
- float[] ret = (float[])A.Clone();
- for (int i = 0; i < (A.Length > B.Length ? A.Length : B.Length); i++)
- ret[i] -= B[i];
- return ret;
- }
- float[] MulArrayConst(float[] array, float number)
- {
- float[] ret = (float[])array.Clone();
- for (int i = 0; i < ret.Length; i++)
- ret[i] *= number;
- return ret;
- }
- void generator(int x, int y, int startGen)
- {
- matrix = new float[x, y];
- Random rnd = new Random(startGen);
- for (int i = 0; i < x * y; i++)
- {
- int X = i / y;
- int Y = i - y * X;
- matrix[X, Y] = rnd.Next(-10, 10);
- }
- }
- }
- static void Main()
- {
- Matrix m1 = new Matrix(3, 3);
- Console.WriteLine(m1.Determinant());
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д