Проблемы с вычислением определителя матрицы

Я пытаюсь вычислить определитель обратной матрицы. Обратная матрица существует. Однако, когда я пытаюсь вычислить определитель обратного, он дает мне значение Inf в Matlab. В чем причина этого?


person rajan sthapit    schedule 01.05.2012    source источник
comment
Возможно, ваша матрица очень близка к единственной.   -  person Oliver Charlesworth    schedule 02.05.2012
comment
Что вы имеете в виду очень близко к единственному числу   -  person rajan sthapit    schedule 02.05.2012
comment
Если оно очень близко к сингулярному, то определитель будет очень близок к нулю, поэтому определитель обратного числа будет очень большим. Если вычисление ограничено числовой точностью, оно может оказаться бесконечным.   -  person Oliver Charlesworth    schedule 02.05.2012
comment
Это не единственное число, потому что существует обратное   -  person rajan sthapit    schedule 02.05.2012
comment
Я понимаю это. Но это может быть достаточно близко, чтобы преобладала числовая точность.   -  person Oliver Charlesworth    schedule 02.05.2012
comment
Я только что понял, что мои диагональные элементы очень малы. Вот почему, когда я вычисляю определитель, он почти равен 0, и Matlab показывает его как 0. Диагональные элементы находятся в диапазоне 0,025, а моя матрица имеет размер 50 000x50 000.   -  person rajan sthapit    schedule 02.05.2012
comment
В таком случае проблема решена! Теперь вы должны закрыть этот вопрос.   -  person Oliver Charlesworth    schedule 02.05.2012
comment
Собственно у меня диагональ матрицы размером 331х331. Из них около 171 имеют значение в диапазоне 0,0020, а остальные также имеют более высокое значение от 1,24, 6,35 до 500. Разве он не должен иметь определитель?   -  person rajan sthapit    schedule 02.05.2012
comment
Я думаю, что гугление матричных тождеств может помочь вам здесь. Определитель диагональной матрицы равен произведению элементов по диагонали. Определитель обратного является обратным этому. Если вы беспокоитесь о числовых неточностях, вы можете масштабировать свою матрицу с коэффициентом. Я согласен с закрытием вопроса на этом этапе.   -  person ephsmith    schedule 10.05.2012


Ответы (1)


Краткий ответ: учитывая A = inv(B), det(A)==Inf может иметь два объяснения:

  1. переполнение при численном вычислении определителя,
  2. один или несколько бесконечных элементов в 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.

person Stefano M    schedule 04.07.2012