計算科学

科学的問題を解決するためにコンピュータを使用する科学者のためのQ&A

1
SciPy eigsh()が高調波発振器の場合に誤った固有値を生成するのはなぜですか?
私は、計算物理学の文脈で、巨大なスパース行列の固有値計算を実行するために、いくつかのより大きなコードを開発しています。固有値は分析的によく知られているため、1次元の単純な調和振動子に対してルーチンをテストします。そのようにして、自分のルーチンをSciPyの組み込みソルバーと比較すると、下のプロットに表示される奇妙なことに出くわしました。ここでは、数値計算された最初の100個の固有値および分析固有値を見ることができますλN U Mλnあなたはm\lambda_{num}λn個のAλana\lambda_{ana} 固有値番号40付近で、数値結果は分析結果から分岐し始めます。これは私を驚かせるものではありません(議論で取り上げられない限り、ここではなぜなのかを説明しません)。しかし、私にとって驚くべきことは、eigsh()が縮退した固有値(固有値80あたり)を生成することです。なぜeigsh()は、そのような少数の固有値に対してもそのように振る舞いますか? import numpy as np from scipy.sparse.linalg import eigsh import myFunctions as myFunc import matplotlib.pyplot as plt #discretize x-axis N = 100 xmin = -10. xmax = 10. accuracy = 1e-5 #stepsize h = (xmax - xmin) / (N + 1.) #exclude first and last points since …

3
Fortran:コードのセクションの時間を計る最良の方法は?
コードの最適化中にコードの特定の部分の時間を測定することが必要になる場合がありますが、私は長年にわたって次のものを使用していましたが、それを行うより簡単/より良い方法があるかどうか疑問に思っていましたか? call system_clock(count_rate=clock_rate) !Find the time rate call system_clock(count=clock_start) !Start Timer call do_something_subroutine !This is what gets timed call system_clock(count=clock_stop) ! Stop Timer e_time = real(clock_stop-clock_start)/real(clock_rate)

1
転換ん
数値的に形式の積分を行おうとしているとき、私は逸話的に聞いたことがあります ∫∞0f(x )J0(x )d x∫0∞f(バツ)J0(バツ)dバツ\int_0^\infty f(x) J_0(x)\,\mathrm{d}x (例えば、それ自体高い振動、正則、等)を滑らかにし、行儀、それはとしてそれを書き換える精度を助けますf(x )f(バツ)f(x) 1π∫π0∫∞0f(x )cos(x sinθ )d xD θ1π∫0π∫0∞f(バツ)cos⁡(バツ罪⁡θ)dバツdθ\frac{1}{\pi}\int_0^\pi \int_0^\infty f(x) \cos(x\sin\theta) \,\mathrm{d}x\,\mathrm{d}\theta そして、最初に内部積分を数値的に実行します。これが機能すると期待すべき理由はわかりませんが、数値メソッドの精度はほとんど明らかではありません。 もちろん、実際にそれを行う最良の方法は、このような振動積分に最適化された方法を使用することです。この変換を行うと積分の精度が向上する傾向があることを誰もが確認または反論できますか?そして/またはそれを説明する情報源に私を向けますか?

