Определяющее значение для очень большой матрицы

У меня очень большая квадратная матрица порядка 100000, и я хочу знать, является ли значение детерминанта нулевым или нет для этой матрицы.

Какой может быть самый быстрый способ узнать это?

Я должен реализовать это в C ++

1

Решение

Предполагая, что вы пытаетесь определить, является ли матрица неособой, вы можете посмотреть здесь:

https://math.stackexchange.com/questions/595/what-is-the-most-efficient-way-to-determine-if-a-matrix-is-invertible

Как уже упоминалось в комментариях, лучше всего использовать какую-нибудь библиотеку BLAS, которая сделает это за вас, такую ​​как Boost::uBLAS,

1

Другие решения

Обычно матрицы такого размера чрезвычайно редки. Используйте алгоритмы переупорядочения строк и столбцов, чтобы сконцентрировать записи рядом с диагональю, а затем используйте QR-разложение или LU-разложение. Произведение диагональных входов второго фактора является — до знака в случае QR — определяющим фактором. Это может все еще быть слишком плохо обусловленным, лучший результат для ранга получен, выполняя разложение по единственному значению. Однако СВД дороже.

1

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

0

Насколько мне известно, вашему приложению не нужно вычислять определитель, но ранга матрицы достаточно, чтобы проверить, имеет ли система уравнений нетривиальное решение:

Ранг Матрицы

0
По вопросам рекламы [email protected]