- 締切済み
Lnを含む方程式の解法に関して
Ln(x/A)+x/B=C の方程式のxの解き方を教えていただきたいです。 よろしくお願いいたします。 ランベルトのW関数を使おうとしてもうまくできませんでした。。。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- info22
- ベストアンサー率55% (2225/4034)
#1です。 A#1の補足質問について プログラムのコーディングはカテゴリー違いの気がしますが…。 x=0でw=0でなく |x|≦(誤差上限)でw=xで抜ける。 x≒-1/eで収束が悪く誤差が大きくなるので x=-1/eでw=-1 -1/e<x<-1/e+(誤差の上限)で w=-1+(√(2e))√(x+1/e)…(●)で抜ける。 その他のx>-1/eについては x=w*e^wに対してニュートン法(ニュートン=ラプソン法)で wを求め抜ける。 プログラム中 >While Abs((W - W1) / W) > eps の初期W1が未定義になっていますのでWhile行の前にWの初期値と異なるW1の初期値を与えてください(たとえばW1=0)。 x≧-1/e(w≧-1)では上記の方法でLambertW(x)の計算が出来ますが 0>x>-1/e(w<-1)でも「x=w*e^w」を満たすもうひとつのLambertW(-1,x) 関数の値が存在します。w<-1でもW(-1,x)関数を考えた方がいいかと思います。x=-1/e付近では(●)が適用できます。その他の-1/e<x<1(w<-1)に対してはx=w*e^wにニュートン法を適用するといいですね。
- info22
- ベストアンサー率55% (2225/4034)
AB>0として ランベルトのW関数を使えば x=B*W(Aexp(C)/B) となります。 A,Bの他の場合は xが存在しない、1個存在、2個存在する場合がありますので A,Bについてさらに場合分けをしないと xを得られません。
お礼
早々のご説明ありがとうございます。 他の投稿を参考に以下のマクロを入れたのですが、動作しません。 Function LambertW(x As Double) As Variant If x < -Exp(-1) Then LambertW = "" Exit Function Else If x = 0 Then LambertW = 0 Exit Function End If End If Dim W As Double, W1 As Double, eps As Double, ew As Double eps = 10 ^ (-15) W = 1 While Abs((W - W1) / W) > eps W1 = W ew = Exp(W) W = W - (W * ew - x) / (ew * (W + 1) - (W + 2) * (W * ew - x) / (W + 1) / 2) Wend LambertW = W1 End Function つきましては、ランベルトのW関数の計算方法につきましてもご教授願えませんでしょうか? 度々申し訳ないです。 よろしくお願いいたします。
お礼
お礼遅くなりました。 大変参考になりました。ありがとうございました。 またお世話になることがありましたらどうぞ宜しくお願い致します。 (そんなことがないように精進致します) 本当にありがとうございました。