問題タブ [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.
matlab - Matlab で逆行列を計算する
逆行列の計算を必要とする最適化アルゴリズムを実行しています。このアルゴリズムの目的は、行列 A から負の値を取り除き、新しい行列 B を取得することです。基本的に、同じサイズの既知の正方行列 B と C から始めます。
まず、次の行列 A を計算します。
A = B^-1 * C
またはMatlabで:
私がこれを使用するのは、MatlabB\C
が よりも正確であると私に言ったからですinv(B)*C
。
次に、A の負の値が 2 で除算され、行の長さが 1 になるように A が正規化されます。この新しい A を使用して、新しい B を次のように計算します。
(1/N) * A * C' = B^-1
ここで、N は単なる倍率 (A の列数) です。この新しい B は最初のステップで再び使用され、これらの反復は A のネガがなくなるまで続きます。
私の問題は、2 番目の方程式から B を計算し、それを正規化する必要があることです。
を使用して B を計算してきましたがinv(B^-1)
、数回繰り返した後、B^-1
「特異点に近いか、スケーリングが悪い」というメッセージが表示されるようになりました。
このアルゴリズムは、実際には小さなマトリックス (約 70x70) で機能しますが、約 500x500 になると、これらのメッセージが表示され始めます。
を計算するより良い方法はありますinv(B^-1)
か?
c++ - Stabilizing Infrared Distance Sensor Output Values
I'm reading infrared Sharp distance sensors:
http://www.robofun.ro/senzori/infrarosu/senzor_sharp_%20GP2D120XJ00F
With the reading I'm commanding a servo to direct the robot along a wall, a pretty simple map and write code.
The problem I'm having is that the sensor readings are way off, not behaving liniar... I know other people use these sensors just fine and I know they're wired just fine.
My question is how can I eliminate any oscillations sent to the servo? I'm getting 1 to 3 degrees of oscillations with the robot standing still at a fixed distance from the wall.
Below you have my code:
Please note that double-mapping is necessary because, otherwise variations would be MUCH worse.
Thanks to anyone who will take the time to answer this and help me out...
LE: I've already considered hysteresis, but I want something that will not lose time with unnecessary readings and calculations.
java - java.util.Datesの数値的に安定した平均
私はたくさんの日付を持っています、そして私はそれらの平均を見つけたいです。
- オーバーフローの問題が発生する前に、100年以内にいくつの日付を合計できますか?落とし穴はありますか?
- オーバーフローの問題を回避して、平均を計算するための最良の方法は何ですか?
c++ - c++: 浮動小数点演算の安定性のための戦略
さまざまな浮動小数点演算の安定性を維持するための戦略を含む C++ ライブラリ/ルーチン/パッケージを推奨できますか?
例: 単位間隔 (0,1) で 100 万のベクトル/配列を合計したいとlong double
します。各数値はほぼ同じ桁数です。単純な合計for (int i=0;i<1000000;++i) sum += array[i];
は信頼できません。十分i
に大きい場合、sum
は よりもはるかに大きな桁になるarray[i]
ため、 とsum += array[i]
同等になりsum += 0.00
ます。(注: この例の解決策は、2 値合計法です。)
私は、数千/数百万の微小確率の和と積を扱います。MPFRC++
有効桁数が 2048 ビットの任意精度ライブラリを使用していますが、同じ懸念事項が依然として当てはまります。
私は主に次のことに関心があります。
- 多くの数値を正確に合計するための戦略 (上記の例など)。
- 乗算と除算が不安定になる可能性があるのはいつですか? (多数の数値配列を正規化する場合、正規化定数はどうすればよいですか?最小値?最大値?中央値?)
algorithm - 数値安定性を備えた大規模な整数行列操作を実行するためのアルゴリズム
数値安定性を犠牲にすることなく、大きな疎行列で行列演算を実行するライブラリを探しています。行列は 1000+ x 1000+ になり、行列の値は 0 から 1000 の間になります。指数計算アルゴリズム (en.wikipedia.org/wiki/Index_calculus_algorithm) を実行するので、次の (スパース) 行ベクトルを生成します。マトリックスを順番に。各行を作成するときに、線形独立性をテストする必要があります。必要な数の線形独立ベクトルで行列を埋めたら、行列を縮小された行階層形式に変換する必要があります。
ここでの問題は、私の実装がガウス消去法を使用して線形独立性を判断していることです (すべての行ベクトルが見つかったら、行のエシュロン形式を確保します)。ただし、マトリックスの密度とサイズを考慮すると、これは、キャンセルを実行するために先頭のエントリの lcm を見つける必要があるため、新しい各行のエントリが時間の経過とともに指数関数的に大きくなることを意味します。行列の簡約形式を見つけると、問題がさらに悪化します。
だから私の質問は、エントリをできるだけ小さく保ちながら、線形独立性をテストし、削減された行階層形式を解決できるアルゴリズム、またはより良い実装はありますか? 線形独立性の効率的なテストは、インデックス計算アルゴリズムで最も多く実行されるため、特に重要です。
前もって感謝します!
numerical-methods - 絶対および絶対相対誤差 (数値誤差)
コードを書くために、絶対誤差と相対誤差がどのように機能するかを理解したいと思います。
と があるとしx1*=4.54 x2*=3.00
ますx3*=15.0
。精度は 3 桁です。
どのように定義するか: x1*-x2*+x3*
と
bの絶対誤差。x1*x2*/x3*
cの絶対相対誤差。aとbの精度。
意味をなそうとしている: |e1|<=0.5*10^(-3)
または |e1|<=0.5*10^(-2)
そして|e|<=|e1|+|e2|+|e3|=(15+4+3)*0.5*10^(-3)
b。|r|<=|r1|+|r2|+|r3|=|e1/x1*|+|e2/x2*|+|e3/x3*|
numerical-stability - ベクトル和をオンラインで更新するための数値的に安定したアルゴリズム
ベクトルvが与えられた場合、変数sum_v内のその要素の合計を追跡したいと思います。ベクトルvの各要素iは、重みベクトルw_iと他のベクトルd_iの内積です。したがって、d_iが変更されるたびに、vも変更されます。d_iが変更されるたびにv_iの変更に応じて変更することにより、sum_vを更新しています。残念ながら、小さな数値の不安定性はすぐに加算されます。
これを防ぐためにどのような効率的なテクニックを使用できますか?
編集:現在、私のアルゴリズムは、d_iが変更されるたびにsum_vを更新するのに一定の時間がかかります。log(n)未満にとどまりたいのですが、nはvの長さです。
c++ - 特異行列を対象とした場合、solve()がクラッシュします
最小二乗スタイルで連立一次方程式を解こうとしています。アルマジロとその解決関数を使用して、放物線近似の3つの係数を計算したいと思います。
CtC=で
およびCtb=
どうやらsolve()はそれを解決することができません、Matlabでさえ警告します:
一般的に、armadilloまたはc ++に回避策またはより強力で洗練された方法はありますか?ありがとう
clojure - Clojure: 減算で一貫性のない丸め
私は、いくつかの論理条件で数値の等価性が重要な要素であるコードに取り組んでいます。Clojure は、私が説明するのに十分な知識を持っていないことを行っています。例えば:
状況によっては、Clojure の数値は 0.1 への減算を理解するようですが、そうでない場合もあります。ここで何が起こっているのですか?