В UMFPACK, как часто нам нужно проводить символьную и числовую факторизацию? - PullRequest
4 голосов
/ 01 марта 2012

У меня есть система Ax = b, где B - константа, но A постоянно меняется на небольшие суммы в каждой итерации. Я использую UMFPACK 5, чтобы снова решить эту линейную систему, как только A изменится. Я могу сделать это двумя способами:

  1. Вычислить символьную и числовую факторизацию матрицы A ONLY в начале и использовать этот числовой объект для решения Ax = b на каждой итерации (конечно, в разреженном представлении матрицы Ax изменяется при изменении A Ап и Ай остаются такими же).
  2. Вычислить символьную и числовую факторизацию матрицы A IN EACH итерации (т. Е. Новый числовой объект при изменении A) и использовать этот новый числовой объект для решения Ax = b.

Какой из вышеперечисленных способов является правильным? Я получаю совершенно разные ответы (как и ожидалось) на две вышеуказанные процедуры. Любая помощь или комментарий приветствуется. Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

Символическая факторизация зависит только от разреженности (Ap и Ai в обозначении UMFPACK). Числовая факторизация зависит от фактических значений (Ax). Поэтому вам нужно вычислить символьную факторизацию только один раз, но вам нужно пересчитать числовую факторизацию в каждой факторизации.

Документация UMFPACK показывает, что это небольшое упрощение реальности. Фактически, UMFPACK использует фактические значения для символьной факторизации, но различает только «маленькие» и «большие» значения. Так что, если матрица А изменяется лишь незначительно, это не имеет значения. Если значения (Ax) изменяются настолько, что ранее «маленькое» значение становится большим или наоборот, тогда символическая факторизация может измениться. Однако если вы используете старую символьную факторизацию с новым Ax, вы все равно получите правильную числовую факторизацию и правильное решение, хотя UMFPACK (предположительно) более эффективен, если вы используете новую символьную факторизацию.

Итак, хотите ли вы пересчитать символьную факторизацию, зависит от того, сколько времени потребуется для вычисления символьной факторизации, и насколько быстрее числовая факторизация, если вы используете символьную факторизацию с правильным Ax. Я полагаю, что вы не хотите пересчитывать символьную факторизацию, если вы изменяете только пару значений, но вам нужно провести эталонный тест.

0 голосов
/ 01 марта 2012

Второй способ верен: если вы вычисляете числовую факторизацию, вы должны повторять ее в каждой итерации.

...