5
絶対偏差の合計の最小化(
データセットあり、合計最小化するようなパラメーターを見つけたい mx1,x2,…,xkx1,x2,…,xkx_{1}, x_{2}, \ldots, x_{k}mmm∑i=1k∣∣m−xi∣∣.∑i=1k|m−xi|.\sum_{i=1}^{k}\big|m-x_i\big|. あれは minm∑i=1k∣∣m−xi∣∣.minm∑i=1k|m−xi|.\min_{m}\sum_{i=1}^{k}\big|m-x_i\big|.


1
hdf5の代替
私は何年もHDF5を使用していますが、データセットのサイズが大きくなるにつれて、ここにリストされているのと同じ問題を経験し始めています。 http://cyrille.rossant.net/moving-away-hdf5/ HDF5のようなフォーマットを指定してください-並列書き込みの良好なサポート-巨大なマトリックスのチャンクアクセスのサポート 私の典型的な使用例は、100k x 100k整数行列です。論理的な観点からファイル全体として保持したいのですが、並列ワーカーでチャンクごとに書き込む必要があります。

2
乱数の線形合同ジェネレーターの品質
さまざまな外力に対して、ランジュバン方程式のシミュレーションを行っています。Cのrand()from stdlib.hは私の結果にバイアスを導入する可能性があると言われ、私はMersenne Twisterを使用しています。 それにもかかわらず、線形合同発生器がシミュレーションでどのような種類の誤差を引き起こす可能性があるのか​​を正確に知りたい(そして見たい)。これらは私が試したものです: ランダムの3Dタプルを生成して、超平面を表示しようとします。何も見えません。 乱数の大きなベクトルのFFTを実行します。メルセンヌツイスターとの両方でほぼ同じですrand()。 ブラウン運動の粒子の等分配原理の確認。両方のインテグレーターは、の期待値が同じ有効桁数でします。⟨ KE ⟩ = 12kBT⟨KE⟩=12kBT\langle \text{KE}\rangle=\frac{1}{2}k_BT 累乗2ではないいくつかのビンにどれだけうまくビンが入っているかを確認します。どちらも同じ定性的な結果をもたらしますが、誰も優れていません。 Brownianパスを見て、からの明確な分岐を確認し。繰り返しますが、運はありません。⟨ X ⟩ = 0⟨バツ⟩=0\langle x\rangle = 0 円内のポイントの分布。塗りつぶされ、境界内のみ。それらのすべての間、および最も近い隣人の間(Shorの答え、以下のコメント)。この gistで使用できます。必要なライブラリをインストールした後、Julia 0.5.0で実行します(手順についてはgistを参照してください)。 物理シミュレーションのコンテキストに導入されたバイアスを探していることを強調したいと思います。たとえばrand()、メルセンヌツイスターはテストしませんが、ダイハードテストは惨めに失敗しますが、現時点ではあまり意味がありません。 悪い乱数ジェネレーターがモンテカルロシミュレーションを破壊する方法について、物理的で具体的な例はありますか? 注:PRNGがいかにRANDUひどいものになるかを見てきました。私は、明白ではないが、無邪気に見えるが最終的にバイアスを導入するジェネレーターの例に興味があります。

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
Adams-BashforthアルゴリズムよりもAdams-Moultonを使用する相対的な利点は何ですか?
私は、2つの空間次元と時間で2つの結合PDEのシステムを計算的に解いています。関数の評価には費用がかかるため、マルチステップメソッド(Runge-Kutta 4-5を使用して初期化)を使用したいと思います。 5つの以前の関数評価を使用するAdams-Bashforthメソッドは、グローバルエラー(これは、以下で参照するWikipedia記事場合です)で、ステップごとに1つの関数評価(PDEごと)が必要です。O (h5)O(h5)O(h^5)s = 5s=5s=5 一方、Adams-Moulton法では、ステップごとに2つの関数評価が必要です。1つは予測ステップ用で、もう1つは修正ステップ用です。繰り返しますが、5つの関数評価が使用される場合、グローバルエラーはです。(ウィキペディアの記事では)O (h5)O(h5)O(h^5)s = 4s=4s=4 では、Adams-BashforthよりAdams-Moultonを使用する理由は何ですか?関数の評価回数が2倍になると、同じ次数のエラーが発生します。直観的には、予測子修正子メソッドが好ましいはずですが、誰かがこれを定量的に説明できますか? 参照:http : //en.wikipedia.org/wiki/Linear_multistep_method#Adams.E2.80.93Bashforth_methods

3
ソフトウェアのベストプラクティスに関する引用可能なリファレンス
現在、博士論文を書いています。私は博士号のかなりの部分を既存の科学コードのクリーンアップと拡張に費やし、以前は使用されていなかったソフトウェアエンジニアリングのベストプラクティスを適用しました。これについては論文で書きたいと思います。単純に「ユニットテストを追加しました」と言うのではなく、次のように書きたいと思います。 J. Doeは1975年にユニットテストを発明しました[ 23 ]。Bloggsによる最近の研究ら[ 24 ]のユニットテストは、73%によってソフトエラーの発生率を低下させることが... 234の別々のユニットテストは、Timpkinsによって作成されたのxUnitフレームワークによって管理される、コードベースに追加された示されたら[ 25 ][ 23 ][23]^{[23]}[ 24 ][24]^{[24]}[ 25 ][25]^{[25]} 広く受け入れられているソフトウェアエンジニアリングのベストプラクティスへの引用可能な学術文献(できれば、DOI、BibTeXなどを入手できる査読付きジャーナルの記事)を探しています。 単体テスト バージョン管理 モジュール化/懸念の分離 プロファイリング情報に基づいたパフォーマンスプロファイリング/最適化 バグ/問題追跡 最初の発明と、その後の有効性の評価に関する情報を探しています。このようなものすべてを1か所にまとめたレビュー記事があれば、さらに良いことです。

1
倍精度の最新GPUを備えたPythonを使用した科学計算
Pythonを使用して、新世代(K20など)GPUで倍精度科学計算を使用した人はいますか? この技術は急速に進化していることを知っていますが、現在これを行う最善の方法は何ですか?GPUは、人気のある科学的なPythonライブラリnumpyとscipyの範囲外であり、theanoを使用したかったのですが、GPUにはfloat32精度しか使用していないようです。googleがpython gpuの検索結果を提供できることは承知していますが、メーカーに会うために道を進んでいるかどうかに関係なく、プロジェクトのリストよりも多くの洞察を望んでいます。
14 python  gpu  precision 

3
反復法の比較:反復回数とCPU時間
ランダム正方行列を反転させるための2つの反復法を比較しています。マトリックスはランダムであるため、すべてのテストケースは、異なる量の反復と異なる経過時間の両方を取ります。私の質問は、平均CPU時間に加えて、メソッドを比較するための有用な情報である両方のメソッドによって取得された反復の平均値です。

3
いくつかのPDE問題を数値的に解決する場合、変数のスケーリングは不可欠ですか?
半導体シミュレーションでは、方程式が正規化された値になるようにスケーリングされるのが一般的です。たとえば、極端な場合、半導体の電子密度は18桁以上変動する可能性があり、電界は6桁(またはそれ以上)規模で変化する可能性があります。 しかし、論文はこれを行う理由を実際に示していない。個人的には、実際の単位で方程式を扱って満足していますが、これを行う数値的な利点はありますか、そうでなければ不可能ですか?倍精度では、これらの変動に対処するのに十分な桁があると思いました。 両方の答えは非常に便利です、どうもありがとう!

2
FeniCS:高次要素の視覚化
FEniCSをいじり始めたばかりです。3次要素でポアソンを解いているので、結果を視覚化したいと思います。ただし、plot(u)を使用すると、視覚化は結果の単なる線形補間になります。VTKに出力するときにも同じことが起こります。私が作業している別のコードで、高次の要素をアップサンプリングして、実際にParaviewで高次に見えるようにするVTK出力機能を作成しました。FEniCSにはこのような(またはそれ以上の)ものがありますか?

4
固定数のRHS評価のための最適なODEメソッド
実際には、IVPを数値的に解く実行時間 は多くの場合、右辺(RHS)の評価期間によって支配されます。したがって、他のすべての操作は即時であると仮定します(つまり、計算コストなし)。IVPを解決するための全体的な実行時間が制限されている場合、これはの評価回数制限に相当するいくつかの。X (T 0)= X 0 F F N ∈ Nバツ˙(t )= f(t 、x (t )) 以下のための T ∈ [ トン0、t1]x˙(t)=f(t,x(t)) for t∈[t0,t1] \dot{x}(t) = f(t, x(t)) \quad \text{ for } t \in [t_0, t_1] x (t0)= x0x(t0)=x0 x(t_0) = x_0 ffffffN∈ NN∈NN \in \mathbb{N} 最終値のみ関心があります。x (t1)x(t1)x(t_1) このような設定で最適なODEメソッドを選択するのに役立つ理論的および実用的な結果を探しています。 たとえば、場合、幅明示的な2つのオイラーステップまたはミッドポイント法を使用した幅 1つのステップを使用してIVPを解くことができます。どちらが望ましいかはすぐにはわかりません。大きい場合は、もちろん、マルチステップメソッド、反復ルンゲクッタスキームなどについても考えることができます。(t …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.