タグ付けされた質問 「numerics」

4
数値誤差の科学的基準
私の研究分野では、実験誤差の仕様は一般に受け入れられており、それらを提供できない出版物は非常に批判されています。同時に、多くの場合、疑わしい数値手法が機能しているにもかかわらず、数値計算の結果が数値誤差の説明なしで提供されることがよくあります。数値計算などの離散化や有限精度に起因する誤差について話しています。確かに、これらの誤差の推定値は、流体力学方程式の場合のように、必ずしも簡単に取得できるわけではありませんが、数値誤差の推定値の仕様は、実験結果の場合と同じくらい標準的である必要があります。したがって、私の質問:

1
ログサムの壊滅的なキャンセル
相対誤差の少ない倍精度浮動小数点で次の関数を実装しようとしています。 logsum(x,y)=log(exp(x)+exp(y))logsum(x,y)=log⁡(exp⁡(x)+exp⁡(y))\mathrm{logsum}(x,y) = \log(\exp(x) + \exp(y)) これは統計アプリケーションで広く使用され、ログスペースで表される確率または確率密度を追加します。もちろん、またはは簡単にオーバーフローまたはアンダーフローする可能性がありますが、そもそもログスペースがアンダーフローを回避するために使用されるため、これは悪いことです。これが典型的な解決策です。exp(x)exp⁡(x)\exp(x)exp(y)exp⁡(y)\exp(y) logsum(x,y)=x+log1p(exp(y−x))logsum(x,y)=x+log1p(exp⁡(y−x))\mathrm{logsum}(x,y) = x + \mathrm{log1p}(\exp(y - x)) からのキャンセルは発生しますが、によって軽減されます。さらに悪いのは、とが近い場合です。相対誤差プロットは次のとおりです。y−xy−xy-xexpexp\expxxxlog1p(exp(y−x))log1p(exp⁡(y−x))\mathrm{log1p}(\exp(y - x)) プロットはれ、キャンセルが発生する曲線の形状を強調します。最大までのエラーが表示されましたが、さらに悪化すると思われます。(FWIW、「グラウンドトゥルース」関数は、128ビット精度のMPFRの任意精度の浮動小数点を使用して実装されます。) l o g s u m(x 、y )= 0 10 − 1110−1410−1410^{-14}logsum(x,y)=0logsum(x,y)=0\mathrm{logsum}(x,y) = 010−1110−1110^{-11} 私は他の改革を試みましたが、すべて同じ結果になりました。外側の式と、同じエラーがで1近く何かのログを取ることによって発生外側の表現として、キャンセルは、内側の式で行わ。l o g 1 ploglog\loglog1plog1p\mathrm{log1p} 現在、絶対誤差は非常に小さいため、相対誤差は非常に小さくなっています(イプシロン内)。ユーザーは(ログ確率ではなく)確率に本当に関心があるので、このひどい相対誤差は問題ではないと主張するかもしれません。通常はそうではない可能性がありますが、私はライブラリ関数を書いています。そのクライアントは、丸め誤差よりもそれほど悪くない相対誤差を期待できるようにしたいと思います。l o g s u mexp(logsum(x,y))exp⁡(logsum(x,y))\exp(\mathrm{logsum}(x,y))logsumlogsum\mathrm{logsum} 新しいアプローチが必要なようです。何だろう?

1
OpenMPなどの共有メモリモードでMPI-3.0を実行する方法
5次元の人口バランスモデルを数値的に解くためにコードを並列化します。現在、FORTRANには非常に優れたMPICH2並列化コードがありますが、パラメーター値を大きくすると、配列が大きくなりすぎて分散メモリモードで実行できなくなります。 15ノードのクラスターにアクセスできます。各ノードには2つの8コアCPUと128GBのRAMがあります。共有メモリモードでMPI-3.0を使用してプログラムを実行し、各プロセスが各アレイの独自のコピーを生成しないようにしたいと思います。 クラスターで何かを実行する前に、Ubuntuを実行しているデスクトップでテストする必要があります。2つの8コアCPUと128 GBのRAMを備えているという点で、本質的にクラスターの1つのブレードです。コードを書いてテストしますので、Ubuntuコンピューターでプログラムを実行するように応答してください。 MPI-3.0をデフォルトの分散メモリモードの代わりにOpenMPのような共有メモリモードで実行する方法があることを読みました。 質問: コードを変更するにはどうすればよいですか?次のような他のMPI関数への呼び出しを追加する必要がありMPI_WIN_ALLOCATEますか? 共有メモリモードでMPI-3.0を実行するようにコードをコンパイルするにはどうすればよいですか?複数のノードにまたがる場合、これは異なりますか? 可能な場合は、サンプルのコンパイルスクリプトを提供してください。また、GNUコンパイラしかありません。私が使用しているクラスターは、Intelコンパイラーをサポートしていません。

