2013-06-20 2 views
2

Я использую LAPACK в c-коде, который позволяет мне инвертировать матрицу. точнее, я использую dgetrf_, затем dgetri_, чтобы сделать инверсию.Является ли Lapack проверять, является ли матрица обратимой, прежде чем она попытается ее инвертировать.

Но поскольку я имею дело с большими матрицами, и поскольку я не знаю, будут ли матрицы обратимы или нет, я теряю много времени, чтобы инвертировать необратимую матрицу ... Есть ли способ , используя LAPACK, чтобы проверить это?

ответ

3

См. this link (несмотря на то, что это пара лет) относительно отказа dgetrf + dgetri от сингулярной матрицы. Он также предлагает способ проверки «обратимости» рассматриваемой матрицы: оценка номера условия (функция dgecon).

Номер условия может помочь, поскольку он является свойством самой матрицы и, следовательно, не связан с точностью вашего алгоритма и/или ошибкой округления на ПК. Чем больше условное число, тем ближе к сингулярности ваша матрица, поэтому вы можете по существу установить (переменную) верхнюю границу вашего условного числа. См. Таблицы внизу this page, чтобы увидеть потенциальный порядок вызова функций, основанный на типе используемых матриц.

+0

Я думаю, вы хотели написать dgecon – PinkFloyd

+0

thx вот что я искал! – PinkFloyd

+0

Да, я это сделал, отредактировал. :) –