Python Jupyter Notebook scipy

148 Views Asked by At

For a long time I was able to add data and fit, then plot the curve with data. But recently I get this:

   ---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-6-6f645a2744bc> in <module>
      1 poland = prepare_data(europe_data, 'Poland')
----> 2 plot_all(poland, max_y=400000)
      3 poland

~/Pulpit/library.py in plot_all(country, max_x, max_y)
     43 def plot_all(country, max_x = 1000, max_y = 500000):
     44 
---> 45     parameters_logistic = scipy.optimize.curve_fit(func_logistic, country['n'],  country['all'])[0]
     46     parameters_expo = scipy.optimize.curve_fit(func_expo,  country['n'],  country['all'])[0]
     47 

/usr/local/lib64/python3.6/site-packages/scipy/optimize/minpack.py in curve_fit(f, xdata, ydata, p0, sigma, absolute_sigma, check_finite, bounds, method, jac, **kwargs)
    787         cost = np.sum(infodict['fvec'] ** 2)
    788         if ier not in [1, 2, 3, 4]:
--> 789             raise RuntimeError("Optimal parameters not found: " + errmsg)
    790     else:
    791         # Rename maxfev (leastsq) to max_nfev (least_squares), if specified.

RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 800.

Here are all Python Jupyter Notebook files: https://files.fm/u/zj7cc6ne#sign_up

How to solve this?

1

There are 1 best solutions below

0
On BEST ANSWER

scipy.optimize.curve_fit takes a keyword argument p0.

Initial guess for the parameters (length N). If None, then the initial values will all be 1 (if the number of parameters for the function can be determined using introspection, otherwise a ValueError is raised).

If the defaults 1 are too far of from the result the algorithm may not converge. Try to put some values that make sense for your problem.