アプリ版:「スタンプのみでお礼する」機能のリリースについて

Ln(x/A)+x/B=C の方程式のxの解き方を教えていただきたいです。
よろしくお願いいたします。
ランベルトのW関数を使おうとしてもうまくできませんでした。。。

A 回答 (2件)

#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にニュートン法を適用するといいですね。
    • good
    • 0
この回答へのお礼

お礼遅くなりました。
大変参考になりました。ありがとうございました。
またお世話になることがありましたらどうぞ宜しくお願い致します。
(そんなことがないように精進致します)
本当にありがとうございました。

お礼日時:2009/01/09 00:30

AB>0として


ランベルトのW関数を使えば
x=B*W(Aexp(C)/B)
となります。
A,Bの他の場合は
xが存在しない、1個存在、2個存在する場合がありますので
A,Bについてさらに場合分けをしないと
xを得られません。
    • good
    • 0
この回答へのお礼

早々のご説明ありがとうございます。
他の投稿を参考に以下のマクロを入れたのですが、動作しません。

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関数の計算方法につきましてもご教授願えませんでしょうか?
度々申し訳ないです。
よろしくお願いいたします。

お礼日時:2009/01/06 23:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!