Библиотека повышения, как получить детерминант от lu_factorize ()?

Элементы массива в Java инициализируются к значениям по умолчанию при создании. Для чисел это означает, что они инициализируются к 0 для ссылок, они являются пустыми, и для булевских переменных они - ложь.

Для заполнения массива чем-то еще можно использовать Arrays.fill () или как часть объявления

int[] a = new int[] {0, 0, 0, 0};

нет никаких ярлыков в Java для заполнения массивов арифметическим рядом как в некоторых языках сценариев.

5
задан banDedo 14 September 2009 в 04:30
поделиться

1 ответ

Матрица перестановок 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 ). Это изменение заставит ваш детерминантный расчет работать как есть. Однако будьте осторожны: удаление поворота сделает алгоритм менее стабильным в числовом отношении.

3
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: