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

[編集] アリからの入力に基づいて、次のことを試しました。

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

アリが提案した2番目のオプションについて:

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)
于 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 に答える