計算科学

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

4
Pythonで記述されたコードを高速化するために使用できるツールまたはアプローチは何ですか?
背景: Krylov部分空間法を使用して行列指数ベクトル積を計算するコードをMATLABからPythonに移植したいと思うかもしれません。(具体的には、この論文で説明されているアルゴリズムを使用するJitse Niesenのexpmvp関数。)ただし、コンパイル済みライブラリから派生したモジュールの関数を頻繁に使用しない限り(つまり、多くの組み込みのPython関数で)、それは非常に遅い可能性があります。 質問:パフォーマンスのためにPythonで記述したコードを高速化するのに役立つツールまたはアプローチはありますか?特に、プロセスを可能な限り自動化するツールに興味がありますが、一般的なアプローチも歓迎します。 注: Jitseのアルゴリズムの古いバージョンを使用していますが、しばらく使用していません。このコードを高速にするのは非常に簡単かもしれませんが、良い具体的な例になりそうで、自分の研究に関連しています。この特定のアルゴリズムをPythonで実装するための私のアプローチについては、まったく別の質問です。

9
C ++でパラメータースタディを実行する良い方法は何ですか
問題 現在、有限要素ナビエストークスシミュレーションに取り組んでおり、さまざまなパラメータの影響を調査したいと思います。一部のパラメーターは、入力ファイルまたはコマンドラインオプションで指定されます。他のパラメーターはMakefileでフラグとして提供されるため、これらのオプションを変更するたびにコードを再コンパイルする必要があります。パラメータ空間を体系的に探索するための良い方法についてアドバイスをもらいたいと思います。 この種のことを支援できる便利なC ++ / Pythonライブラリ/フレームワークはありますか?たとえば、コマンドライン引数で入力ファイルオプションをオーバーロードすることができるため、boost.Program_optionsを発見することは大きな助けになりました。また、一部の人々が各ケースを非常に効果的に説明するジョブファイルを使用しているのを見たことがあり、同僚はコメントブロックとしてパラメーターをvtuファイルに書き込むこともできると提案しました。 おそらく、これに多くの時間を投資する価値はまったくありませんか?それは単なる気晴らしと時間の浪費であり、テストプロセスのブルートフォースとアドホックを筋肉だけで行うのが最善ですか? いくつかの考え 私は現在ほとんど手作業で仕事をしており、次の問題に直面しています。 テストケースの命名。アンダースコアで区切られた実行パラメーターなどの名前のフォルダーに結果を保存しようとしましたRe100_dt02_BDF1...。これらは、省略しすぎるとすぐに長くなり、読みにくくなります。また、実数のパラメータにはa .が含まれていますが、これは厄介です。 実行データのロギング。時々、端末に書き込まれ、テキストファイルに保存された結果を確認したいことがあります。たとえば、StackOverflowからのこの回答は多少役立ちますが、解決策は少し煩わしいようです。 パラメータに従ってデータをプロットします。さまざまなログファイルから関連するデータを1つのファイルに収集し、それをプロットするのにかなり時間がかかります。より良いシステムであれば、おそらくこれがより簡単になります。 データに関するコメントの記録。結果を調べた後、テキストファイルにコメントを書き込みますが、これを結果フォルダーと同期させることは難しい場合があります。

7
量子力学の法則はシミュレーションでどこで壊れますか?
物理学の学士号を取得している人として、分子シミュレーションを始めたとき、私はややスキャンダルに見舞われました。最も詳細で計算コストの高いシミュレーションでさえ、第一原理から水の完全な挙動を定量的に再現できないことを発見したのは、ちょっとしたショックでした。 以前は、量子力学の基本法則は解決された問題であるという印象を受けていました(重力は別として、通常、分子スケールでは無関係であると想定されています)。ただし、これらの法則を拡大して、水素原子よりも大きいまたは複雑なものに適用しようとすると、予測力が低​​下し始めます。 数学の観点から、波動関数はすぐに複雑になりすぎて解決できず、波動関数をより扱いやすくするには近似(Born-Oppenheimerなど)が必要であることを理解しています。また、研究中のシステムの時間および空間スケールが増加するにつれて、これらの近似により誤差がさらに伝播することも理解しています。 これらの近似誤差の最大かつ最も重要な性質は何ですか?これらのエラーを直感的に理解するにはどうすればよいですか?最も重要なことは、分子全体および分子の集団を正確にシミュレートできるab-initioメソッドにどのように移行できるかということです。人々がこの種のシミュレーションを開発するのを妨げている最大の未解決の問題は何ですか?

