Curve_fitting data (I'm close to the params values, but curve_fit says optimal parameters not found)
<p>I'm trying to fit the data in <a href="http://www.filedropper.com/aluminio33920umaire" rel="nofollow">this file</a> with <code>curve_fit</code> from scipy in Python. The file contains data points of temperature vs time in celsius and milliseconds. I convert them to kelvin and seconds:</p>

<pre><code>thefile = open("aluminio_33920um_aire.txt", "r")
data = np.loadtxt(thefile, delimiter='\t', skiprows=1)
Temp = data[:, 0] + 273.15  #kelvin
Time = data[:, 1]*1e-3  #secs
thefile.close()
</code></pre>

<p>I define a couple of functions to be fitted:</p>

<pre><code>def newton(t, a, b, tau):
    return a + b * np.exp(-t/tau)

def dulong(t, ta, dift, f, n):
    return ta + (dift + (n-1)*t/f)**(1/(1-n))
</code></pre>

<p>newton's fitting works perfectly. But dulong does not. I have plotted several values for the parameters of duolong to see which values draw a line that more or less fits the data, and I found the values given here:</p>

<pre><code>poptd, pcovd = curve_fit(dulong, Time, Temp, p0=[295, 0.155, 6000, 1.38], sigma=[1]*len(Temp), absolute_sigma=True)
</code></pre>

<p>However, passing these values <code>p0</code> to curve_fit does not help since I get the error</p>

<pre><code>RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 1000.
</code></pre>

<p>Don't know how to improve since the initial guess of my parameters is a really good guess. I appreciate your help.</p>

<p>Since i can't post comments yet, i will instead post another answer as reply to your comment: The big error from the third parameter is likely due to the algorithm not being allowed to assign it a value above 10000. Adjust your bounds and it should work.</p>

python scipy curve-fitting