1
自律時の常微分方程式の数値近似システムへのショートカットはありますか?
ODEを解くための既存のアルゴリズムは、関数。ここで、です。しかし、多くの物理システムでは、微分方程式は自律的であるため、、、は省略されています。この単純化の仮定により、既存の数値手法ではどのような改善が見られますか?たとえば、場合、問題はに変わり、1次元積分を統合するためのまったく異なるクラスのアルゴリズムに目を向けます。以下のために、最大の可能な改善は、寸法低減してY∈RNDYdydt= f(y、t )dydt=f(y,t)\frac{dy}{dt} = f(y, t)y∈ Rんy∈Rny \in \mathbb R^nY∈R、NT、N=1、T=∫DYdydt= f(y)dydt=f(y)\frac{dy}{dt} = f(y)y∈ Rんy∈Rんy \in \mathbb R^ntttn = 1ん=1n=1 n>1ytyyRnRn+1t = ∫dyf(y)t=∫dyf(y)t = \int \frac{dy}{f(y)}n > 1ん>1n>1yyy1により、時間依存性の場合は、付加することによりシミュレートすることができるので、にのドメイン変更、からに。tttyyyyyyRんRん\mathbb R^nRn + 1Rん+1\mathbb R^{n+1}
10 ode  numerics 

1
求める固有値並べ替えアルゴリズムのベンチマーク問題
すべての実行列は、直交類似変換を使用して、実Schurフォームに縮小できます。ここで、行列は、主対角線上に1 x 1または2 x 2のブロックを持つ準三角形の形式です。1 x 1の各ブロックは実固有値に対応し、2 x 2の各ブロックは複素共役固有値のペアに対応します。T = U T A U U T A AAAAT=UTAUT=UTAUT = U^T A UUUUTTTAAAAAA 固有値並べ替え問題は、ユーザーが選択したの固有値が左上隅の対角線に沿って現れるような直交相似変換を見つけることで構成されます。A S = V T T VVVVAAAS=VTTVS=VTTVS = V^T T V LAPACKでは、関連するルーチンの倍精度ルーチンはDTRSENと呼ばれます。Daniel KressnerがブロックされたバージョンをBDTRSENという名前で書きました。ScaLAPACKルーチンはPDTRSENです。 固有値の並べ替えの問題を解決する上での進歩が真の利益となるアプリケーションとアルゴリズムを探しています。 準三角形式のテスト行列は簡単に生成できますが、ユーザーが選択した固有値の現実的な分布の形を決定するのに問題があります。 私の観点からは、リッツ加速を使用した部分空間反復は、並べ替えアルゴリズムの改善をテストするための理想的なアルゴリズムです。(スパース)行列ベクトル乗算、tall QRアルゴリズム、および並べ替えアルゴリズムが必要です。 ただし、特定の固有ペアのセットが物理的に興味深いことが明らかな場合、実際の問題を見つけるのは難しいです。 共有メモリマシンを使用して、40,000次元の密行列に対して固有値の並べ替えを行うことができます。ユーザーがすべての固有値の約50%を選択すると、最高のパフォーマンスが得られます。

2
確率的に計算された関数で機能する方程式解法の数値法
タイプ方程式を解くための多くのよく知られた数値的方法があります たとえば、二分法、ニュートン法などです。f(x )= 0 、X ∈ Rん、f(バツ)=0、バツ∈Rん、 f(x) = 0, \quad x \in \mathbb{R}^n, 私のアプリケーションでは、は確率的方法で計算されます(結果は平均です)。f(x )f(バツ)f(x) この状況をうまく処理する数値方程式解法はありますか?同様の状況の議論へのリンクも高く評価されます。 計算できる精度はに強く依存し、計算時間を大幅に増加させなければ精度を上げることができない壁に簡単にぶつかる可能性があります。したがって、の結果が正確でないという事実を無視することはできません。これは、が実際に見つかる精度にも影響します。f(x )f(バツ)f(x)バツバツxfffバツバツx

4
固定小数点と任意精度の計算の関連性
浮動小数点演算のライブラリ/パッケージはほとんどありません。浮動小数点表現のさまざまな不正確さを考えると、この増加した精度が固定小数点での作業の複雑さの価値があるかもしれないフィールドが少なくともいくつかない理由が問題になります。 たとえば、固定小数点固有値ソルバーを使用する上で大きな問題はありますか?彼らはどのくらい遅く/速く、不正確/正確でしょうか? 関連:これとこれ

