KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Does anyone know a scipy/numpy module which will allow to fit exponential decay to data? Google search returned a few blog posts, for example - http://exnumerus.blogspot.com/2010/04/how-to-fit-exponential-decay-example-in.html , but that solution requires y-offset to be pre-specified, which is not always possible EDIT: curve_fit works, but it can fail quite miserably with no initial guess for parameters, and that is sometimes needed. The code I'm working with is #!/usr/bin/env python import numpy as np import scipy as sp import pylab as pl from scipy.optimize.minpack import curve_fit x = np.array([ 50., 110., 170., 230., 290., 350., 410., 470., 530., 590.]) y = np.array([ 3173., 2391., 1726., 1388., 1057., 786., 598., 443., 339., 263.]) smoothx = np.linspace(x[0], x[-1], 20) guess_a, guess_b, guess_c = 4000, -0.005, 100 guess = [guess_a, guess_b, guess_c] exp_decay = lambda x, A, t, y0: A * np.exp(x * t) + y0 params, cov = curve_fit(exp_decay, x, y, p0=guess) A, t, y0 = params print "A = %s\nt = %s\ny0 = %s\n" % (A, t, y0) pl.clf() best_fit = lambda x: A * np.exp(t * x) + y0 pl.plot(x, y, 'b.') pl.plot(smoothx, best_fit(smoothx), 'r-') pl.show() which works, but if we remove "p0=guess", it fails miserably.
Tags (comma-separated)
Save Edits
Cancel