Приведение матрицы к виду верхней треугольной «Алгоритм Барейса»

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

  1. Актуальность Алгоритма Барейса
  2. Матрицы треугольного вида
  3. Суть Алгоритма Барейса
  4. Исходный код VBA EXCEL
Данные в матрице строго структурированы и несут (сохраняют) причинно следственные связи.


Актуальность Алгоритма Барейса

Как и вся матричная арифметика, алгоритм Барейса совершенствует (упрощает) способ обработки данных, находящихся в матрице.

Приведение матрицы к треугольному виду требуется, прежде всего, для решения систем линейных уравнений, а именно для вычисления определителя матрицы. Ведь самый быстрый способ вычислить определитель — это привести матрицу к треугольному виду (по алгоритму Гаусса), а затем перемножить её диагональные элементы.
О дополнительных преимуществах алгоритма Барейса сказано ниже…



Матрицы треугольного вида

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

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

Матрицы треугольного вида
Рис.        Матрицы треугольного вида. Верхняя треугольная матрица





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


Суть Алгоритма Барейса
Рис.        Суть Алгоритма Барейса. Вложенные циклы

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

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

Поэтому код 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