2016-08-05 5 views
3

における複素数方程式を解きます。 私は誰もが私にウルフラムアルファは、それが呼び出すランバートW機能(の面で解決策を得ることができますCは複素数であるので、予想通りZも複雑である場合、私は、</p> <p>このフォームIは、Zについて解きたい</p> <pre><code>exp(az) = 1 + cz </code></pre> <p>と方程式を取得していますR

+0

関連 - http://stackoverflow.com/questions/14646542/using-r-to-solve-equations - これは本当にRの強さではありません。 – thelatemail

答えて

5

を助けることができると思いますR.

に複素数を含む方程式を解く方法を見つけ出すことはできませんProductLog関数):とりわけ

enter image description here

emdbookパッケージ()はランバートW関数の実装を有しています。 (この作業を行うために、私は、バグを修正しなければならなかったので、あなたは、CRANの実装を使用することはできませんその代わり、GitHubのから最新バージョンをインストールします。library(devtools); install_github("bbolker/emdbook")を...

library(emdbook) 
sfun <- function(a,c) { 
    w <- lambertW(-a/c*exp(-a/c)) 
    -(c*w+a)/(a*c) 
} 

a <- 2+1i; c <- 1+1i 
(z <- sfun(a,c)) 
## [1] -0.1686391-0.2337278i 

チェックの答え:

(exp(a*z)-(1+c*z)) 
## [1] 0+5.551115e-17i 

これは予想数値の許容範囲内にゼロである...

+0

Thxたくさんのベン;本当に良い解決策です。私はあなたのソリューションをテストしており、すべてOKで、ルートzを見つける手続きをしています。しかし、私はこれらの2つの行の式を導き出すことはできませんでした: 'w < - lambertW(-a/c * exp(-a/c)) - (c * w + a)/(a * c ) '。この派生物をソリューションに追加してください。また、私は上記の手順を適用し、 '>(z < - sfun(a、c))> [1] -0.224767 + 0.4937739i>(exp(a * z) - (1 + c * z)) [1] 5.55112e-17 + 1.665335e-16i'。これも許容範囲内です。まったく同じ結果を得るためにset.seed()が必要ですか? –

+0

今、私はhttps://en.wikipedia.org/wiki/Lambert_W_function#Example_1から導出を得ました!私が上にそれを加えてもそれは良いでしょう。 –

+1

丸め誤差は、プラットフォーム(オペレーティングシステム、コンパイラなど)によって異なる場合があります。 –

3

ベンBolkerの溶液中の中間段階:

enter image description here

関連する問題

 関連する問題