I'm trying to symbolically solve a system of equations in logarithms (so the estimated coefficients are elasticities), but matlab is tells me an "Explicit solution could not be found." Any ideas why?
syms a1 a2 b1 c1 c2 e1 e2 S1 D1 P1 S2 D2 P2 Pinput;
eq1 = -log(S1) + a1*log(P1) + a2*log(Pinput);
eq2 = -log(S2) + b1*log(P2);
eq3 = -log(D1) + c1*log(P1) + c2*log(P2);
eq4 = -log(D2) + e1*log(P2) + e2*log(P1);
eq5 = -S1 + D1;
eq6 = -S2 + D2;
ans2 = solve(eq1,eq2,eq3,eq4,eq5,eq6,'P1','P2','S1','S2','D1','D2');
[edit] Based on input from Ali, I tried the following:
syms a1 a2 b1 c1 c2 e1 e2 S1 D1 P1 S2 D2 P2 Pinput;
lS1 = log(S1);
lS2 = log(S2);
lD1 = log(D1);
lD2 = log(D2);
lP1 = log(P1);
lP2 = log(P2);
lPinput = log(Pinput);
eq1 = -lS1 + a1*lP1 + a2*lPinput;
eq2 = -lS2 + b1*lP2;
eq3 = -lS1 + c1*lP1 + c2*lP2;
eq4 = -lS2 + e1*lP2 + e2*lP1;
ans2 = solve(eq1,eq2,eq3,eq4,'P1','P2','S1','S2');
I also tried a different solve statement:
ans2 = solve(eq1,eq2,eq3,eq4,'lP1','lP2','lS1','lS2');
but still no luck.
[edit] Turned out to be an issue on one machine alone--the original approach worked fine on another computer.
Well, both options worked for me:
clear all
syms a1 a2 b1 c1 c2 e1 e2 S1 D1 P1 S2 D2 P2 Pinput;
eq1 = -log(S1) + a1*log(P1) + a2*log(Pinput);
eq2 = -log(S2) + b1*log(P2);
eq3 = -log(D1) + c1*log(P1) + c2*log(P2);
eq4 = -log(D2) + e1*log(P2) + e2*log(P1);
eq5 = -S1 + D1;
eq6 = -S2 + D2;
ans2 = solve(eq1,eq2,eq3,eq4,eq5,eq6,'P1','P2','S1','S2','D1','D2');
and I get ans2:
D1: [1x1 sym]
D2: [1x1 sym]
P1: [1x1 sym]
P2: [1x1 sym]
S1: [1x1 sym]
S2: [1x1 sym]
with:
D1=exp((a2*log(Pinput)*(b1*c1 - c1*e1 + c2*e2))/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2))
D2=exp((a2*b1*e2*log(Pinput))/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2))
P1=exp((a2*log(Pinput)*(b1 - e1))/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2))
P2=exp((a2*e2*log(Pinput))/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2))
S1=exp((a2*log(Pinput)*(b1*c1 - c1*e1 + c2*e2))/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2))
S2=exp((a2*b1*e2*log(Pinput))/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2))
For the second option that Ali suggested:
syms lS1 lS2 a1 b1 c1 e1 lP1 lP2 a2 c2 e2 lPinput
eq1 = -lS1 + a1*lP1 + a2*lPinput;
eq2 = -lS2 + b1*lP2;
eq3 = -lS1 + c1*lP1 + c2*lP2;
eq4 = -lS2 + e1*lP2 + e2*lP1;
ans2 = solve(eq1,eq2,eq3,eq4,'lP1','lP2','lS1','lS2');
ans2 =
lP1: [1x1 sym]
lP2: [1x1 sym]
lS1: [1x1 sym]
lS2: [1x1 sym]
ans2.lP1 = (a2*lPinput*(b1 - e1))/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2)
ans2.lP2 = (a2*e2*lPinput)/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2)
ans2.lS1 = (a2*lPinput*(b1*c1 - c1*e1 + c2*e2))/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2)
ans2.lS2 = (a2*b1*e2*lPinput)/(b1*c1 - a1*b1 + a1*e1 - c1*e1 + c2*e2)