Элементы массива в Java инициализируются к значениям по умолчанию при создании. Для чисел это означает, что они инициализируются к 0 для ссылок, они являются пустыми, и для булевских переменных они - ложь.
Для заполнения массива чем-то еще можно использовать Arrays.fill () или как часть объявления
int[] a = new int[] {0, 0, 0, 0};
нет никаких ярлыков в Java для заполнения массивов арифметическим рядом как в некоторых языках сценариев.
Матрица перестановок pm
содержит информацию, которая вам понадобится для определения смены знака: вам нужно умножить свой определитель на определитель матрицы перестановок.
Просматривая исходный файл lu.hpp
, мы находим функцию под названием swap_rows
, которая сообщает, как применить матрицу перестановок к матрице. Его легко изменить, чтобы получить определитель матрицы перестановки (знак перестановки), учитывая, что каждый фактический обмен дает коэффициент -1:
template <typename size_type, typename A>
int determinant(const permutation_matrix<size_type,A>& pm)
{
int pm_sign=1;
size_type size=pm.size();
for (size_type i = 0; i < size; ++i)
if (i != pm(i))
pm_sign* = -1; // swap_rows would swap a pair of rows here, so we change sign
return pm_sign;
}
Другой альтернативой было бы использование lu_factorize
и lu_substitute
методы, которые не выполняют никакого поворота (обратитесь к источнику, но в основном отбрасывают pm
в вызовах lu_factorize
и lu_substitute
). Это изменение заставит ваш детерминантный расчет работать как есть. Однако будьте осторожны: удаление поворота сделает алгоритм менее стабильным в числовом отношении.