Implement variational approach for budget closure with 2 constraints in python

39 views Asked by At

I'm new to Python and am quite helpless with a problem I have to solve:

I have two budget equations, let's say a+b+c+d=Res1 and a+c+e+f=Res2, now every term has a specific standard deviation a_std, b_std,... and I want to distribute the budget residuals Res1 and Res2 onto the individual terms relative to their uncertainty (see eqution below), to get a_new+b_new+c_new+d_new=0 and a_new+c_new+e_new+f_new=0

Regarding only 1 budget equation I'm able to solve the problem and get the terms a_new, b_new, c_new and d_new. But how can I add the second constraint to also get e_new and f_new?

e.g. I calculate a_new = a + (a_std^2/(a_std+b_std+c_std))*Res1 , however this is only dependent of the first equation, but I want a to be modified that way to also satisfy the second equation..

I appreciate any help/any ideas on how to approach this problem.

Thanks in advance, Sue

Edit: What I have so far:

def var_close(a,a_std,b,b_std,c,c_std,d,d_std,e,e_std,f,f_std,g,g_std):
   x=[a,b,c,d,e]
   Res1=np.sum([x])
   std_ges1=a_std*a_std+b_std*b_std+c_std*c_std+d_std*d_std+e_std*e_std
   y=[a,c,f,g]
   Res2=np.sum([y])
   std_ges2=a_std*a_std+c_std*c_std+f_std*f_std+g_std*g_std

   a_new=a-((a_std*a_std)/std_ges1)*Res1
   b_new=b-((b_std*b_std)/std_ges1)*Res1
   c_new=c-((c_std*c_std)/std_ges1)*Res1
   d_new=d-((d_std*d_std)/std_ges1)*Res1
   e_new=e-((e_std*e_std)/std_ges1)*Res1

   a_new2=a-((a_std*a_std)/std_ges2)*Res2
   c_new2=c-((c_std*c_std)/std_ges2)*Res2
   f_new=f-((f_std*f_std)/std_ges2)*Res2
   g_new=g-((g_std*g_std)/std_ges2)*Res2

   return a_new,b_new,c_new,d_new,e_new,a_new2,c_new2,f_new,g_new

But like this e.g. a_new and a_new2 are slightly different, but I want them to be equal and the other terms modified correspondng to their uncertainty..

0

There are 0 answers