How Do I Optimize And Find The Coefficients For Two Equations Simultaneously In Python 2.7?
Solution 1:
You can try minimising the L_2 norm (i.e. least squares fitting) in a 2 dimensional space for your y-values:
from scipy.optimize import minimize
def func(params):
a1, a2, a3, a4, a5, a6, a7 = params
y1 = a1 + a2 *T/2+ a3 *T**2/3+ a4 *T**3/4+ a5 *T**4/5+ a6/T
y2 = a1*np.log(T)+ a2*T+ a3 *T**2/2+ a4 *T**3/4+ a5 *T**4/4+ a7
return np.sum((y1 - ydata_1)**2+(y2 - ydata_2)**2)T= np.linspace(300,1000,20)
ydata_1 = np.array([0.02139265,0.40022353,0.70653103,0.95896469,1.17025634,1.34944655,1.50316659,1.63641239,1.75303086,1.85603601,1.94782051,2.03030092,2.10501971,2.17321829,2.23589026,2.29382086,2.34761661,2.39772787,2.44446625,2.48801814])
ydata_2 = np.array([15.73868267,16.14232408,16.50633034,16.83724622,17.14016153,17.41914701,17.67752993,17.91807535,18.14310926,18.35460465,18.55424316,18.74346017,18.92347836,19.09533317,19.25989235,19.41787118,19.56984452,19.71625632,19.85742738,19.99356154])# choose reasonable values for your 7 parameters here,# i.e. close to the "right" answer, this may take a few tries
first_guess =[a1_0, a2_0, a3_0, a4_0, a5_0, a6_0, a7_0]# here we run the minimisation
res = minimize(func, first_guess)# this is an array of your best fit values for a1-a7
best_fit = res.x
However, it seems that @Stelios is right in that you will have a hard time getting a good fit with your particular model.
Solution 2:
(extended comment)
a) curve_fit
is used to fit a single function based on a single dataset. In your case, you have two functions to fit based on two datasets. This requires in principle setting up an optimization problem from scratch, i.e., define a single objective function (with or without constraints). The objective function could, for example, be the sum of the squared residual errors of both fits. You would then use an optimization solver such as scipy.optimimize.minimize
to find the optimal variables.
b) Your model (fitting functions) will probably introduce numerical difficulties in the optimization. For example, variables a5
and a6
for y1
are factors for T**4
and 1/T
respectively, which, for T=10**3
correspond to values of 10**12
and 10**-3
. This is a huge scale difference, close to the hardware precision, which suggests to me that you should reconsider your model.
Post a Comment for "How Do I Optimize And Find The Coefficients For Two Equations Simultaneously In Python 2.7?"