2013-12-20 5 views
1

Я пытаюсь решить линейную систему Ax=b где A is 3x3 симметричный положительно определенный.Для 3х3 только симметричной и положительно определенной линейной системы Холецкий все еще быстрее, чем Домхолдер?

Хотя это низкий масштаб, мне придется повторять его для разных A s миллионов раз. Поэтому эффективность по-прежнему важна.

Существует множество решателей для линейных систем (C++, через Eigen). Я лично предпочитаю: HouseholderQr().solve(), и llt().solve(), ldlt().solve().

Я знаю, что когда n очень велик, решатели, основанные на разложении Холески, быстрее, чем у Домахолдеров. Но для моего случая, когда n всего 3, как я могу сравнить их относительную эффективность? Есть ли какая-либо формула для точного анализа float operation?

спасибо

ответ

0

Да, Холески все равно будет быстрее. Это будет около n^3/3 флопа. Единственной причиной использования QR было бы, если бы ваша матрица была очень плохо подготовлена.

Если вам необходимо решить эти системы, то миллион раз и эффективность важна, я бы рекомендовал напрямую обращаться к LAPACK. Вам нужна функция DPOSV.

http://www.netlib.org/lapack/lug/node26.html#1272

http://www.netlib.org/clapack/what/double/dposv.c

+0

LAPACK очень медленно для небольших матриц, к тому же, если его только 3x3, то все должно быть раскатывают в Эйгене Я надеюсь – Lindon

+0

Я не уверен, я согласен, что LAPACK очень медленно для малые матрицы. Мне было бы интересно увидеть контрольный показатель между ним и Эйген. Поставщики также реализуют свои собственные версии функций LAPACK, таких как DPOSV. Было бы интересно проверить версию INTEL MKL LAPACK. – codehippo