3
カオス数値モデルの回帰テスト
実際の物理システムを表す数値モデルがあり、それがカオスを示す場合(例:流体力学モデル、気候モデル)、モデルが期待どおりに動作していることをどのようにして知ることができますか?2つのモデル出力のセットを直接比較することはできません。初期条件の小さな変更でも、個々のシミュレーションの出力が劇的に変化するためです。モデルの出力を直接観測と比較することもできません。観測の初期条件を十分に詳細に知ることはできず、数値近似はいずれにせよシステム全体に伝播する小さな違いを引き起こすからです。 この質問の一部は、科学的コードの単体テストに関する David Ketchesonの質問に触発されました。私は、そのようなモデルの回帰テストをどのように実装できるかに特に興味があります。小さな初期条件の変化が大きな出力の変化につながる可能性がある場合(それでも、現実の適切な表現である場合があります)、パラメーターの変更や新しい数値ルーチンの実装による変化からこれらの変化をどのように分離できますか?
10 testing  numerics 

5
ログ-ログスペースの統合
私は一般に、ログログスペースでよりスムーズでより適切に動作する関数を使用しています。そのため、補間/補外などを実行し、非常にうまく機能します。 これらの数値関数をログ-ログスペースに統合する方法はありますか? つまりscipy.integrate.cumtrapz、 st を見つけるために、ある種の単純な台形ルールを使用して累積積分を実行することを望んでいます(たとえば、Pythonではを使用)。F(r)F(r)F(r) F(r )= ∫r0y(x )dバツF(r)=∫0ry(バツ)dバツF(r) = \int_0^r y(x) \, dx しかし、私はyとx(可能な場合)の代わりに、値とl o g (x )を使用することを望んでいます。l o g(y)log(y)log(y)l o g(x )log(バツ)log(x)yyyバツバツx

3
科学計算と数値分析
私はコンピュータサイエンスと数学の二重の専攻です。私は両方の主題が大好きです。おそらく科学計算の分野で、大学院生になることを考えています。科学計算と数値解析の本当の違いは何ですか?彼らはキャリアとして研究されていますか?

2
計算流体力学における機械学習の使用
背景: コースでは、2d Navier-Stokesの実用的な数値解を1つだけ作成しました。これは、蓋​​駆動のキャビティフローのソリューションでした。ただし、このコースでは、空間的離散化と時間的離散化のスキーマについて説明しました。また、NSに適用されるシンボル操作のコースワークも取り入れました。 PDEから有限差分への分析/記号方程式の変換を処理する数値アプローチには、次のようなものがあります。 オイラーFTFS、FTCS、BTCS 緩い ミッドポイントリープフロッグ Lax-Wendroff マコーマック オフセットグリッド(空間拡散により情報が広がる) TVD 当時、私には、これらは「挿入名がスキームを見つけて、たまたま機能する」ように見えました。これらの多くは「豊富なシリコン」の時代以前のものでした。これらはすべて近似値です。限界で彼ら。理論的には、PDEにつながります。 直接数値シミュレーション(DNS)は楽しいものであり、レイノルズ平均ナビエストークス(RANS)も楽しいものですが、これらは計算上扱いやすく、現象を完全に表現する連続体の2つの「エンドポイント」です。これらの内部に住むアプローチには、複数のファミリーがあります。 講義で、CFDの教授に、ほとんどのCFDソルバーはきれいな絵を描くと言われましたが、ほとんどの場合、これらの絵は現実を表していないため、現実を表しています。 (私が理解しているように、網羅的ではない)開発のシーケンスは次のとおりです。 支配方程式から始める-> PDE 空間的および時間的離散化を決定->グリッドおよびFDルール 初期条件と境界条件を含むドメインに適用する 解く(行列の反転に関する多くのバリエーション) 全体的なリアリティチェックを実行し、既知のソリューションに適合させるなど。 分析結果から派生したいくつかのより単純な物理モデルを構築する それらをテストし、分析し、評価する 繰り返す(ステップ6、3、または2にジャンプして戻る) 考え: 私は最近、CARTモデル、斜めツリー、ランダムフォレスト、および勾配ブーストツリーで作業しています。それらはより数学的に導き出されたルールに従い、数学は木の形を動かします。彼らは、離散化された形をうまく作るように働きます。 これらの人間が作成した数値アプローチはいくらか機能しますが、その結果をモデル化することを意図している物理現象に関連付けるために必要な広範な「ブードゥー教」があります。多くの場合、シミュレーションは実際のテストと検証に実質的に取って代わりません。間違ったパラメーターを使用したり、実際の世界で経験したジオメトリやアプリケーションパラメーターの変動を考慮に入れたりするのは簡単です。 質問: 問題の性質に 適切な離散化、空間的および時間的差分スキーム、初期条件、またはソリューションを定義させるためのアプローチはありましたか? 機械学習の手法と組み合わせた高精細ソリューションを使用して、ステップサイズがはるかに大きいが収束、精度などを維持する差分スキームを作成できますか? これらのスキームはすべて、アクセスしやすい「人為的に導き出すのが容易」です-それらにはいくつかの要素があります。より良い仕事をする何千もの要素を持つ差分スキームはありますか?それはどのように導出されますか? 注:別の質問で、(分析的にではなく)経験的に初期化され、経験的に導出されたものをフォローアップします。 更新: 深層学習を使用して、格子ボルツマンフローを加速します。特定のケースで最大9倍のスピードアップ Hennigh、O.(プレスリリース中)Lat-Net:ディープニューラルネットワークを使用した圧縮格子ボルツマンフローシミュレーション。取得元:https : //arxiv.org/pdf/1705.09036.pdf コード付きのレポ(私は思う):https : //github.com/loliverhennigh/Phy-Net 同じハードウェアで、GPUよりも約2桁高速、CPUよりも4桁高速、つまり〜O(10,000x)高速です。 Guo、X.、Li、W.&Ioiro、F. Convolutional Neural Networks for Steady Flow Approximation。取得元:https …


