pvlib-python icon indicating copy to clipboard operation
pvlib-python copied to clipboard

Allow user to set tol and maxiter for singlediode newton method

Open toddkarin opened this issue 3 years ago • 3 comments

The first few lines of pvlib.singlediode set tol and maxiter for all the solvers using the newton method:

from scipy.optimize import brentq, newton
from scipy.special import lambertw

# set keyword arguments for all uses of newton in this module
newton = partial(newton, tol=1e-6, maxiter=100, fprime2=None)

However, I would like to change tol and maxiter for my application. It would be great if these could be added instead as keyword arguments to the various functions so they can be adjusted by the user. Using a variety of singlediode model params, I have found that by setting tol=0.1 and maxiter=10, I can realize a 1.4x speedup in the singeldiode.bishop88_mpp algorithm while incurring a maximum error of 0.007038% and a mean absolute error of 0.000042% in calculated V_mp.

toddkarin avatar Jun 17 '21 20:06 toddkarin

At what level would they be exposed? At the pvlib.singlediode.bishop88_xxx functions or at a higher level, e.g., pvlib.pvsystem.singlediode?

cwhanse avatar Jun 17 '21 21:06 cwhanse

At the level of bishop88_xxx would be good enough for my purposes.

toddkarin avatar Jun 17 '21 23:06 toddkarin

I support this as long as the interface is common for both the newton and brentq options.

cwhanse avatar Jun 18 '21 16:06 cwhanse