計算科学

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

3
行列の最小固有ベクトルを計算する
matlab eigsは私に行列の最小固有ベクトルの悪い近似を与えているようです。 私はより正確ないくつかの遅い方法を使用できると思います... 私はラパルシアン行列(「fiedler」ベクトルとして知られている)の2番目に小さい固有ベクトルを見つけようとしています。もちろん、ラプラシアン行列の最小の固有ベクトルが定数ベクトルであることは知っています。 より正確な方法のための提案はありますか? PS上記のすべてにおいて、「最小の固有ベクトル」と言うとき、私は最小の大きさの固有値に関連付けられた固有ベクトルを意味します。

2
水蒸気の分子動力学シミュレーション?
私は水蒸気でMDをしようとしています。私が知っているように、SPC、SPC / E、TIP3Pなどの液体水にはいくつかの水モデルが存在しますが、それらは水の蒸気状態にも適用されますか?そして、液体と蒸気水のシミュレーションの違いは何ですか?

4
MPIメッセージに優先順位を付けることはできますか?
私が理解している限り、非ブロッキングポイントツーポイントMPIメッセージ(IsendおよびIrecv)が受信される順序は、それらが送信される順序と一致しています。特定のメッセージを他のメッセージよりも優先する方法はありますか? たとえば、マルチレベルアルゴリズムがあり、高解像度のソリューションがノンブロッキングコールで送信され、細かいメッセージが送信されている間に粗いレベルの計算が行われます。ただし、低解像度のソリューションを送信するときは、それらを優先してください(これらは本質的にブロックされています)。 また、エクサスケールに移行するときに、これが他のアルゴリズムに役立つ可能性があることも想像できます。一部のメッセージは「クリティカルパス」にあり、他のメッセージはそうではありません。
8 mpi 

4
インデックスを使用した対称正定行列の生成
CGのテストケースを実行しようとしていましたが、以下を生成する必要があります。 対称正定行列 サイズ> 10,000 フルデンス 行列インデックスのみを使用し、必要に応じて1つのベクトル(A(i,j)=x(i)−x(j)(i+j)A(i,j)=x(i)−x(j)(i+j)A(i,j) = \dfrac{x(i) - x(j)}{(i+j)}) 条件番号が1000未満。 私が試してみました: を使用A=rand(N,N)してランダム行列を生成し、それA'AをSymにします。PD。[これにより条件数が増加します] 示されているようにベクトルのアプローチを使用しますが、(x,i,j)SymとPDを確実にする関数を取得できないようです。 多くの実験の後、私は思いつきました: a(it,jt) = (vec(it)+vec(jt))/((it-1)^2+(jt-1)^2);もしit≠jtit≠jtit \neq jt a(it,it) = x(it)もしit=jtit=jtit=jt しかし、これは約500x500までのPDです。 XLATMR。[すべてのグレーディングとスケーリングでは、理解するのが難しすぎます。特に、基礎となる線形代数が理解できないため] 誰かが上記の要件を満たすx(ベクトル)とi、j(指数)の関数をくれますか?

2
FFTがDFTよりも効率的になるには、いくつのフーリエ振幅を計算する必要がありますか?
複雑な2次元配列の少数の低周波数フーリエ成分のみを計算する必要があります。入力配列が変わると、同じフーリエ成分を何度も計算します。明らかに、フーリエ成分が1つだけ必要な制限では、私が求めている成分を与えるDFT行列を作成し、その行列を繰り返し乗算するのが最も高速です。 もう1つの制限では、すべてのフーリエ成分が必要な場合は、FFTを使用する方が高速です。 どの時点で、配列のFFTを計算し、単純に私が求めているコンポーネントを引き出す方が速くなりますか? それが違いを生む場合、私の特定の状況では、入力配列はようなものになります。私はMATLABを使用しているので、FFTはFFTWを使用して実行され、行列DFTの行列乗算は、MATLABが内部で使用する行列乗算アルゴリズムを介して実行されます。256 × 256256×256256\times256

