プロが教える店舗&オフィスのセキュリティ対策術

lnの方程式で

A=xln(x)+xB
(エー=エック掛けるエルエヌエックスぷらすエックス掛けるビー)

のxの解が知りたいのですが、記憶が正しいならば

これは解けない方程式だった気がします。

しかし、この解が欲しいので、どなたか教えていただけませんか。

よろしくお願いします。

A 回答 (3件)

まだ締切られていないようなので補足します。


ANo.2の式(1)と式(2)が同じかどうかですが、計算したら同じでした。

【A = x*ln(x)*B*x の解(2通り)】
x = e^[W(A*e^B) - B] --- (1)
x = A/W(A*e^B) --- (2)
ただし-1/e≦A*e^B → -e^{-(B+1)}≦A
W(x)はLambertのW関数[1]で、x=W(x)*e^W(x) の解。

【(1)=(2)の証明】
xを使うと混乱するので、sを使ってW関数の定義を書くと
s = W(s)*e^W(s)
s=A*e^B とおくと、A*e^B = W(A*e^B)*e^W(A*e^B)
両辺をe^B (≠0)で割ると、A = W(A*e^B)*e^{W(A*e^B)-B}
A=0のときA*e^B = 0となるので、A≠0のとき両辺をW(A*e^B) で割ると、A/W(A*e^B) = e^{W(A*e^B)-B}。したがって式(1)=式(2)が成り立つ。A=0のときは、式(1)からx = 1が解となるが、式(2)では0/0となってしまうので、式(1)のほうがAがゼロかどうか気にしなくてもいいという点で使いやすいと思います。

[1] LambertのW関数 http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%B3% …

【LambertのW関数の数値計算法】
LambertのW関数の参考URLに出ている漸化式を使えば、-1/e≦xに対する関数値 W(x)を計算することができる。参考まで、ExcelVBAを使って計算する方法を示します。

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

Excelの「ツール→マクロ→Visual Basic Editor→挿入→標準モジュール」で出たコード画面に上のプログラムを貼り付け、Excelシート上で「=LambertW()」で呼び出せば計算できます。この関数を使えば、元の方程式の解は、= exp(LambertW(A*exp(B))-B)で計算できます。
    • good
    • 1

inaraです。



(解法1)
xがlnの中にあるのでx>0を考えて、x = exp(t-B)とおきます(-Bをつけているのがミソ)。
すると、与式は
A = x*ln(x) - B*x = exp(t-B)*(t-B) + B*exp(t-B) = t*exp(t-B)
となります。始めに x=exp(t-B) としたのは、 B*exp(t-B) の項を消すためです。計算を続けると、
= t*exp(t)*exp(-B) → A*exp(B) = t*exp(t)
となりますから、W関数を使うと、t = W{A*exp(B)}
したがって、x = exp(t-B) = exp[W{A*exp(B)} - B] --- (1)

(解法2)
これはストレートな方法です。
A = x*ln(x) + B*x の両辺を x で割ると
A/x = ln(x) + B = ln{x*exp(B)} → x*exp(B) = exp(A/x) → x = exp(A/x)*exp(-B)
ここまではkitakazetotaiyouさんと同じですが、その後が計算違いです。
両辺にA*exp(B)/xをかけると、A*exp(B) = A/x* exp(A/x)
W関数を使うと、A/x = W{A*exp(B)} → x = A/[W{A*exp(B)}] --- (2)

(1)と(2)は形が違いますが、私はW関数の専門家でないので、(1)=(2)が成り立つのかよく分かりません。
    • good
    • 0

初等関数では解けませんが、解は x = exp(LambertW(A*exp(B))-B) です。


LambertW()は "The Lambert W function" といって、次の方程式の解です。
LambertW(x) * exp(LambertW(x)) = x
数値解を求めるには、Excelのソルバーを使ったほうが良いと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
教えていただいたとおりランベルトのW関数で与式を変形したところ、
inara様の解と違う式が出てきました。
どのような変形をしたらなるのでしょうか。
途中計算を教えていただけませんか。
また、W関数の中はどう計算すればいいのですか?
wikiペディアをにある練習問題を見ると
2^t=5t
をW関数で示すと
t=W{-ln(2)/5}/{-ln(2)}
とあり、W{-ln(2)/5}の計算値が分かりません。
計算方法を教えていただけませんか。

すいませんが上の2点を教えていただけないでしょうか。
よろしくお願いします。
______________________________
以下に自分の式変形を示します。

A=xln(x)+xB

両辺をxで割って
A/x=ln(x)+B

移項して
ln(x)=A/x-B

lnをexpであらわすと
x=exp(A/x-B)

expを分けると
x=exp(A/x)exp(-B)

両辺をexp(A/x)で割ると
xexp(x/A)=exp(-B)

両辺をAで割ると
(x/A)exp(x/A)=(1/A)exp(-B)

W関数を用いると
x/A=W{(1/A)exp(-B)}

両辺にAをかけて
x=(A)W{(1/A)exp(-B)}

となりました。

お礼日時:2007/02/06 11:56

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