Подсчет обратной матрицы

Автор работы: Пользователь скрыл имя, 15 Ноября 2011 в 13:10, лабораторная работа

Описание работы

Постановка задачи
Дана произвольная n×n матрица:
Требуется определить, отличен ли от нуля определитель данной матрицы, и, если он отличен от нуля найти, найти матрицу .

Файлы: 1 файл

МО. Отчет №1.docx

— 82.47 Кб (Скачать файл)

Учреждение  образования

«Белорусский  государственный университет

информатики и радиоэлектроники» 

Кафедра информатики 
 
 
 
 
 
 
 
 

Лабораторная  работа №1

«Подсчет обратной матрицы»

по курсу  методы оптимизации 
 
 
 
 

                  Выполнила:

                    студентка гр. 852001

                       Харлан А.В.

                  Проверила:

                       проф. Костюкова О.И. 
                   
                   

 
 

Минск

2011

Постановка  задачи

Дана произвольная n×n матрица:

.

 Требуется определить, отличен ли от нуля определитель данной матрицы, и, если он отличен от нуля найти, найти матрицу .

 

Текст программы

class ColumnVector

{

       private double[] columnVector;

        public int N {get; set;}

        public ColumnVector(int n)

        {

             columnVector = new double[n]; N = n;

        }

       public double this[int index]

        {

            get { return columnVector[index]; }

            set { columnVector[index] = value; }

        }

}

class RowVector

{

       public int N { get; set; }

       private double[] rowVector;

       public RowVector(int n)

        {

            rowVector = new double[n]; N = n;

        }

        public double this[int index]

        {

            get { return rowVector[index]; }

            set { rowVector[index] = value; }

        }

        //Вектор-стока на матрицу

      public RowVector Multiplication(SquarteMatrix matrix)

      {

            RowVector res = new RowVector(matrix.N);

            for (int i = 0; i < N; i++)

            {

                for (int j = 0; j < N; j++)

                    res[i] += rowVector[j]*matrix[j, i];

            }

            return res;

      }

        //вектор-столбец на вектор-строку

        public double Multiplication(ColumnVector colVector)

        {

            double res = 0;

            for (int i = 0; i < N; i++)

                  res += colVector[i] * rowVector[i];

            return res;

        }

    }

class SquarteMatrix

    {

        public double[,] matrix;

        public int N { get; set; }

        public SquarteMatrix(int n)

        {

            N = n;  matrix = new double[n,n];

        }

        public SquarteMatrix(int n, double[,] new_matrix)

            {

                  N = n; matrix = new_matrix;

            }

        public double this[int index1, int index2]

        {

            get { return matrix[index1, index2]; }

            set { matrix[index1, index2] = value; }

        }

        //Матрица на матрицу

        public SquarteMatrix Multiplication(SquarteMatrix second_matrix)

        {

            double sum = 0;

            SquarteMatrix res = new SquarteMatrix(N, new double[N, N]);

            for (int i = 0; i < N; i++)

            {

                for (int j = 0; j < N; j++)

                {

                    sum = 0;

                    for (int r = 0; r < N; r++)

                        sum += matrix[i, r] * second_matrix.matrix[r, j];

                    res.matrix[i, j] = sum;

                }

            }

            return res;

        }

        //матрица на вектор-столбец

        public ColumnVector Multiplication(ColumnVector colVector)

        {

            ColumnVector res = new ColumnVector(N);

            for (int i = 0; i < N; i++)

            {

                for (int j = 0; j < N; j++)

                    res[i] += matrix[i, j] * colVector[j];

            }

            return res;

        }

    }

class GetReverseMatrix

    {

         const double eps = 0.000000001;

         public int N { get; set;}

            private int K;

            private SquarteMatrix C, B_i;

            private ColumnVector C_j;

         public GetReverseMatrix(int n, int k, SquarteMatrix b_i, ColumnVector c_j)

            {

                  N = n; K = k; C = new SquarteMatrix(N); B_i = new SquarteMatrix(N);

               B_i = b_i; C_j = new ColumnVector(N); C_j = c_j;

            }

            public SquarteMatrix Find()

            {

                  SquarteMatrix res = new SquarteMatrix(N);

              RowVector rowVector = new RowVector(N);

              rowVector[K - 1] = 1;

              rowVector = rowVector.Multiplication(B_i);

              double alpha = rowVector.Multiplication(C_j);

Информация о работе Подсчет обратной матрицы