3
高性能コンピューティングコードのプロファイリングに関するリファレンスリクエスト
FortranとCでさまざまな行列アルゴリズムのコードを記述しています。ただし、VTuneを使用してコードをプロファイリングすると、通常は完全に理解できない用語に出くわします。ゼロからかなり高度なレベルまでプロファイリングを学習するための良いリソースはありますか? 私は数値コードのプロファイリングを楽​​しみにしていますが、他のコードのプロファイリングが異なっているとは思いません(私は間違っているかもしれません)。プロファイリングのチュートリアルが欲しいので、オンライン(無料)のPDFを好みますが、本やハンドブックは気にしません。 私はVTuneのハンドブックを読んでみましたが、それは中国語の本を読んで中国語を勉強しようとするようなものです。 さらに、VTuneは最善の方法ですか?私は本当にGUIが好きで、インテルMKLを使用しているので、Valgrindよりも優れていると思いました。


4
DAXPY、DCOPY、DSCALはやりすぎですか?
インテルMKLにリンクすることにより、CGをFORTRANに実装しました。 次のようなステートメントがある場合:(Wikipediaを参照) p=r; x=x+alpha*p r=r-alpha*Ap; またはQMRの類似のもの(はるかに多い) v_tld = r; y = v_tld; rho = norm( y ); w_tld = r; z = w_tld; xi = norm( z ); (and more) DAXPY、DCOPY、DSCALなどのBLASレベル1実装を使用することには意味がありますか? 私の質問の動機は: アルゴリズムの実装は2つあります。NormsとMatVecsのみをMKLにリンクしたもの。コピー、スケーリング、追加は、Fortranの組み込み関数と、可能なすべてのサブルーチンがBLASによって実行される別の関数によって行われます。 私は、BLASより速くなることはできないという考えでした。しかし、Fortranの組み込み関数を使用する私のコードは、BLASレベル1サブルーチンを使用するコードよりも100%高速であることがわかりました(FWIW、これは小さな問題ではありませんでした。 GB RAM)。私は2スレッドで(2コアマシンで)両方を実行ifort QMR.f90 -mklしていましたMKL_DYNAMIC=TRUE 私がいたSOの質問を BLASの拡張に関するけど、私は自分のコードにBLASレベル1が含まれるようにしようとしたとして、私のコードは遅く、遅くなって続けました。 私は何か間違ったことをしていますか、これは予想されますか? また、BLASを拡張してy = 2.89*xbyのような自明ではない操作を行うことは理にかなっていDCOPY(n,2.89*x,1,y,1) or even DSCAL then DCOPYますか? また興味深いのは、パフォーマンスDDOTをDNRM2向上させることです。彼らは倍精度の乗算を実行するため、並列に配置すると役立つ可能性があるという事実に起因しました。 …

2
摂動線形システムの初期推定
線形システムを、共役勾配法やリチャードソン反復法などの反復法で解くとします。次に、マトリックスと右側でわずかに摂動がある線形システムを解こうとします。たとえば、です。〜A 〜U = 〜FA u = fAu=fAu = fあ〜あなた〜= f〜A~u~=f~\tilde A \tilde u = \tilde f 反復法の開始値として古いソリューションを使用することは意味がありますか?「意味をなす」とは、反復法の実行時間に信頼できる利得があることを意味します。これは、アドバイスされた実践と見なすことができるほど、一般に改善につながるのだろうか。あなた〜0= uu~0=u\tilde u_0 = u 私が考えているアプリケーションは、適応有限要素から来ています。粗いグリッドで解を計算し、より細かいグリッド(適応法に基づいて生成された可能性がある)で解を見つけたい場合、任意の反復アルゴリズムの開始値は、より細かいグリッドに。同様に、非線形問題の解法に関与するニュートン法またはピカール反復法は、それがまったく意味をなさない場合、その方法で「ブースト」することができます。〜U Uあなたuuあなた〜u~\tilde uあなたuu


