Я пытаюсь найти параметры уравнения Рамберга-Осгуда, используя curve_fit. Так как я новичок в pyhton, я создал свои собственные данные из этого уравнения, чтобы упростить мою проблему.
Возможно, метод подбора кривой имеет проблемы с размером параметров. Но ни с границами, ни с начальными значениями curve_fit не получил разумного результата.
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# --- Ramberg-Osgood-Function
def RamOsg(sigm, E, sigm0, a, m):
return sigm/E + a*sigm0/E*(sigm/sigm0)**m
# --- Data simulated with given parameters
E = 70000
sigm0 = 260
a = 0.43
m = 10
sigm = np.linspace(1, 350, 15) #Y-Data
eta = RamOsg(sigm, E, sigm0, a, m) #X-Data
plt.figure(0)
plt.plot(eta, sigm, 'x')
# --- Curve_Fit
#bounds=[[69990, 255, 0.1, 5],[70010, 265, 1, 15]]
init_values = np.array([70011, 260, 0.1, 10])
popt, pcov = curve_fit(RamOsg, eta, sigm, p0=init_values)
print popt, pcov
Вывод popt - это точно мои начальные значения, независимо от того, какие начальные значения я выбрал, и pcov не сходится:
[7.00000000e + 04 2.60000000e + 02 1.00000000e-01 1.00000000e + 01]
[[inf inf inf inf] [inf inf inf inf] [inf inf inf inf inf] [inf inf inf inf inf]]