1
ベッセルウェイトを使用した高価な関数の放射状積分
積分を計算する必要があります 私= ∫R0f(r )Jん(zn mrR) rdrI=∫0Rf(r)Jn(znmrR)rdrI = \int_0^R f(r)J_n\left(\frac{z_{nm}r}{R}\right)rdr ここで、は第1種の次のベッセル関数であり、はそのゼロであり、はやや類似した実数関数です(同じではない、それは非常に複雑であり、通常で用語を伴う時には)。JんJnJ_nんトンの時間nthn^{\mathrm{th}}zn mznmz_{nm}メートルトンの時間mthm^{\mathrm{th}}f(r )f(r)f(r)JんJnJ_nJ2んJn2J_n^2exp(Jん)exp⁡(Jn)\exp(J_n) 非常に高価であり、この積分は非常に多くの時間を評価しなければならない、私はそれを解決するための最良の(非常に速いが、それでもかなり正確に)数値法を探しています。現在、私は11ポイントの台形ルールを使用しています。しかし、私はClenshaw–CurtisやGauss–Kronrod(低次数)などの他の方法を調査しています。f(r )f(r)f(r) しかし、特にハンケル変換の計算に必要なものと同様であることを考えると、そのような積分に特に適した方法があるかどうか疑問に思っています。

1
関連ルジャンドル関数の2次導関数
高速多重極法を使用したラプラス方程式の解の一部として、関連する第1種ルジャンドル関数の 2次導関数を計算したいと思います。具体的には、私はCの実装、または自分で関数を記述するために使用する正しい繰り返し関係を探しています。 私は再発の関係を探してみて、これを見つけましたが、それが正しくないのではないかと思います。 また、これらのようなすぐに使用できる関数を検索しようとしましたが、関連する関数の1次導関数の関数だけに出くわしました。2番目の関数ではありません。 誰かが私を正しい方向に向けることができれば、私は本当に感謝します!どうもありがとう!

2
NumPyで三角関数のアイデンティティを評価するときの驚くほど大きな違い
Wolfram AlphaとSageコンピュータ代数システムによれば、次のアイデンティティが成り立つ: cos(アークタン(l1− l2d)) = 11 + (l1− l2)2d2−−−−−−−−√cos⁡(arctan⁡(l1−l2d))=11+(l1−l2)2d2 \cos\left(\arctan\left(\frac{l_1-l_2}{d}\right)\right) = \frac{1}{\sqrt{1 + \frac{(l_1-l_2)^2}{d^2}}} しかし、NumPyの任意の例を使用してそれを検証しようとすると、偶発性の両側で計算された実際の値にかなり大きな違いがあることに気付きました。私は次のコードを使用しました: l1 = 10; l2 = 8; d = 17 from numpy import arctan2, cos, sin, sqrt alpha = arctan2((l1-l2),d) left = cos(alpha) right = sqrt(1 + ((l1-l2)**2)/(d**2)) 結果を評価するleftとright、次の結果が得られました。 left = 0.99315060432287616 right = 1.0 これを単なる数値エラーとして書き留めるのは魅力的ですが、私は数値エラーがどれほど大きくなるかについての経験がほとんどないため、確信が持てません。これは可能ですか、それとも何かが欠けていますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.