Как обновить прекондиционер в scipy.optimize.newton_krylov - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь решить пример нелинейной задачи и хочу установить предварительный обработчик для решателя newton_krylov из scipy.optimize.

Я установил предварительный обработчик с помощью LinearOperator, используя spilu.Матрица изменяется с независимой переменной, т. Е. Матрица M (x) и M (x) должны обновляться как F (x), остаток, в каждой нелинейной итерации.

Кажется,Параметр «inner_M» в newton_krylov вызывается только один раз LinearOperator в начале процесса.Как я могу установить параметр предобусловливателя "inner_M" для выполнения обновления M (x) в каждой итерации ньютона?

В частности, я не могу понять описание в https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.newton_krylov.html для установки "inner_M":

"... Если в предварительном кондиционере есть метод с именем« update », он будет вызываться как update (x, f) после каждого нелинейного шага, где x указывает текущую точку, а f - текущее значение функции. "

Большое спасибо.

1 Ответ

0 голосов
/ 08 февраля 2019

Следуя примеру в doc / scipy / ... все еще слишком медленное предварительное условие , установите M.update для функции, которая копирует x в глобальное значение, здесь xglo.Или создайте класс с self.xupdate.

    xglo = None

    def get_preconditioner():
        ...
        J1_ilu = spilu(J1)  # better spsolve ?

        M = LinearOperator(shape=(nx*ny, nx*ny), matvec=J1_ilu.solve)

        #.......................................................................
        def xglobal( x, F ):
            """ newton_krylov calls this at each iteration: xglo = x """
            global xglo
            xglo = x.copy()
            print( "update: x %s  F %s " % (nu.asum(x), nu.asum(F)) )  # test
                # nu.asum: array summary, size min av max

        M.update = xglobal

        return M

(я не знаю, действительно ли это хорошая идея - зависит от вашего прекондиционера.
scicomp.stack может быть лучшеспросить, см., например, когда есть ньютон-крылов-не-подходящий-решатель .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...