Я пытаюсь вычислить определитель обратной матрицы. Обратная матрица существует. Однако, когда я пытаюсь вычислить определитель обратного, он дает мне значение Inf в Matlab. В чем причина этого?
Проблемы с вычислением определителя матрицы
Ответы (1)
Краткий ответ: учитывая A = inv(B)
, det(A)==Inf
может иметь два объяснения:
- переполнение при численном вычислении определителя,
- один или несколько бесконечных элементов в
A
.
В первом случае ваша матрица плохо масштабируется, так что det(B)
может переполняться, а det(A)
может переполняться. Помните, что det(a*B) == a^N * det(B)
, где a
— скаляр, а B
— матрица N
, умноженная на N
.
Во втором случае (т. е. nnz(A==inf)>0
) матрица B
может быть «сингулярной для рабочей точности».
PS:
Матрица почти сингулярна, если она имеет большое число обусловленности. (Малый определитель не имеет ничего общего с сингулярностью, поскольку на величину самого определителя влияет масштабирование.)
Матрица является сингулярной по отношению к рабочей точности, если она имеет нулевую точку опоры в исключении Гаусса: при вычислении обратной матрицы Matlab должен вычислить 1/0
, который возвращает Inf
.
На самом деле в Matlab исключения переполнения и нулевого деления не перехватываются, так что, согласно IEEE 754, распространяется значение Inf
.