I've found a way to replace the calculation of the maximum power point in singlediode._lambertw with a more analytic approach. The speedup is not quite 10x, and would make pvsystem.singlediode(...method='lambertw') and pvsystem.singlediode(...method='newton') comparable.
I'm not sure if the maths are new, they might be. In any case, it would not be difficult to document on pvpmc.sandia.gov, if not in a conference paper.
We could remove the golden mean search, or retain it. I lean towards retaining it. The new way would use scipy.optimize.newton which should converge with quite high confidence, but, not guaranteed for some pathological case. golden mean search would always converge.
I've found a way to replace the calculation of the maximum power point in
singlediode._lambertw
with a more analytic approach. The speedup is not quite 10x, and would makepvsystem.singlediode(...method='lambertw')
andpvsystem.singlediode(...method='newton')
comparable.I'm not sure if the maths are new, they might be. In any case, it would not be difficult to document on pvpmc.sandia.gov, if not in a conference paper.
We could remove the golden mean search, or retain it. I lean towards retaining it. The new way would use
scipy.optimize.newton
which should converge with quite high confidence, but, not guaranteed for some pathological case. golden mean search would always converge.gist with new method.