У меня очень большая квадратная матрица порядка 100000, и я хочу знать, является ли значение детерминанта нулевым или нет для этой матрицы.
Какой может быть самый быстрый способ узнать это?
Я должен реализовать это в C ++
Предполагая, что вы пытаетесь определить, является ли матрица неособой, вы можете посмотреть здесь:
Как уже упоминалось в комментариях, лучше всего использовать какую-нибудь библиотеку BLAS, которая сделает это за вас, такую как Boost::uBLAS
,
Обычно матрицы такого размера чрезвычайно редки. Используйте алгоритмы переупорядочения строк и столбцов, чтобы сконцентрировать записи рядом с диагональю, а затем используйте QR-разложение или LU-разложение. Произведение диагональных входов второго фактора является — до знака в случае QR — определяющим фактором. Это может все еще быть слишком плохо обусловленным, лучший результат для ранга получен, выполняя разложение по единственному значению. Однако СВД дороже.
Существует свойство, что если любые две строки равны или одна строка является константой, кратной другой строке, мы можем сказать, что определитель этой матрицы равен нулю. Это применимо и к столбцам.
Насколько мне известно, вашему приложению не нужно вычислять определитель, но ранга матрицы достаточно, чтобы проверить, имеет ли система уравнений нетривиальное решение: