平方スーパールート関数にはどのような近似手法がありますか?


17

逆関数、つまり平方根(ssrt)関数の近似を実装する必要があります。たとえば、は、意味します。べき級数を使用したより単純なアプローチとは対照的に、自分のオプションが何であるかを理解するのと同じくらい、特定の精度/ビット深度には興味がありません。xxssrt(2)1.561.561.562

Wolfram Alphaは、ランバートW関数(つまり、)の観点からすてきな記号解を与えます。ウィキペディアは同じ式と同等のます。計算上の情報の合理的な量があるということを考えると [1] [2]、のすべてが実装するために必要な技術的にすることを何か要件のさまざまなを。 [3] [4]の近似について詳細に掘り下げた本を少なくとも2つ知っているので、その方向から最適化する余地が十分にあります。ln(x)/W(ln(x))eW(ln(x))W(x)ln(x)

ただし、2つの質問があります。

  1. この関数に固有の近似手法はどこでも公開されていますか?
  2. 参照を少し簡単に検索できるようにする「スクエアスーパールート」以外の別の名前で使用されますか?

ウィキペディア/グーグルは、特別なケースとしてを含むより一般的な「テトレーション」関数専用のリファレンスをいくつかましたが、それらのほとんどは一般的なケースの調査/定義にているようです。ssrt(x)

-

  1. コーレス、R。Gonnet、G .; ヘア、D。ジェフリー、D .; クヌース、ドナルド(1996)、「ランバートW関数について」 http://www.apmaths.uwo.ca/~djeffrey/Offprints/W-adv-cm.pdf
  2. 数学関数のデジタルライブラリhttp://dlmf.nist.gov/4.13
  3. Crenshaw、Jack W.(2000)、リアルタイムプログラミング用の数学ツールキット。
  4. Hart、John F.(1978)、コンピューター近似。
  5. Chapeau-Blondeau、F.およびMonir、A.(2002)。ランバートW関数の数値評価と指数1/2の一般化ガウスノイズの生成への応用。IEEE Transactions on Signal Processing 50、2160-2165。http://www.istia.univ-angers.fr/~chapeau/papers/lambertw.pdf
  6. ミネロ、ポール。高速ランバートWを近似http://www.machinedlearnings.com/2011/07/fast-approximate-lambert-w.html

-

更新

過去数日間さらに調査を行った後、私が望んでいた「クレンショースタイル」扱いはまだ見つかりませんでしたが、ここに文書化する価値のある新しいリファレンス。 3ページ目に、「高速近似」というタイトルのセクションがあり、ノイズ生成のコンテキストでの近似について詳しく説明しています。興味深いことに、[指数1/2のガウスノイズ](論文)の確率密度は、信号クリッピングの検出に関するこの質問に対するKellenjbの回答のヒストグラムと著しく似ています。[3]ssrt(x)[5]W(x)

さらに、コメント rwongによって提供されたリンクは、実際に実装するための素晴らしいリソースであり、記述された実装を含むfastapproxと呼ばれる著者のBSDライセンスプロジェクトにリンクします。[6]W(x)



2
コメントフィールドは詳細なディスカッションを目的としていないため、Metaでこれについて尋ねました。ここでこれらの質問をどのように処理するかを提案してください:数値分析に関する質問はトピックですか?

@datageist-メタの質問からの最初の結論は、この数値分析を使用してDSPデータを処理したい場合、それはトピックであるということでした。そうでない場合は、そうではありません。これはDSPとどのように関係しますか?
ケビンフェルメール

2
@Kevinオーディオエフェクトの開発のコンテキストで登場しました。
データガイスト

1
ランバート関数のルーチンを作成する必要があるときはいつでも、私は通常、この論文で与えられた近似値を使用してから、Newton-Raphson、Halley、またはその他の反復法で磨き上げます。を反転するためにこのアプローチを適応させることができますxx

回答:


6

暗闇の中でのいくつかの数値的な突き刺しは、反復アプローチのために以下をもたらしました:

解決策を探していますy = f(x)ここで、y ^ y = xです。

ylny=lnx

y=g(x,y)=elnxy

の値は上の方程式の不動点であり、経験的にはいくつかの値については収束するように見えますが、値が大きくと振動または発散します。yxx

次に、ニュートンの反復平方根に似たアプローチを試しました。

y=yprevious+y2=y+elnxy2

ここで、y *は、収束しないが楽観的な答えを表し、正確な初期値(平方根y 2 = xではy * = x / y)を推測した場合に精度を維持することになっています。

これは収束しているように見えますが、下端で非常にゆっくり(近く)xxmin=(1e)1e

また、適切な初期推測はように見えます。y0=ln(x)+1

だから私は多分より良い収束ソリューションがあると考えました:

y=(1a)×y+a×g(x,y)いくつかの値についての関数である。ax

それから私は何か面白いものを見つけました。

について上記のアプローチから収束する答えを取得し、計算した場合、それが表示されているかのように =約我々は推測があった場合....例えばいくつかの未知のため、と計算、次に。(明確にするために、これを検証する分析はありませんが、実行した数値評価から数字が飛び出しました。)yyy=xy2=g(x,y+ϵ)=eln(x)y+ϵy2yϵ×(ln(y))y1=y+ϵϵy2=g(x,y1)(y2y)ϵ×(ln(y))=(y1y)×(ln(y))

線形項を解く、そしてあなたが得る ...使用の代わりにそして、あなたはこの反復近似を得る:yy=y2+ln(y)×y11+ln(y)ln(y1)ln(y)

y[n+1]=g(x,y[n])+ln(y[n])×y[n]1+ln(y[n])=eln(x)y[n]+ln(y[n])×y[n]1+ln(y[n])

これは、初期推測で非常にうまく機能しているように見え、4回または5回の反復で収束するように見えます。y=1+ln(x)

(誰かがおそらくこれが何らかの方法でニュートン・ラプソンと同等であることを示すことができますが、私はそれが私の能力を超えていると思います。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.