scipy.optimize.curve_fit повышает RuntimeWarning - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь подогнать кривую, изменив два параметра (e и A). Целевая кривая строится путем присвоения n0=0.395, но ее фактическое значение составляет 0.0395. Поэтому я надеюсь достичь той же кривой, изменив e и A.

import numpy as np
from scipy.optimize import curve_fit

def func(x,e,A):
    return A*(e+x)**0.0395 

strain = np.linspace(0,15,3000) # variable
e = 0.773
A = 386.5
n0 = 0.395
y = A*(e+strain)**n0 # target to minimize
popt, pcov = curve_fit(func, strain, y)

Однако, я постоянно получаю это предупреждение после запуска кода:

RuntimeWarning: invalid value encountered in power
  return A*(e+x)**0.0395

Мне было интересно, почему это происходит и как улучшить код?

1 Ответ

0 голосов
/ 16 ноября 2018

Я нашел решение, которое мне не нравится, но оно устраняет предупреждение.Я обнаружил, что, как это ни странно для меня, "e" делалось отрицательным в функции curve_fit ().Я добавил «кирпичную стену» внутри функции, чтобы остановить это, но это не нужно.Мой код:

import numpy as np
from scipy.optimize import curve_fit

def func(x,e,A):
    if e < 0.0: # curve_fit() hits a "brick wall" if e is negative
        return 1.0E10 # large value gives large error, the "brick wall"
    return A*(e+x)**0.0395 

strain = np.linspace(0,0.1,3) # variable
e = 0.773
A = 386.5
n0 = 0.395
y = A*(e+strain)**n0 # target to minimize
popt, pcov = curve_fit(func, strain, y)
...