問題タブ [numerical-methods]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 実数の3次多項式の最速の数値解法?
Rの質問:実数の係数と3つの実数の根を持つことが知られている任意の3次方程式の束を数値的に解くための最速の方法を探しています。Rのポリルート関数は、複素多項式に対してJenkins-Traubのアルゴリズム419を使用すると報告されていますが、実数多項式については、著者は以前の研究を参照しています。実数の3次、またはより一般的には実数の多項式のより高速なオプションは何ですか?
c++ - VisualStudio2008を使用してC++で逐次近似アルゴリズムを実装する際の問題
数値メソッドクラスで行ったアルゴリズムを実装しようとしています。私はメープルで書かれた同じ手順を持っています、そしてそれはうまくいきます。なぜC++で動作しないのか理解できません。
ヘルプやヒントをいただければ幸いです。前もって感謝します。
コードを実行すると、許可された反復回数を要求され、挿入後に閉じます。
math - 正の半正定行列と数値安定性?
次のように用語文書行列(TD)から計算される共起行列(C)の因子分析を実行しようとしています: C=TD*TD'
理論的には C は正の半正定値である必要がありますが、そうではなく、因数分解アルゴリズムはこのため動作しません。速度上の理由からアルゴリズムを変更できません)。
私はそれを調べて、それは数値安定性の問題かもしれません: 半正定行列を生成するための単純なアルゴリズム - 答え2.
ここで進める良い方法は何ですか?
binary - 繰り返しの 2 進数を 10 進数に変換する (系列として表現しますか?)
0.(0011) や 0.0(101) のように繰り返される 2 進数が与えられた場合、それを 10 進数に変換するにはどうすればよいでしょうか?
これまで掘り下げてきたのは、以下のように、終端の 2 進数を 10 進数に変換する簡単な方法です。
ここで、res はステップ N の後の結果であり、N は現在の反復です (N=0; n->(num 2 進数))。これを非終了の 2 進数に繰り返し適用すると、適切な近似値が得られます。たとえば、
これは約 0.4 です。
だから、私は概算を計算する手段を持っていますが、これを表現する方法を見つけるのに苦労しています. n->inf として限界で計算できるシリーズとしてそれを書き始めましたが、これまでのところあまり成功していません。
logarithm - 数値のアンダーフローを回避するために対数を使用する算術の問題
分数のリストが 2 つあります。
いうA = [ 1/212, 5/212, 3/212, ... ]
とB = [ 4/143, 7/143, 2/143, ... ]
。
と定義するA' = a[0] * a[1] * a[2] * ...
とB' = b[0] * b[1] * b[2] * ...
の値を計算したいのですがA' / B'
、
私の問題は、A と B の両方が非常に長く、各値が小さいため、積を計算すると数値のアンダーフローが非常に速く発生することです...
積を対数で和にすると、A' と B' のどちらが大きいかを判断するのに役立つことを理解しています
すなわちmax( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )
しかし、私は実際の比率が必要です....
これまでの私の最善の策は、数値表現を分数として保持することです。つまりA = [ [1,212], [5,212], [3,212], ... ]
、独自の算術演算を実装しますが、不器用になり、欠けている対数の(単純な)方法があると感じています....
A と B の分子は数列に由来しません。この質問の目的のために、それらはランダムである可能性もあります。B のすべての分母と同様に、A のすべての値の分母が同じになるのに役立つ場合。
どんなアイデアでも大歓迎です!
マット
logarithm - 数値のアンダーフローを回避するために対数を使用する算術の問題 (take 2)
分数のリストが 2 つあります。
いうA = [ 1/212, 5/212, 3/212, ... ]
とB = [ 4/143, 7/143, 2/143, ... ]
。
と定義するA' = a[0] * a[1] * a[2] * ...
とB' = b[0] * b[1] * b[2] * ...
A' と B' の正規化された値を計算したい
つまり、具体的にはA' / (A'+B')
と の値B' / (A'+B')
私の問題は、A と B の両方が非常に長く、各値が小さいため、積を計算すると数値のアンダーフローが非常に速く発生することです...
積を対数で和にすると、A' と B' のどちらが大きいかを判断するのに役立つことを理解しています
すなわちmax( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )
ログを使用して値を計算できますがA' / B'
、どうすればよいですかA' / A'+B'
これまでの私の最善の策は、数値表現を分数として保持することです。つまりA = [ [1,212], [5,212], [3,212], ... ]
、独自の算術演算を実装しますが、不器用になり、欠けている対数の(単純な)方法があると感じています....
A と B の分子は数列に由来しません。この質問の目的のために、それらはランダムである可能性もあります。B のすべての分母と同様に、A のすべての値の分母が同じになるのに役立つ場合。
どんなアイデアでも大歓迎です!
( ps. 24 時間前に比率に関して同様の質問A'/B'
をしましたが、実際には間違った質問でした。実際には の後A'/(A'+B')
です。申し訳ありませんが、私の間違いです。)
r - Rでマシンイプシロンを取得するにはどうすればよいですか?
マシン イプシロンを R に格納する定数はありますか?
algorithm - 2進対数を非常に速く見つける方法は?(せいぜいO(1))
整数の2進対数を見つけるための非常に高速な方法はありますか?たとえば、数値x = 52656145834278593348959013841835216159447547700274555627155488768が与えられた場合、そのようなアルゴリズムは215であるy = log(x、2)を見つける必要があります。xは常に2の累乗です。
問題は本当に単純なようです。必要なのは、最上位1ビットの位置を見つけることだけです。よく知られているメソッドFloorLogがありますが、特に非常に長いマルチワード整数の場合はそれほど高速ではありません。
最速の方法は何ですか?
algorithm - 大量のデータセットの分位数をカウントする増分方法
大量のデータセットの分位数を数える必要があります。
一部の部分(つまり、大きな行列の1行)からのみデータを取得できると仮定します。Q3分位数をカウントするには、データのすべての部分を取得してどこかに保存してから、並べ替えて分位数をカウントする必要があります。
データを中間変数に格納せずに分位数を取得する方法を見つけたいと思います。最善の解決策は、最初の行の中間結果のいくつかのパラメーターをカウントし、次の行のために段階的に調整することです。
ノート:
- これらのデータセットは非常に大きいです(各行に約5000要素)
- Q3は見積もることができ、正確な値である必要はありません。
- 私はデータの部分を「行」と呼んでいますが、それらは異なる長さを持つことができます!通常、それほど変化しません(+/-数百サンプル)が、変化します!
この質問は、統計的中央値、最頻値、歪度、尖度を推定するための「オンライン」(イテレーター)アルゴリズムに似ていますが、分位数を数える必要があります。
また、このトピックにはいくつかの記事があります。
これらのアプローチを実装しようとする前に、0.25 /0.75分位数を数える他のもっと速い方法があるのではないかと思いました。
lisp - Lisp、OCaml、または Runge Kutta の場合は?
システムを解くためにどの言語を提案しますか:
- 一階微分方程式
- 複雑な変数
- N次元
4次ルンゲクッタなどを使用。
速度は非常に重要ですが、次の点で犠牲になります。
- エレガントな (クリーンで短い) コード
- 柔軟性 + スケーラビリティ
私は主に Lisp と OCaml の間ですが、他の提案は大歓迎です。
ありがとう!