scipy root возвращает догадку, если функция не определена - PullRequest
0 голосов
/ 26 октября 2018

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

Я изменяю параметры и в любое время принимаю корни, но если параметр делает мою функцию неопределенной, то scipy.optimize.root() возвращает значение догадки вместо ошибки или 'nan'.

Как получить root, только если определена функция (без необходимости сначала определять пространство, в котором определена моя функция)?

Я попытался создать простой пример для облегчения понимания:

import numpy as np
from scipy.optimize import root

global k
def F(X):
    np.seterr(all='raise')
    try:
       f1=np.log(4.80-(X+k))
       return f1
    except:
       return np.nan

guess = 10
ks=[i/2.0 for i in range(10)]
for k in ks: 
    root(F, guess)

1 Ответ

0 голосов
/ 26 октября 2018

Вы должны обернуть блок try-exc вокруг корневой функции;это также, где вы хотите проверить на нан.Далее вы должны поймать конкретное исключение, которое вызывает scipy / root, а не каждое исключение.

import numpy as np
from scipy.optimize import root

def myroot(F, guess):
    np.seterr(all='raise')
    try:
        res = root(F, guess)
    except FloatingPointError as exp:
        return guess
    if np.isnan(res):
        return guess
    return res

global k
def F(X):
    return np.log(4.80-(X+k))

ks=[i/2.0 for i in range(10)]
guess = 10
for k in ks:
    print(myroot(F, guess))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...