タグ付けされた質問 「numerical-limitations」

2
ベクトル間の角度を計算する数値的に安定した方法
2つのベクトル間の角度に古典的な公式を適用する場合: α=arccosv1⋅v2∥v1∥∥v2∥α=arccos⁡v1⋅v2‖v1‖‖v2‖\alpha = \arccos \frac{\mathbf{v_1} \cdot \mathbf{v_2}}{\|\mathbf{v_1}\| \|\mathbf{v_2}\|} 非常に小さい/鋭角の場合、精度が失われ、結果が正確ではないことがわかります。このStack Overflow answerで説明されているように、1つの解決策は代わりにアークタンジェントを使用することです。 α=arctan2(∥v1×v2∥,v1⋅v2)α=arctan⁡2(‖v1×v2‖,v1⋅v2)\alpha = \arctan2 \left(\|\mathbf{v_1} \times \mathbf{v_2}\|, \mathbf{v_1} \cdot \mathbf{v_2} \right) そして、これは実際により良い結果をもたらします。しかし、これがに非常に近い角度で悪い結果を与えるのではないかと思います。そうですか?もしそうなら、ブランチ内の公差をチェックせずに角度を正確に計算する式はありますか?π/2π/2\pi / 2if

2
SVDを安定させるためにどれだけの正則化を追加しますか?
インテルMKLのSVD(dgesvdSciPyを介して)を使用していて、マトリックスの条件が悪い/フルランクではない場合float32と精度を変更すると、結果が大幅に異なることに気付きましたfloat64。結果がfloat32-> float64変更の影響を受けないようにするために追加する必要がある正則化の最小量に関するガイドはありますか? 際、特に、、Iはその参照L ∞ノルムV T Xの Iとの間の精度を変更した場合約1による移動とを。AのL 2ノルムは10 5であり、合計784のうち約200のゼロ固有値があります。A = UD VTA=UDVTA=UDV^{T}L∞L∞L_\inftyVTバツVTXV^{T}Xfloat32float64L2L2L_2あAA10510510^5 上のSVDをやっでλ = 10 - 3は違いワニスを作りました。λ I+ AλI+A\lambda I + Aλ = 10− 3λ=10−3\lambda=10^{-3}

2
高次ゼルニケ多項式の数値安定性
一部の画像の高次(たとえばm=0、n=46)ゼルニケモーメントを計算しようとしています。しかし、放射多項式に関する問題に直面しています(ウィキペディアを参照)。これは区間[0 1]で定義された多項式です。以下のMATLABコードを参照してください function R = radial_polynomial(m,n,RHO) R = 0; for k = 0:((n-m)/2) R = R + (-1).^k.*factorial(n-k) ... ./ ( factorial(k).*factorial((n+m)./2-k) .* factorial((n-m)./2-k) ) ... .*RHO.^(n-2.*k); end end ただし、これは明らかにの近くの数値の問題にぶつかりますRHO > 0.9。 私はそれをpolyvalいくつかのより良い舞台裏のアルゴリズムがあるかもしれないと考えるようにそれをリファクタリングしてみましたが、それは何も解決しませんでした。これをシンボリック計算に変換すると、目的のグラフが作成されましたが、次のような単純なグラフであっても驚くほど遅くなりました。 そのような高次多項式を評価する数値的に安定した方法はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.