I am currently using "scipy.optimize.curve_fit"
In the equation (piecewise) I fit with, " theta " is calculated by one of the params (" D ") first, then the choosing of equations is dependent on " theta " (therefore, dependent on " D "). However, it seems that scipy input the params as a list or something, so it does not choose the right equation for each " D " individually. Instead, it asks me to use "theta.any()" or "theta.all()" which is not what I want.
Is there any module that can do what I want?
Many thanks,
Christopher
import numpy as np from scipy.optimize import curve_fit def MahonOldham(t,D:'m^2/s',c:'mM'): n=1 F=96485 #A s / mol pi=3.14 a=12.5*10**-6 # m D*=10**-10 theta=D*t/a**2 if theta <=1.281: #HERE..: factor=1/(np.sqrt(pi*theta))+1+np sqrt(theta/(4*pi))-3*theta/25+(3*theta**(3/2))/226 I=n*pi*F*c*D*a*factor #nA else factor=4/pi+8/np sqrt(pi**5*theta)+25*theta**(-3/2)/2792-theta**(-5/2)/3880-theta**(-7/2)/4500 I=n*pi*F*c*D*a*factor #nA return I*10**9
This is the module that you want, you just need to adapt to it's API. The function curve_fit
passes to your function arrays for D
and c
rather than single values, so you need to vectorize MahonOldham
(and, please, rename to mahon_oldham
, PEP8).
In particular replace if
statement by np.where
:
I = np.where( theta <= 1.281, 1/(np.sqrt..., # first case 4/pi+8/np(..., # second case )
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.