16
計算科学における「2つは簡単、3つは難しい」の良い例
私は最近、メタ現象の定式化に遭遇しました:「2つは簡単、3つは難しい」(Federico Poloniによってこのように言い換えられます)。 特定の問題が2つのエンティティに対して定式化されると、比較的簡単に解決できます。ただし、3エンティティの定式化のアルゴリズムでは、難易度が大幅に増加し、場合によってはソリューションを実現不可能または実現不可能にすることもあります。 (フレージングをより美しく、簡潔で、正確にするための提案を歓迎します。) 計算科学のさまざまな分野(純粋な線形代数から始まり、包括的なターム計算物理学で終わる)の良い例は何ですか?

2
小さな行列式は、行列の悪条件を意味しますか?
正方の可逆行列があり、その行列式を取得し、そのを見つけた場合、det(A)≈0det(A)≈0\det(A) \approx 0これは行列の条件が悪いことを意味しますか? その逆も本当ですか?悪条件の行列の行列式はほぼゼロですか? Octaveで試したものを次に示します。 a = rand(4,4); det(a) %0.008 cond(a)%125 a(:,4) = 1*a(:,1) + 2*a(:,2) = 0.000000001*ones(4,1); det(a)%1.8E-11 cond(a)%3.46E10

5
ユーザーがMPI C ++インターフェイスから必要とする機能は何ですか?
MPI標準の3.0バージョンは、C ++インターフェイスを正式に削除しました(以前は非推奨でした)。実装では引き続きサポートされますが、MPI-3の新しい機能には、MPI標準で定義されたC ++インターフェイスがありません。詳細については、http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/を参照してください。 MPIからC ++インターフェースを削除する動機は、Cインターフェースよりも大きな価値がないことでした。「s / _ / :: / g」以外の違いはほとんどなく、C ++ユーザーが慣れている多くの機能は使用されませんでした(テンプレートによる自動型判別など)。 MPIフォーラムに参加し、MPI C関数への独自のC ++インターフェイスを実装している多くのC ++プロジェクトで作業している人として、MPIへのC ++インターフェイスの望ましい機能を知りたいと思います。私は何も約束しませんが、多くのユーザーのニーズを満たすスタンドアロンのMPI C ++インターフェイスの実装に興味があります。 はい、Boost :: MPI(http://www.boost.org/doc/libs/1_54_0/doc/html/mpi.html)に精通していますが、MPI-1機能のみをサポートしており、シリアル化モデルはRMAのサポートは非​​常に困難です。 私が気に入っているMPIへのC ++インターフェイスの1つは、Elemental(https://github.com/poulson/Elemental/blob/master/src/core/imports/mpi.cpp)のインターフェイスです。アプローチ。特に、MpiMapは本質的な問題を解決すると思います。
28 c++  mpi 


7
一般的な行列の最大固有値を計算する最速の方法は何ですか?
編集:固有値の大きさが1以上であるかどうかをテストしています。 大きなスパースな非対称行列の最大の絶対固有値を見つける必要があります。 eigen()EISPACKまたはLAPACKのQRアルゴを使用してすべての固有値を検索し、次にabs()絶対値を取得するために使用するRの関数を使用しています。しかし、私はそれをより速くする必要があります。 また、igraphRパッケージのARPACKインターフェイスを使用してみました。しかし、私の行列の1つでエラーが発生しました。 最終的な実装はRからアクセス可能でなければなりません。 おそらく同じ大きさの複数の固有値があるでしょう。 何か提案はありますか? 編集: 精度はする必要があるだけ1e-11です。「典型的な」行列はこれまででした。QR分解を行うことができました。ただし、より大きなものを使用することもできます。現在、Arnoldiアルゴリズムについて読み始めています。Lanczsosに関連していることを理解しています。386 × 386386×386386\times 386 EDIT2:「テスト」している複数のマトリックスがあり、変化しない大きなサブマトリックスがあることがわかっている場合。無視/破棄することは可能ですか?

4
正定対称(共分散)行列の逆行列を処理しますか?
統計とそのさまざまなアプリケーションでは、さまざまな用途で共分散行列を計算することがよくあります。場合によっては、さまざまな計算のためにこの行列の逆行列が必要になります(たとえば、この逆行列を(唯一の)中心行列とする2次形式)。このマトリックスの品質と使用目的を考えると、私は疑問に思います: 数値安定性の観点から、この逆を計算または使用する方法(2次形式または一般的な行列ベクトル乗算の場合)の最良の方法は何ですか?便利になる可能性のある因数分解?

5
numpyでインプレースで行列を置換
pythonのnumpyライブラリを使用して、行と列のいくつかの順序を変更することにより、密な正方形の遷移行列をインプレースで変更したい。数学的には、これは、行列に置換行列Pを事前乗算し、P ^ -1 = P ^ Tを事後乗算することに相当しますが、これは計算上合理的な解決策ではありません。 今私は手動で行と列を交換していますが、numpyには素敵な関数f(M、v)があり、Mにはn行と列があり、vにはnエントリがあるので、f(M、v)は更新されますMインデックス順列v。多分、インターネットの検索に失敗しているだけかもしれません。 このようなことは、numpyの「高度なインデックス作成」によって可能になるかもしれませんが、私の理解では、そのようなソリューションは適切ではありません。また、いくつかの単純な状況では、インデックス置換を個別に追跡するだけで十分かもしれませんが、これは私の場合は便利ではありません。 追加: 時々、人々が順列について話すとき、それらはランダムな順列のサンプリングを意味するだけです。例えば、統計のp値を取得する手順の一部として。または、可能なすべての順列をカウントまたは列挙することを意味します。私はこれらのことについて話していません。 追加: マトリックスはデスクトップRAMに収まるほど小さいが、思いがけずコピーしたくないほど大きい。実際には可能な限り大きなマトリックスを使用したいと思いますが、RAMに保持できないという不便さに対処したくありません。また、マトリックスに対してO(N ^ 3)LAPACK操作を行います。実用的なマトリックスサイズを制限します。私は現在、この大きな行列を不必要にコピーしていますが、これを置換のために簡単に回避できることを望みます。

8
PythonでModern Fortranコードをラップするには、どのパッケージを使用すればよいですか?
私は知っていて、f2py2eを使用して古いFortran 77コードをラップしましたが、私の理解では、新しいFortran 95コードでは機能しません。私は何を使うべきかを研究しましたが、fwrapとG3 f2pyに出会いましたが、どちらも現在の状態や基本的な使用法を超えた使用方法については説明していません。 また、f2pyのバージョンには第3世代のf2pyを使用するオプションがあることも確認しましたが、機能しないとコメントされています。これを考えると、私はどのプロジェクトをuniプロジェクトに使用すべきかわかりません。新しいコードにはどれを使うべきですか? PSこれは基本的にhttps://stackoverflow.com/questions/10665717/current-best-method-for-wrapping-modern-fortran-code-with-pythonと同じ質問であり、ここで尋ねるとより良い答えが得られることが示唆されました。
27 python  fortran 

3
BLAS、LAPACK、およびその他の線形代数ライブラリの関係は何ですか?
私が取り組んでいるプロジェクトのC ++線形代数ライブラリを検討しています。私がまだ把握していないことは、BLASとLAPACKを他の線形代数ライブラリに接続することです。 線形代数ライブラリに関するこの記事を見ると、次のことが興味深いことがわかりました。 一部のライブラリはBLASおよびLAPACKから独立しています 一部にはBLASとLAPACKが必要です 一部にはBLASおよびLAPACKへのオプションのインターフェースがあります そして、私が理解しているように、BLASとLAPACKを使用して線形代数の問題を直接解決できます。 一部のライブラリは、CおよびFortranで記述されたBLASおよびLAPACKライ​​ブラリに対する単なるC ++インターフェイスであり、他のライブラリは独自の代替ルーチンを実装していると想像できますが、 BLASおよびLAPACKへのオプションのインターフェイスの意味は何ですか?オプトアウトすることで失うものは何ですか?代わりにライブラリは何をしていますか? ライブラリは、単なるインターフェイス以上のものを提供しますか?たとえば、UMFPACKはCで記述されており、BLASおよびLAPACKへのオプションのインターフェースがあります。BLASとLAPACKが単独ではできないUMFPACK(または他のライブラリ)は何ができますか?

3
標準ライブラリのの計算コストはいくらですか?
分子シミュレーションで対処しなければならない主要な問題の1つは、距離に依存する力の計算です。我々は、分離距離の偶数乗持っている力と距離の機能を制限することができた場合は、そして私たちは、距離の二乗を計算することができ心配する必要はありません。ただし、奇数のべき乗がある場合は、を処理する必要があります。rrrr2=r⋅rr2=r⋅rr^2 = {\bf r \cdot r}rrrr=r2−−√r=r2r = \sqrt{r^2} 私の質問は、共通言語(C / C ++、Fortran、Python)などのライブラリに実装されている計算はどれくらい高価ですか?特定のアーキテクチャ向けにコードを手動で調整することで、本当に多くのパフォーマンスの改善が必要ですか?x−−√x\sqrt{x}
26 efficiency 

3
数値ODEソルバーの実装をどのようにテストしますか?
数値ODEソルバーのソフトウェアライブラリで作業を開始しようとしていますが、ソルバー実装のテストを定式化する方法に苦労しています。私の野望は、最終的に、ライブラリには、非スティッフな問題とスティッフな問題の両方のソルバーと、少なくとも1つの暗黙的なソルバー(多かれ少なかれMatlab のodeルーチンの機能と同等)が含まれるため、テスト方法論はさまざまな問題の種類と異なるソルバーの基準。 私の問題は、このテストをどこから始めるべきかわからないことです。アルゴリズムの出力をテストするいくつかの異なる方法を考えることができます。 分析的な解決策がある問題をテストし、返されたすべてのデータポイントについて数値的解決策が許容範囲内にあることを確認します。これには、さまざまなソルバーで使用したいすべての特性(剛性、暗黙的問題など)を示す多くの分析問題についての知識が必要です。 このメソッドは、ソルバーメソッドの結果をテストします。したがって、ソルバーが実際に機能するという保証はなく、特定のテスト問題に対して機能するというだけです。したがって、ソルバーが機能することを自信を持って確認するには、多数のテスト問題が必要だと思います。 私が実装する予定のアルゴリズムを使用して、いくつかのタイムステップでソリューションを手動で計算し、ソルバーで同じことを行い、結果が同じであることを確認します。これには、問題の真の解決策に関する知識は必要ありませんが、かなりの実地作業が必要です。 一方、この方法はアルゴリズムのみをテストします。これは私には問題ありません。4 次のルンゲクッタが機能することを他の誰かが証明した場合、私は必死に感じる必要はありません。ただし、テストデータを生成するための適切な方法がわからないため、テストケースの作成が非常に面倒になるのではないかと心配しています(手作業を除き、手間がかかります...)。 私の現在の知識では、上記の両方の方法には重大な制限があります。最初の方法のテスト問題の良いセットがわからず、2番目の方法のテストデータを生成する良い方法もわかりません。 数値ODEソルバーを検証する他の方法はありますか?検証する必要のある実装に関する他の基準はありますか?そこからODEソルバをテストする上の任意の良い(無料)リソースがある1は? 編集: この質問は非常に幅広いので、少し明確にしたいと思います。作成するテストスイートは、主に2つの目的を満たします。 ソルバーが解決しようとしている問題に対して、ソルバーが期待どおりに機能することを確認します。言い換えれば、非スティッフな問題のソルバーは、スティッフな問題にバナナを使用することができますが、非スティッフな問題ではうまく機能するはずです。また、ライブラリに他のソルバーがより高い精度を提供している場合、非常に正確な結果を適用する必要はないかもしれません-「十分に正確」です。したがって、私の質問の一部は、どのソルバーにどのテストを使用する必要があるかです。または、少なくとも、どのように判断するのか。 ライブラリのインストール時の健全性テスト。これらのテストは、複雑である必要はありません(する必要はありません)。5秒未満で実行できる非常に基本的なものですが、何かがおかしい場合はユーザーに警告します。したがって、非常に単純なテストを構築する方法も必要ですが、それでもライブラリの状態について何かを教えてくれます。 1はい、私は私の目をグーグルでてきたが、私は何を見つけるのほとんどはの顕著な例外を除いて、非常に些細な例で講義ノートであるCWI ODEテスト・バーリからセットならば、私は知らない、またはどのように、私はテストしたいものよりもはるかに洗練されたソルバーを扱うため、私の目的に使用できます...
26 ode 

5
3Dポイントのセット用の最速のDelaunay三角形分割ライブラリ
3Dポイントの場合、何百万ものセットのドロネー三角形分割を実行するための最速のライブラリはどれですか?利用可能なGPUバージョンもありますか?反対側から、同じポイントのセットのボロノイテッセレーションがあると、(パフォーマンスの点で)ドロネー三角形分割を取得するのに役立ちますか?

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