1

我试图以符号方式求解对数方程组(因此估计的系数是弹性​​),但 matlab 告诉我“找不到显式解决方案”。任何想法为什么?

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');

[编辑] 根据 Ali 的输入,我尝试了以下方法:

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');

我还尝试了不同的解决语句:

ans2 = solve(eq1,eq2,eq3,eq4,'lP1','lP2','lS1','lS2');

但仍然没有运气。

[编辑] 原来在一台机器上只是一个问题——原来的方法在另一台电脑上运行良好。

4

2 回答 2

3

好吧,这两种选择都对我有用:

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');

我得到了ans2:

D1: [1x1 sym]
D2: [1x1 sym]
P1: [1x1 sym]
P2: [1x1 sym]
S1: [1x1 sym]
S2: [1x1 sym]

和:

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))

对于阿里建议的第二个选项:

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');

答案2 =

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)
于 2013-01-09T06:34:47.537 回答
2

通常,您无法以符号方式求解方程。典型的技术应用没有解析解,即无法符号求解。

话虽如此,我相信你可以象征性地解决你的方程(我没有 Matlab,我从未使用过它,下面的代码只是伪代码):

通过从 eq5 和 eq6 替换 D1:=S1 和 D2:=S2 你得到

eq1 = -log(S1) + a1*log(P1) + a2*log(Pinput);
eq2 = -log(S2) + b1*log(P2);
eq3 = -log(S1) + c1*log(P1) + c2*log(P2);
eq4 = -log(S2) + e1*log(P2) + e2*log(P1);

为当前变量的对数引入新变量:newvariable=log(variable).

然后你有一个很好的线性系统,解决它应该没问题。

于 2013-01-08T20:30:40.523 回答