Определитель треугольной матрицы


  1. Треугольные матрицы
  2. Вычисление определителя треугольной матрицы
  3. Алгоритм Барейса
  4. Исходный код VBA EXCEL

Матрица - двумерный массив. Это особый тип организации данных, который выступает как единое и неразрывное целое. Данные в матрице строго структурированы и несут (сохраняют) причинно следственные связи.


Треугольные матрицы

Название говорит само за себя.

Если все элементы матрицы ниже главной диагонали равны 0, то это верхняя треугольная матрица. Если выше главной диагонали все 0, то это нижняя треугольная матрица.

Треугольные матрицы
Рис.1        Треугольные матрицы





Вычисление определителя треугольной матрицы

По-моему, с первого взгляда видно, что вычислить определитель треугольной матрицы (т.е. матрицы, которая содержит почти половину элементов равных нулю) значительно проще.

Вычисление определителя треугольной матрицы
Рис.2        Вычисление определителя треугольной матрицы

Это и есть метод Гаусса, гласящий, что определитель треугольной матрицы равен произведению элементов главной диагонали. А о дополнительных преимуществах алгоритма Барейса читайте ниже…



Алгоритм Барейса


Алгоритм Барейса
Рис.3        Алгоритм Барейса

Изучив преимущества и недостатки имеющихся алгоритмов (Гаусса и Барейса), я остановился на алгоритме Барейса, так как:

  • если матрица состоит из целых чисел, алгоритм Барейса позволяет привести её к треугольному виду с использованием только целочисленной арифметики;
  • определитель исходной матрицы равен правому нижнему элементу матрицы, полученной в результате алгоритма Барейса, т.е. не нужно выполнять перемножение элементов главной диагонали, как после алгоритма Гаусса;
  • алгоритм Барейса так же, как и алгоритм Гаусса, может быть улучшен путём добавления перестановки строк, но в нашей задаче это излишне;

Поэтому код VBA приведения будет следующим:
For j = 1 To n - 1
   jj = mR.Cells(j, j) 'определяем первый множитель

   If j = 1 Then 'определяем знаменатель
     znm = 1
   Else
     znm = mR.Cells(j - 1, j - 1)
     If znm = 0 Then Exit Function
   End If

  For i = j + 1 To n
     ij = mR.Cells(i, j) 'определяем второй множитель

    For k = j To n
     mR.Cells(i, k) = (jj * mR.Cells(i, k) - ij * mR.Cells(j, k)) / znm
    Next k

  Next i
Next j

Где mR as Range – переменная модуля, ссылающаяся на выделенная область.

j- индексы строк, а i- индексы столбцов выделенной области.
Ячейка, обозначенная как а-1,-1 лежит вне области выделения (т.е. выше и левее ячейки а0,0 ) и ей в начальный период обязательно присваивается 1. В своей функции вместо а-1,-1 я использую переменную znm (от знаменатель) и базовое значение счетчиков 1 вместо 0. Суть алгоритма это не меняет. При пошаговом выполнении программы прекрасно прослеживается постепенное приведение матрицы к верхнему треугольному виду.



Исходный код VBA EXCEL

Для работы с матрицами в Microsoft EXCEL существует три функции листа Excel.
Это:

  1. МОПРЕД(массив) - возвращает определитель матрицы (матрица хранится в массиве);
  2. МОБР(массив) - возвращает обратную матрицу для матрицы, хранящейся в массиве;
  3. МУМНОЖ(массив1;массив2) - возвращает произведение матриц (матрицы хранятся в массивах). Результатом является массив с таким же числом строк, как массив1 и с таким же числом столбцов, как массив2;

Первую из этих функций буду использовать для проверки результата.

Кроме того:

  • в макросе проводится проверка на соответствие выделенной области, и если размеры не совпадают (а матрица должна быть квадратной), то выдается сообщение и работа макроса завершается;
  • в ячейку AJ2 вводится формула для вычисления определителя (на основе функции МОПРЕД) выделенной области; (просто для проверки)
  • в завершающем сообщении предлагается очистить лист «Результат» по желанию пользователя;

Тестирование - это наиболее важный этап в жизненном цикле программного продукта. Поэтому не верьте картинкам, фильмам и сказкам…

Только личное тестирование во всех наиболее сложных сочетаниях данных - должно убедить Вас в доброкачественности алгоритма и исходного кода!

скачать xlsm-файл для тестирования






Другие примеры на языке «Visual Basic for application (VBA)»

Другие примеры на тему «Матрицы и операции вычислений с ними»




Если у Вас остались вопросы, то задать их Вы можете, нажав на эту кнопочку ...




Если на этой странице не нашлось того, что Вы так искали...

         Не расстраивайтесь, не все потеряно... Смело щелкайте...
исходный код на заказ. orenstudent.ru Автоматизация документов MS Office. orenstudent.ru исходный код на заказ. orenstudent.ru Помогите найти и устранить ошибку в исходном коде программы. orenstudent.ru Skype-консультирование по программированию
Скайп-консультации

Акция !!!
исходный код комментарии цена минимальная


Не попадайтесь на удочку мошенников-кидал...
Сайт помощи студентам по программированию и информатике

Program code