Вечный "?" Создание обратной матрицы. Нахождение детерминанта - 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;
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы