Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

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

Энциклопедичный YouTube

  • 1/3
    Просмотров:
    8 128
    1 857
    206 104
  • 2_4. LU-разложение
  • Линейная алгебра Практика 4 LU-разложение
  • LU Decomposition - Shortcut Method

Субтитры

Алгоритм LUP-разложения

Пусть , , . На практике как правило вместо матрицы перестановок P используют вектор перестановок получаемый из вектора путём перестановки элементов соответствующих номерам строк переставляемых в матрице P. Например, если

то так как матрица P получена путём перестановки первой и второй строки. Вычисление LUP-разложения ведётся в несколько шагов. Пусть матрица C = A. На каждом i-м шаге сначала производится поиск опорного (ведущего) элемента — максимального по модулю элемента среди элементов i-го столбца, находящихся не выше i-й строки, после чего строка с опорным элементом меняется местами с i-й строкой. Одновременно производится такой же обмен в матрице P. При этом, если матрица невырождена, то опорный элемент гарантированно будет отличен от нуля. После этого все элементы текущего i-го столбца, находящиеся ниже i-й строки, делятся на опорный. Далее из всех элементов находящихся ниже i-й строки и i-го столбца (то есть таких что j>i и k>i) вычитается произведение . После этого счётчик i увеличивается на единицу и процесс повторяется пока i<n где n — размерность исходной матрицы. После того как все шаги будут выполнены матрица C будет представлять собой следующую сумму:

где E — единичная матрица.

В алгоритме используется три вложенных линейных цикла так что общую сложность алгоритма можно оценить как O(n³).

Реализация алгоритма на языке С++

Ниже представлен программный код приведённого выше алгоритма на языке С++. Здесь Matrix — некоторый контейнер, поддерживающий операцию индексирования. Обратите внимание, что отсчёт ведётся с нуля, а не с единицы.

void LUP(const Matrix &A, Matrix &C, Matrix &P) {
    //n - размерность исходной матрицы
    const int n = A.Rows();

    C = A;

    //загружаем в матрицу P единичную матрицу
    P = IdentityMatrix();

    for( int i = 0; i < n; i++ ) {
        //поиск опорного элемента
        double pivotValue = 0;
        int pivot = -1;
        for( int row = i; row < n; row++ ) {
            if( fabs(C[ row ][ i ]) > pivotValue ) {
                pivotValue = fabs(C[ row ][ i ]);
                pivot = row;
            }
        }
        if( pivotValue != 0 ) {
           //меняем местами i-ю строку и строку с опорным элементом
           P.SwapRows(pivot, i);
           C.SwapRows(pivot, i);
           for( int j = i+1; j < n; j++ ) {
               C[ j ][ i ] /= C[ i ][ i ];
               for( int k = i+1; k < n; k++ ) 
                   C[ j ][ k ] -= C[ j ][ i ] * C[ i ][ k ];
           }
        }
    }
}

//теперь матрица C = L + U - E

Литература

Эта страница в последний раз была отредактирована 22 февраля 2018 в 18:49.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).