問題タブ [numerical-computing]
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.
python - スパースscipy行列を既存のnumpy密行列にロードします
数十ギガバイトを占める巨大なゴツゴツした行列Aがあるとします。このメモリを割り当てるには、無視できないほどの時間がかかります。
numpy行列と同じ次元のscipyスパース行列のコレクションもあるとしましょう。これらのスパース行列の1つを密行列に変換して、ベクトル化された演算を実行したい場合があります。
スパース行列を密行列に変換するたびにスペースを再割り当てするのではなく、これらのスパース行列の1つをAにロードできますか?scipyスパース行列で使用できる.toarray()メソッドは、オプションの密配列引数をとらないようですが、これを行う他の方法があるかもしれません。
c - アトミック浮動小数点演算の確定性を確保するために丸めを使用できますか?
浮動小数点決定論を必要とする C アプリケーションを開発しています。また、浮動小数点演算をかなり高速にしたいと考えています。これには、サインや対数など、IEEE754 で指定されていない標準の超越関数が含まれます。私が検討したソフトウェア浮動小数点の実装は、ハードウェア浮動小数点に比べて比較的遅いため、各回答から最下位ビットの 1 つまたは 2 つを単純に丸めることを検討しています。精度の低下はアプリケーションにとって十分な妥協ですが、これはプラットフォーム全体で決定論的な結果を保証するのに十分でしょうか? すべての浮動小数点値は double になります。
演算の順序が、浮動小数点の結果のばらつきのもう 1 つの潜在的な原因であることは認識しています。私はすでにそれに対処する方法を持っています。
今日使用されている主要な浮動小数点ハードウェア実装のソフトウェア実装があれば素晴らしいので、このような仮説を直接テストできます。
c++ - UMFPACK では、どのくらいの頻度で記号と数値の因数分解を行う必要がありますか?
私はシステム Ax = b を持っています。ここで、B は定数ですが、A は反復ごとに少しずつ変化し続けます。私は UMFPACK 5 を使用して、この線形システムを A が変化するたびに解いています。上記は次の 2 つの方法で実行できます。
- 最初に行列 Aのみのシンボリックおよび数値因数分解を計算し、各反復で Ax = b を解くためにこの数値オブジェクトを使用します (もちろん、スパース行列表現では、A が変化すると Ax も変化します。Ap と Ai は同じままです)。
- 行列 A IN EACHの反復 (つまり、A が変化するときの新しい数値オブジェクト)のシンボリックおよび数値因数分解を計算し、この新しい数値オブジェクトを使用して Ax = b を解きます。
上記の方法のうち、正しいものはどれですか?上記の2つの手順について、(予想どおり)まったく異なる回答が得られます。ヘルプやコメントをいただければ幸いです。ありがとう。
wolfram-mathematica - 数学で二重積分を数値的に計算する方法は?
数学で二重積分を数値的に計算する方法は?
polynomial-math - 非常に高次の多項式の根の計算
これが私の問題です。私の研究では、私が見ている複素数は、正確に次数 $\sim 2^n$ (~ 2^n) の高次多項式の根の (非常に大きな) セットであると信じています。ここで、$1 \le n \le 10 \sim 15$ (1 <= n <= 10 ~ 15). Mathematica は私のコンピュータで 1 日中実行されていましたが、他のプログラムで Mathematica よりも高速で、より多くの根を計算できるのではないかと考えました。もっと例があれば、本当に役に立ちます。プログラムにできることは単純です。非常に高度な多項式を与え、その複素根を数値的にプロットしたいのです。多重度は気にしません。
前もって感謝します、
python - Pythonの丸め誤差
乗算の順序が結果に影響を与える可能性があるのはなぜですか?次のコードを検討してください
result1はresult2 と等しくなければならないことは誰もが知っていますが、次のようになります。
違いは最小限です
ただし、特定のアプリケーションでは、このエラーが増幅される可能性があるため、同じ計算を実行する2つのプログラム(一方はresult1を使用し、もう一方はresult2を使用)の出力が完全に異なる可能性があります。
なぜそうなのか、そして非常に数値的/科学的なアプリケーションでそのような問題に対処するために何ができるのでしょうか?
ありがとう!
アップデート
良い答えですが、乗算の順序が重要である理由をまだ見逃しています。
したがって、コンパイラ/インタプリタはa * b * cを(a * b)*cと見なしているようです。
optimization - Clojure での高速な複素数演算
私は Clojure でいくつかの基本的な複素数演算を実装していましたが、型ヒントを使用しても、ほぼ同等の Java コードよりも約 10 倍遅いことに気付きました。
比較:
出力:
と:
出力:
実際、型ヒントは違いを生むようには見えません。それらを削除すると、ほぼ同じ結果が得られます。本当に奇妙なのは、REPLなしで Clojure スクリプトを実行すると、結果が遅くなることです。
私の質問は次のとおりです。どうすれば Java コードのパフォーマンスに近づくことができますか? また、REPL なしで clojure を実行すると、一体なぜ式の評価に時間がかかるのでしょうか?
更新 ==============
deftype
と で型ヒントを使用しdeftype
、ではなくdefn
使用すると、Java バージョンと同等またはそれ以上のパフォーマンスが得られます。お二人のおかげです。dotimes
repeatedly
出力:
matlab - Matlabの逆不完全ガンマ関数
不完全ガンマ関数と逆不完全ガンマ関数に関して提起される問題があります。ガンマ関数が0から無限大までの特定の積分である場合、不完全ガンマ関数は別のパラメーターxを追加し、0からx(下部の不完全)およびxから無限大(上部の不完全)に積分することを思い出してください。
Matlabには、完全ガンマ関数、不完全ガンマ関数の上下、およびその逆のすべての関数をカバーする関数があることを私は知っています。ただし、Matlabは、不完全ガンマ関数を正規化された不完全ガンマ関数として実装します。つまり、完全ガンマ関数によって分割されます。
正規化されていない不完全ガンマ関数、特に逆不完全ガンマ関数のMatlab実装を探しています。誰かがそのようなこと、またはそれを構築する簡単な方法を知っていますか?(「順方向」の不完全ガンマ関数はスケーリングによって簡単に実装できますが、より高速な実装がある可能性があります。逆関数の単純な実装がある場合、それは私にはわかりません。)
c# - どちらの方法がより正確ですか?
数値範囲を同じ長さのセグメントに分割する必要があります。しかし、どちらの方法がより正確かは判断できません。例えば:
(double)int1 / int2 * double
またはについてint1 * double / int2
です。どちらの方法がより正確ですか? どの方法を使用すればよいですか?
アップデート
次のコードは違いを示します。
algorithm - 古典数値計算 MATLAB コード
分析的にf(x) = g(x)
、すべてのx
.
x が 0 に近づくと、両方とも1f(x)
にg(x)
近づきます。
ただし、g(x)
よりもうまく機能しますf(x)
。は実際には 0 に近づくとf(x)
発散します。x
g(x)
f(x)