Инверсия матрицы или Холецкий?

Я разрабатываю алгоритм, который решает Ax = b, где известны A и b.

Есть два способа сделать это x= A-1 b или с помощью Холецкого. Я знаю, что матрица всегда будет квадратной и положительно определенной, хотя det(A) может быть равен нулю. В тех редких случаях я могу просто игнорировать это. Но с точки зрения вычислений и эффективности, не слишком ли неэффективно создание обратной матрицы?


person user1876942    schedule 31.10.2013    source источник
comment
Этот вопрос может быть лучше на math.stackexchange.com   -  person Roger Rowland    schedule 31.10.2013
comment
Холески будет работать только в том случае, если A также симметричен - если это так, обязательно используйте холески.   -  person Drew Hall    schedule 31.10.2013
comment
Но зачем идти на Холески? А всегда симметричен. Меня интересует не математика, а эффективность компьютера, позволяющая делать одно лучше другого.   -  person user1876942    schedule 31.10.2013
comment
Полная инверсия матрицы более подвержена ошибкам округления. Лучшим решением, особенно если у вас есть несколько векторов RHS, является разложение LU.   -  person duffymo    schedule 31.10.2013
comment
Просто исправление, но есть гораздо больше способов решить Ax=b, чем только два упомянутых выше метода. Смотрите мой ответ ниже.   -  person DashControl    schedule 01.11.2013
comment
Если он положительно определен, то det(A) никогда не может быть нулевым. Может быть, вы имели в виду положительно полуопределенное   -  person texasflood    schedule 15.07.2016


Ответы (2)


В общем, вы всегда хотите использовать решатель; фактический решатель должен работать примерно так же быстро, как умножение на инверсию. Мало того, что вычисление обратной матрицы неэффективно по сравнению с выполнением декомпозиции, использование обратной матрицы имеет проблемы с точностью, которых позволяет избежать подход декомпозиции/решателя.

Если у вас симметричная матрица, разумным выбором будет разложение Холецкого. Тесно связанное разложение LDL имеет сравнимую точность, но при этом не требует квадратных корней.

Если ваша матрица несимметрична, вы не можете использовать разложение Холецкого или LDL — используйте разложение LU метод вместо этого.

person comingstorm    schedule 31.10.2013

Для больших матриц да, обратное очень неэффективно. Однако специальные свойства, такие как нижнетреугольная матрица, значительно упрощают вычисление обратной.

В численном анализе наиболее типичным решением для Ax=b является LU-факторизация A(LUx=b), затем решение Ly = b для y и Ux = y для x.

Для более стабильного подхода рассмотрите возможность использования разложения QR, где Q обладает особым свойством Q ^ T * Q = I, поэтому Rx = Q ^ Tb, где R является верхним треугольником (только одно обратное решение, в отличие от прямого и обратного решения с ЛУ).

Другие специальные свойства, такие как симметричность матрицы (Холецкого) или полосчатость (Гаусса), делают одни решатели лучше других.

Как всегда, помните о с плавающей запятой ошибки в расчетах.

Могу ли я добавить, что итерационные решатели также являются популярным способом решения систем. Метод сопряженного градиента является наиболее часто используемым и хорошо работает для разреженных матриц. Якоби и Гаусс-Зейдель хороши для матриц, которые являются диагонально доминирующими и разреженными.

person DashControl    schedule 31.10.2013
comment
+1 за комментарий QR. Я склонен сначала думать о LU, потому что он чаще используется для решения уравнений конечных элементов. Хороший немного об одном обратном решении. - person duffymo; 01.11.2013