Scipy оптимизирует метод секущей Ньютона

Scipy optimise.newton имеет начальный размер шага, жестко запрограммированный как 1e-4. Как лучше всего использовать эту функцию с другим размером шага (в идеале, указанным в качестве параметра)?

# https://github.com/scipy/scipy/blob/v0.19.0/scipy/optimize/zeros.py#L160

else:
    # Secant method
    p0 = x0
    if x0 >= 0:
        p1 = x0*(1 + 1e-4) + 1e-4

person James Kang    schedule 27.07.2017    source источник
comment
Если вы уверены, что это полезная функция (например, очень-очень уверены), вы можете открыть запрос функции и попросить добавить начальный размер шага к аргументам. А еще лучше, вы можете исправить это самостоятельно, заменив 1e-4 переменной типа initial_step (или что-то в этом роде), добавить ее в установленную версию scipy и сказать людям scipy, что вы это сделали, и они объединят ее в распределенной версии, если увидят fit(не особо разбираюсь в мерж-реквестах на github, извините за неточность)   -  person gionni    schedule 27.07.2017


Ответы (1)


Начальный размер шага не 1e-4, а abs(x0)*1e-4 + 1e-4. Например, x0 = 1000 приведет к начальному шагу 0,1001.

Если цель состоит в том, чтобы иметь определенный начальный размер шага h, этого можно достичь с помощью линейного изменения переменной, x = x0 + 1e4*h*t, где t — новая переменная. С точки зрения t отправной точкой является 0. Таким образом, метод Ньютона сделает шаг размером 1e-4, что с точки зрения x преобразуется в h.

Пример:

root = newton(lambda t: func(x0 + 1e4*h*t), 0) * 1e4 * h  + x0

где func — исходная функция. Это возвращает корень с точки зрения исходной переменной x.

person Community    schedule 27.07.2017