1
2部グラフの最小頂点カバーアルゴリズムをテストするためのデータセットはどこにありますか?
2部グラフで最小頂点カバー/最大カーディナリティの一致を見つけるためのアルゴリズムの単純な実装で遊んでいます。ただし、検証に使用できるいくつかのテストデータセットを正しく検索できなかった場合は、検索に問題があるようです。 紙で確認できる簡単な例を考案するのは簡単ですが、もっと大きくてトリッキーなベンチマークが欲しいと思います。 私の研究から、たとえば機械学習の問題のようなベンチマークデータを見つけることができることを覚えているので、私は尋ねています。 ポインタはありますか?

2
疑似コードの辞書
疑似コードで辞書(=マップ)を表現するための良い、一般的な方法は何ですか?つまり、基本的にキーの値を格納し、すべてのキーと値のペアを反復処理し、特定のキーが含まれているかどうかをテストできるデータ構造です。以下のような(この場合は無意味な)Pythonコードを念頭に置いています。 D = {} D[1] = 2 for key, value in D.items(): # do something with key and value if key in D: # do something そして、それを出版物で疑似コードとして表現したいと思います。数学的に考えると、辞書は関数であり、関係はペアのセットなので、次のようなものを書く D ← ∅ D[1] ← 2 for all (k, v) ∈ D 実際に意味があります。しかし、それは理解できますか?そしてテストのために、私は使用します if k ∈ keys(D) それとも、よりリテラルになるほうがいいですか、例えば D ← empty dictionary for …

1
ポリャ分布上の数値積分の提案
この問題は、ベイジアン統計モデリングプロジェクトから発生します。私のモデルで計算するために、被積分関数の一部が「ポリヤ」または「ディリクレ多項式」分布である積分を実行する必要があります。 p(n∣α)=(N!)Γ(Kα)Γ(α)KΓ(N+Kα)∏i=1KΓ(ni+α)ni!p(n∣α)=(N!)Γ(Kα)Γ(α)KΓ(N+Kα)∏i=1KΓ(ni+α)ni!p(n\mid \alpha) = \frac{(N!) \Gamma(K\alpha)}{\Gamma(\alpha)^K \Gamma ( N + K\alpha)} \prod_{i=1}^K \frac{\Gamma(n_i + \alpha)}{ n_i!} ここで、およびN = ∑ K i = 1 n iは整数、n = (n 1、n 2、… 、n K )、およびα > 0です。一体型Iの計算に願い、∫ ∞ 0(他の項)のp (nは| α )D α、小規模に適していますNninin_iN=∑Ki=1niN=∑i=1KniN = \sum_{i=1}^K n_in=(n1,n2,…,nK)n=(n1,n2,…,nK)n = \left(n_1, n_2, \dots, n_K\right)α>0α>0\alpha > 0∫∞0(other …

1
完全に一致するレイヤーを持つ適応メッシュの改良?
摩擦断層インターフェースを使用して弾性波方程式を解くためのアダプティブメッシュリファインメント(AMR)コードがあります(興味のあるユーザー向けのChomboに基づいています)。私たちが実現したことの1つは、結果が外側の吸収境界(単純な特性境界条件として実装する)の存在によって強く影響されていることです。参考までに、現在、Colellaと共同編集者の多次元Godunov(Finite Volume)スキームを使用しています。私たちはこれらの方法に慣れていません(すでにChomboにあるので使いやすいだけです)が、時間内に適応する必要があります。 完全に一致するレイヤーや高次の境界条件など、適応型タイムステッピングを使用したAMRでより効率的な吸収境界条件の経験がある人がいるのではないかと思います。この道を下らない理由はありますか?私の限定的な検索では、これについての有用な参照や言及が文献に実際に現れていません。 編集:これは有限体積法であることを明確にしました。

4
SciPyを使用したスプラインの高次導関数
私はPythonで私のデータに合うようにスプラインを作成しました: spline=scipy.interpolate.UnivariateSpline(energy, fpp, k=4) 使用したい方程式には、n = 2とn = infinityの合計が含まれます。ここで、nは点Eoでの微分の次数です。ただし、使用; UnivariateSpline.__call__(spline, e0, nu=n) 値を呼び出すために、4階差分を超える値を取得できません。この関数を評価するために人々が知っている他の関数はありますか?約8次の上には、値をゼロに設定する前置乗算器がありますが、それでも4次より高くする必要があります。

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