問題タブ [numerical-stability]
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.
algorithm - Baum-Welch アルゴリズムのスケーリングの問題 - Matlab
このウィキペディアのリンクからMatlabにBaum-Welchアルゴリズムを実装しています:Baum-Welchアルゴリズム。これは、金融時系列のボラティリティ予測の一部です。
2 つの質問があります。
1 : ウィキペディア ページの最後の更新ステップで、「これらのステップは、必要なレベルの収束まで反復的に繰り返されるようになりました。」と説明されています。
では、ループを停止する条件を宣言するにはどうすればよいでしょうか。さらに、どの変数を評価して、許容できるかどうかを確認する必要がありますか?
2 :ウィキペディアの式に注意すると、次のようになりますkesi
。
alpha
分子 ( and beta
) でスケーリングされる 2 つの係数と、分母 ( just )でスケーリングされる 1 つの係数がありますalpha
。したがって、お互いの効果をキャンセルしません。方程式を実装し(たとえば、20回繰り返すループで)、スケーリング手順を実行しました。しかし、「遷移確率行列」と「初期分布」と「放出行列」はNaN
値を取得します!!!
この質問の回答Baum-Welch 多くの可能な観察を読みました。そこに記載されているチュートリアルに基づいてスケーリングを行いました。
これが私のコードです:
では、このスケーリングの問題に対して今何をすべきでしょうか? このNaN
値は、スケーリングの問題またはその他の理由によるものですか?
御時間ありがとうございます。
python - 適応数値積分の実装
常微分方程式系を統合できる Python 3 パッケージを作成しました。これを書いているときに、情報が見つからないように見える問題に遭遇しました。
問題:
基本的に、ローカルエラーに応じてステップサイズを調整する適応アルゴリズムがあります(実際の方法は、Cash-Karp係数を使用したRKFアルゴリズムの実装です)。特定のポイントの後、ステップサイズが十分に大きい場合、メソッド終了時刻をオーバーシュートします。
私の解決策:
現在のステップ サイズが積分の終了時間を超える場合、残り時間の値の半分にステップ サイズを設定するように設定しました。式の形式: dt = (t_end - t_current)/2
しかし、これは、適応アルゴリズムで使用される相対誤差の特定の要件により、時間ステップが非常に小さくなります。およそ 1e-15 のオーダーで、t_current はマシンの精度の制限により増加しないため、数値的な不安定性につながります。
私の質問:
このような数値的な不安定性を作成することなく、終了時間が予想される終了時間に対して小数点以下 15 桁まで正確になるように、統合アルゴリズムを実装するより効果的な方法があるかどうか疑問に思っていました。
python - Python で数値安定性を使用して xe^x/(e^x-1) を評価するにはどうすればよいですか?
xe^x/(e^x-1) をゼロ付近の数値安定性で評価し、x が非常に正または負の場合はどうすればよいですか? と のすべての通常の数学関数にアクセスできnumpy
ますscipy
。
python - Python 0 に近い x の log(1+x)/x を計算する
0に近いxの値について、Pythonでlog(1+x)/xの値を正しく計算する方法はありますか? np.log1p(x)/x を使用して通常に行うと、1 になります。np.log(x) を使用すると、どういうわけか正しい値が得られるようです。log1p の方が安定していると思われませんか?
c++ - IEEE 754 浮動小数点の加算と乗算の互換性
加算は、IEEE 754 (IEC 559) 浮動小数点標準x + x
の乗算によって交換可能ですか、またはより一般的に言えば、常にまったく同じ結果が得られるという保証はありますか?2 * x
case_add
case_mul
c++ - std::acos を使用して std::cos(angle) から正確な角度を復元する
angle == std::acos(std::cos(angle))
が範囲 [0, Pi] 内にある場合angle
、つまり、上記の範囲制限を指定して使用angle
した結果からの正確な元の値を復元することが可能であることが C++ 標準によって保証されていますか?std::cos
std::acos
angle
がinfinity
またはNaN
省略されている場合の限界ケース。
matlab - MATLAB で Ax=b を解く際の数値エラー
Ax = b
MATLAB でシステムを解こうとしています。ここで、 は から までのA
範囲の (非ゼロ) 値を持つ 30x30 三角行列であり、は から1e-14
までの範囲の値を持つ 30 要素の列ベクトルです。を入力すると、回答が表示され、警告メッセージは表示されませんが、回答は妥当ではありません (ベクトルの下部にある乱数のように見えます)。これは数値の誤差によるものだと思います。 0.7
b
1e-3
1e3
x = A\b
このページのメッセージ 5 は 、数値エラーを回避するために行列を分解/スケーリングすることを提案していますが、スケーリング行列を計算する方法を理解できませんでした。
質問は次のとおりです:これは実際に数値不安定性の例ですか?もしそうなら、どうすれば行列 A を再スケーリングしたり、MATLAB が計算を実行する方法を変更したりして、それを回避できますか?
問題を引き起こしている行列とベクトルは次のとおりです。
完全精度の変数を含む .mat ファイルは、ここにあります。
私のマシン(OS X 10.10.5のMatlab R2013a)で得た結果は次のとおりです。
1e-13 のオーダーの値を返しますがnorm(A*x-b)
、解決しようとしている問題を考えると、結果は物理的に妥当ではありません (x の値は単調に減少し、負の値はありません)。例として、同じ行列 A で正しい (見た目の) 解を返す同様のデータセットを次に示します。