- 締切済み
連立指数方程式の解法について
実験の結果でパラメータx1,x2の変化に伴うy1,y2の変化を指数関数で近似し以下のような方程式を立てました A1*exp(-x1/t1)+A2*exp(-x2/t2)=y1 A3*exp(-x1/t3)+A4*exp(-x2/t4)=y2 この時y1,y2が与えられた時のx1,x2を求めたいのですがどのようにして求めればいいかわかりません。二つの変数x1,x2に対して式が2本あるのでx1,x2を求めることが出来そうな気がするのですが・・・ 私が試した解法として 二つの式のx2の項を右辺に移項した後両辺の自然対数を取ってX1=…の形にした後X1を消去しx2のみの式にした状態で t1[ln(A1)-ln(y1-A2*exp(-x2/t2))]-t3[ln(A3)-ln(y2-A4*exp(-x2/t4)]=0 となり、この式をエクセルのゴールシークを用いて(上の式をx2=…の形にするのは煩雑すぎてやっていません)x2を出すことはできたのですがそれを先ほどのx1=…のそれぞれの式に代入すると2つの式で異なった値が出てきてうまく答えが出せていないみたいです。 この方程式からx1,x2を求めることは可能なのでしょうか? また可能な場合どういった方法を用いて解くことができるでしょうか? よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
試行しながら書き散らしたので、一応のまとめを。 >A1*exp(-x1/t1)+A2*exp(-x2/t2)=y1 >A3*exp(-x1/t3)+A4*exp(-x2/t4)=y2 ・未知数の置換。 exp(-x1/t1) = X1, exp(-x2/t2) = X2 、さらに b1 = t1/t3, b1 = t2/t4 として、 [Q] A1*X1 + A2*X2 = y1 A3*(X1^b1) + A4*(X2^b2) = y2 の非負解を求める。 ・非負解の存否条件は割愛。 (線形 b1=b2=1 の場合から、概略類推可) ・プログラム化し易そうなアルゴが反復法。 (#5 の交互代入法(?)。スプレッドシートの一画面内に軽く収まる。グラフ表示で存否条件のチェックも一目瞭然]
問題 [Q] の一部訂正。 ------------------- [Q} 2*X1 + 3*X2 = 8 …(L) 2*(X1^1.5) + 1*(X2^0.7) = 5 …(N) の非負解 {X1, X2} を求めよ。 非負解の存否問題はスキップ、解法手順のみ。 ・X1 = 0 からスタートし、(L) から {X10, X20} = {0, 2.6667} ・X20 = 2.6667 を (N) へ代入して、 {X11, X20} = {1.3142, 2.6667} ・X11 = 1.3142 (L) へ代入して、 {X11, X21} = {1.3142, 1.7905} ......... この交互代入法 (?) で、{X1, X2} = {1.4680, 1.6880} へ収束。
続編。検討のため変形例 [Q] をひとつ。 [Q} 2*X1 + 3*X2 = 8 …(L) 2*(X1^2) + 1*(X2^0.7) = 5 …(N) の非負解 {X1, X2} を求めよ。 非負解の存否問題はスキップ、解法手順のみ。 ・X1 = 0 からスタートし、(L) から {X10, X20} = {0, 2.6667} ・X20 = 2.67 を (N) へ代入して、 {X11, X20} = {1.3142, 2.6667} ・X11 = 1.3142 (L) へ代入して、 {X11, X21} = {1.3142, 1.7905} ......... この交互代入法 (?) で、{X1, X2} = {1.4680, 1.6880} へ収束。
#2 です。 プログラム組む余力無いので、スプレッドシートで簡単にトライしてみました。 ・使いものになりません。(アッタリ前か…) ↓ >一次近似のペア、 > A1*{1-(x1/t1)} + A2*{1-(x2/t2)} = y1 > A3*{1-(x1/t3)} + A4*{1-(x2/t4)} = y2 ・こちらの改善解は、初期値 {x10, x20} をよほどボケなければ使えます。ただし、一部訂正。 ↓ A1*exp(-x10/t1) + A2*exp(-x20/t2) = y1 + d1 A3*exp(-x10/t3) + A4*exp(-x20/t4) = y2 + d2 {x10, y20} → {x10+dx1, x20+dx2} として、左辺微分から、 dx1*(-1/t1)*A1*exp(-x10/t1) + dx2*(-1/t2)*A2*exp(-x20/t2) = -d1 dx1*(-1/t3)*A3*exp(-x10/t3) + dx2*(-1/t4)*A4*exp(-x20/t4) = -d2 から、逐次近似補正分 {dx1, dx2} を算出。
>A1*exp(-x1/t1)+A2*exp(-x2/t2)=y1 >A3*exp(-x1/t3)+A4*exp(-x2/t4)=y2 一次近似のペア、 A1*{1-(x1/t1)} + A2*{1-(x2/t2)} = y1 A3*{1-(x1/t3)} + A4*{1-(x2/t4)} = y2 の解 {x10, x20} からスタートする逐次解法でいけませんかね。 もとの式へ。 A1*exp(-x10/t1) + A2*exp(-x20/t2) = y1 + d1 A3*exp(-x10/t3) + A4*exp(-x20/t4) = y2 + d2 {x10, y20} → {x10+dx1, x20+dx2} として微分、 dx1*(-x10/t1)*A1*exp(-x10/t1) + dx2*(-x20/t2)*A2*exp(-x20/t2) = -d1 dx1*(-x10/t3)*A2*exp(-x10/t3) + dx2*(-x20/t4)*A3*exp(-x20/t4) = -d2 から、一次補正分 {dx1, dx2} を算出。
- stomachman
- ベストアンサー率57% (1014/1775)
X1 = ln(-x1/t1) X2 = ln(-x2/t2) p1 = t1/t3 p2 = t2/t4 とおくと A1 X1 + A2 X2 = y1 A3 X1^p1 + A4 X2^p2 = y2 なので、X1を消去すれば A3((y1-A2 X2)/A1)^p1 + A4 X2^p2 = y2 つまり、 f(z) = A3((y1-A2 z)/A1)^p1 + A4 z^p2 - y2 とおくと、 f(z)=0 という方程式の解がX2である。 1変数実方程式の数値解法には、いろいろやり方があります。たとえば二分法だと、もし解に近いz1, z2であって、f(z1)>0, f(z2)<0となるz1, z2が分かっていれば、 c= (z1+z2)/2 if f(c)> 0 then z1 := c else z2 := c を繰り返すことによって、z1, z2が解に収束します。 あるいはニュートン法を使うなら、解の近似値x1から出発して、 z1:= z1-f'(z1)/f(z1) を繰り返す。(f'はfのzによる微分です。)セカント法では、f'(z1)を(f(z1+Δz)-f(z1))/Δzで代用。(ここにΔzは小さい正の値。excelのゴールシークってのはこれやってるんじゃないかなと思います。) ただしいずれにせよ、解に近い近似値から出発しないと、収束するかどうかは分かりません。