計算科学

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

1
OpenFoamとFiPy
私が取り組んでいるプロジェクトの有限ボリュームの自動化ソリューションパッケージを学習して利用する必要があり、それをこれら2つのパッケージに絞り込みました。両方のパッケージの経験があり、比較についてコメントできる人がいるかどうか疑問に思っていました。両方のパッケージの同様の目標を考えると、オンラインで比較する方法があまり見つからないことに少し驚いています。 私の感じでは、FiPyはPythonベースなので学習/実装が簡単ですが、OpenFoamは広く採用されているため、より堅牢で機能が豊富なのではないでしょうか。どちらのパッケージにも、非常に信頼できる組織があります。

1
最大で8つのコアで並列密行列反転に使用するアルゴリズムは何ですか?
このための既存のライブラリがないように見える、使用している言語の並列密行列反転を実装する必要があります(特に、メッセージパッシングにIDLブリッジを使用するIDL)。C ++でMPIを使用した経験から、並列プログラミング方法に精通していますが、主に並列FFTおよびNボディメソッドが対象です。線形代数の計算方法について、シリアルまたはパラレルの経験や知識はほとんどありません。 私が探しているのは、(現在はシリアル)IDLタスクを実行するマシンには8つのコアがあるため、少数のコアに適した、堅牢で安定した並列行列反転アルゴリズムの明確な疑似コード記述です。実際には、おそらく4つだけを使用して、他のタスクのためにコアを解放します。 このタスクによく知られたアルゴリズムの範囲がある場合は、最先端のパフォーマンスよりも単純さを優先します。

2
不均一グリッドの離散
私は数値手法に関する本を読んでおり、離散L2L2L^2ノルムの2乗は次のように定義されます||x||22=h∑1Nx2i||x||22=h∑1Nxi2||x||^2_2=h\sum_1^Nx^2_i すべてのポイントに「重み」、つまりhhhが割り当てられるため、これはすべてのポイントの値の2乗の平均に似ています。これは実際には、連続積分の近似から来ています。一方で、グリッドが間隔不均一である同様のノルムhihih_iを|として定義できますか?| x | | 2 2 = N ∑||x||22=∑1Nhix2i||x||22=∑1Nhixi2||x||^2_2=\sum_1^Nh_ix^2_i これは連続積分をこのように近似することもできるので自然に思えますが、本の中で疑わしいと思ったので、何かが足りないのです!したがって、不均一なグリッドがあり、この基準でいくつかの見積もりを作成したい場合、どのように定義する必要がありますか?
8 pde 

2
この制限付き三体問題のスティッフな方程式を数値的に解く方法は?
円形の制限された3体問題を解決する際に、困難な方程式に遭遇しました。[オブジェクトは、2Dスペースに固定された2つの重力ソースによって引き起こされる重力の影響を考慮して移動しています。] 方程式は次のとおりです。 バツ」= − G M1(x − x1)(x − x1)2+ y2√3− − G M2(x − x2)(x − x2)2+ y2√3バツ″=−GM1(バツ−バツ1)(バツ−バツ1)2+y23−−GM2(バツ−バツ2)(バツ−バツ2)2+y23x''=-\frac{GM_1 (x-x_1)}{\sqrt{(x-x_1)^2+y^2}^3}--\frac{GM_2 (x-x_2)}{\sqrt{(x-x_2)^2+y^2}^3} y」= − G M1y(x − x1)2+ y2√3− − G M2y(x − x2)2+ y2√3y″=−GM1y(バツ−バツ1)2+y23−−GM2y(バツ−バツ2)2+y23y''=-\frac{GM_1 y}{\sqrt{(x-x_1)^2+y^2}^3}--\frac{GM_2 y}{\sqrt{(x-x_2)^2+y^2}^3} オイラー法もルンゲクッタもまたは付近のプロパティが適切でないため機能しません。デリバティブの変化が速すぎます。シミュレーションは正しく解決できません。オブジェクトが重力ソースにぶつかるのは簡単すぎます。(x1、0 )(バツ1、0)(x_1, 0)(x1、0 )(バツ1、0)(x_1, 0) どうすれば修正できますか? ありがとうございました!
8 ode  simulation 

1
大きなインデックス配列のテストと視覚化
節点不連続ガラーキン法をすぐに実装し、メッシュと多項式データを前提として、計算する必要がある基本的なインデックス配列を知る前にこれを実行します。 前のコードで遭遇した問題は、内部/外部トレースのインデックス付けなどの計算で行った微妙な間違いでした。単純なテストケースでは発生しなかった問題が大きなメッシュで発生し、境界条件が適切に課されていないため、通常はこれにより不安定なスキームが生成されます(10ステップごとにシミュレーションを監視するだけで、局所的な問題が発生する可能性はありません)。 。 私は、経験豊富な人々が、インデックス配列に対して実行して、それらが正しいことを確信するための優れたテストを知っていることを望んでいます。求積法、導関数などは非常に簡単にテストできますが、他のことはわかりません。 私が過去に行ったいくつかのテストでは、内部法線を外部法線に追加しています。これにより、0または+ -2が得られます。コード変更の結果をすばやく確認できると便利ですが、インデックス作成でこれを行う意味のある方法は考えられません。 また、これらは四角形や六角形にも適用され、曲線要素の可能性があります。動作中のライブラリと比較する既存のコードはあまりありません。 比較するために既存の正解に依存しない、私が書ける優れた単体テストがある場合のボーナスポイント。私は多くの優れたヒューリスティックスで解決します。

9
Cを学ぶ必要がありますか?
私はサイエンティフィックコンピューティングの博士課程の学生で、過去数か月間、PythonとC ++を正しい方法で学ぶのにかなりの時間を費やしました。私はC ++をよく学んだと感じています。良い参考書を手元に置いておけば、Pythonを使用して自分のやりたいことができるようになります。 また、MATLABを十分に理解しているため、自分のアイデアのプロトタイプを作成し、解決策を得ることができます。(もし私が最初の選択であるPythonをコーディングするのに飽きすぎている場合)。 CとC ++を1つの "C / C ++"にまとめる必要があることをここで何度か読んだことがあります。それらは異なる動機を持つ非常に異なる言語であり、私はその見解に完全に同意します。 私は常に学習しているのでC ++を "知っている"と主張することはできませんが、それをどのように使用すべきか、どのように使用すべきでないかはほとんど理解していると思います。私が学んだ最初の言語はCでしたが、最後に使用してから非常に長くなります。私の質問は本質的にこれです: 私がMATLAB、C ++、Pythonを知っていることを考えると、Cの学習に時間をかけるべきですか?上記の3つの言語についての知識は、コーディングするのに十分ですか? 私の研究は、数値線形代数の側面に関するものですが、離散イベントシミュレーション/確率論的プロセスのコンサルティングも行っています。私の意図は業界で働くことです(私の顧問は、C ++を学ぶことを勧めたので、彼には言語の個人的な好みはありませんが、雇用を続けることができます)。

1
非線形波動方程式-有限要素または有限差分
非線形双曲線方程式、有限要素法または有限差分法を解くときに、どちらがより有利であるか知りたいのですが?衝撃をとらえるにはどちらの方法が良いでしょうか 詳細な回答/参照を提供することは可能ですか? また、無限導波路の非反射境界条件の問題を解決したいのですが、そのような場合にゾンマーフェルト放射条件を使用できますか?

2
三角関数の比率の計算
関数を計算する必要があります: および g(x)=sinaxf(x )= 罪− 1バツバツf(x)=sin−1⁡xx f(x) = \frac{\sin^{-1}x}{x} ここで∈[0、1]とのx∈[0、πg(x )= 罪X罪バツg(x)=sin⁡axsin⁡x g(x) = \frac{\sin a x}{\sin x} ∈ [ 0 、1 ]a∈[0,1]a\in[0,1]及び(しばしば非常に小さいX«1)。これらのような「特別な」機能のための非常に正確なアルゴリズムを生成する一般的な方法はありますか?x∈[0,π2]x∈[0,π2] x\in[0,\frac{\pi}{2}]x≪1x≪1x\ll 1

2
確率変数の関数の偏微分の近似
ましょ伊藤プロセスである D X T = A (X T、T )のD T + B (XはT、T )D W T ここでW Tウィーナー過程です。バツtXtX_tdバツt= a (Xt、t )dt + b (Xt、t )dWtdXt=a(Xt,t)dt+b(Xt,t)dWt dX_t=a(X_t,t)dt + b(X_t,t)dW_t WtWtW_t この方程式の解の数値近似は、ミルスタインによって提案されています。 バツT= Xt+ a (Xt、T )Δ T + B (Xt、T )Δ Wt+ 12b (Xt、t )∂b (Xt、t )∂バツ( Δ W2t- Δのトン)XT=Xt+a(Xt,t)Δt+b(Xt,t)ΔWt+12b(Xt,t)∂b(Xt,t)∂x(ΔWt2−Δt) X_T=X_t+a(X_t,t) …

2
実変数の凸包上の凸の組み合わせの最大値
私は次の線形プログラムを持っています: ここで、X \で\ mathbb {R} ^ nは、\ mathbf {1} ^ T X意味のエントリの和X、および知られており、明確に明確な正のエントリがあります。MaximizeSubject toaTxxmin≤x≤xmax1Tx=1MaximizeaTxSubject toxmin≤x≤xmax1Tx=1 \begin{array}{cc} \text{Maximize} & a^T x \\ \text{Subject to} & x_{\min} \leq x \leq x_{\max} \\ & \mathbf{1}^T x = 1 \end{array} x∈Rnx∈Rnx \in \mathbb{R}^n1Tx1Tx\mathbf{1}^T xxxxaaa LPソルバーを使用せずに上記を簡単に解決する方法を探しています。従うべき迅速な手順はありますか?(シンプレックス以外)。 ありがとうございました!

2
GMPの大規模アレイ
mpz_t A [100000]という大きな配列を使用したい場合、コンパイル中に「セグメンテーション違反(コアダンプ)」が発生しました。これを解決する簡単な方法はありますか?

3
角度の整数倍の正弦と余弦の評価
円筒調和関数を評価する場合、三角関数とを評価する必要があります。これは、大きな整数とます。Cコードでこれを行う最良の方法は何ですか?現在、私はの角度評価しているだけですが、標準ライブラリは大きな引数で精度を失うと思われます。引数の大きさを再帰的に減らすために、ダブルアングルの数式などを使用することを検討していましたが、結果的にエラーが増えるかどうか疑問に思っています。罪(M θ )M θ ∈ [ - π 、π ] M θcos(M θ )cos⁡(mθ)\cos(m\theta)罪(M θ )sin⁡(mθ)\sin(m\theta)メートルmmθ ∈ [ - π、π]θ∈[−π,π]\theta\in[-\pi,\pi]M θmθm\theta

1
対流拡散演算子の前処理に代数マルチグリッドを使用する
線形連立方程式を解くために、FEM離散化とPETScに基づいてNavier Stokesを実装しました。効率的な解の手順を作成するために、私は「非圧縮性流れのための線形化されたナビエ・ストークス方程式の効率的な事前調整」(Silvester et al。)に従って、Schur補完アプローチを提案します。メッシュサイズとタイムステップに関係なく、ほぼ一定の反復回数があり、このホワイトペーパーでも説明されている単純なベンチマーク(2D駆動キャビティフローと後向きステップ)の反復数がほぼ一定であるという意味で、これは非常にうまく機能します。しかし、現時点では、並列速度直接ソルバー(MUMPS)で上部速度ブロックを解きます。Pressure Schurブロックは、論文で提案されているように、不正確なソルバーで解かれます。 この論文では、著者は、各外部反復で単一のマルチグリッドVサイクルを実行し、この離散対流拡散演算子の逆数を近似するためにポイントガウスザイデルスムーザーを使用することを提案しています。幾何学的なマルチグリッド法を簡単に使用できないため、直接ソルバーを1つの代数的マルチグリッドVサイクル(hypreパッケージのboomeramg)に置き換えることを考えました。しかし、メッシュを細かくしている間、一定数の反復を失うよりも。 代数的マルチグリッドに基づいて速度行列の逆行列に対してスペクトル的に等価で効率的な前処理を作成する方法を知っている人はいますか?この場合、代数的マルチグリッドを利用できない固有のものはありますか?そうでない場合、定数反復スケーリングを失う原因は何でしょうか? 編集: 速度ブロックのさまざまなソルバーのベンチマークをいくつか追加しました。問題は、標準の2D駆動キャビティフロー、テイラーフードによる離散化、およびユニットボックスの均一な改良によって解決されます。 Exaktソルバー(MUMPS) :25 ITER H=1h = 132h=132h = \frac{1}{32}:25 ITER H=1h = 164h=164h = \frac{1}{64}:25反復 h=1h = 1128h=1128h = \frac{1}{128}:22反復h = 1256h=1256h = \frac{1}{256} 1つのV-AMG(代数、ブーメラム) :30 ITER H=1h = 132h=132h = \frac{1}{32}:30 ITER H=1h = 164h=164h = \frac{1}{64}:39反復 h=1h = 1128h=1128h = …

1
VEGASのリビニングアルゴリズム
私はVEGAS(元の出版物(LKlevinからのプレプリント)と実装ノート)のモンテカルロ統合のリビニングアルゴリズムを理解しようとしています。私が最初に理解したと思うことを説明してから、質問をします。 簡単にするために、区間全体で正である1次元関数があると仮定します。この間隔は、たとえばビンに分けられます。これらのビンは、最初は同じサイズです。ビンサイズは確率密度を定義します、[ 0 、1 ] N Δは、xはIをf(x )f(バツ)f(x)[ 0 、1 ][0、1][0,1]んんnΔのX私Δバツ私\Delta x_i ρ (x )= ⎧⎩⎨⎪⎪⎪⎪⎪⎪0 ≤ X &lt; Δ X1:1nはΔ X1⋮ΔのXn − 1≤ X &lt; Δ Xん:1nはΔ Xん。ρ(バツ)={0≤バツ&lt;Δバツ1:1んΔバツ1⋮Δバツん−1≤バツ&lt;Δバツん:1んΔバツん。\rho(x) = \begin{cases} 0 \le x < \Delta x_1 : \frac{1}{n \Delta x_1} \\ \vdots \\ \Delta x_{n-1} \le x < \Delta …

3
Pythonでのfmincgの実装
私はPythonでニューラルネットワークを再実装しようとしています。コスト関数と逆伝播アルゴリズムを正しく実装しました。Octaveに相当するコードを実行して、それらをチェックしました。 しかし、scipy.optimize.fmin_cg関数を使用しようとすると、反復の実行に非常に長い時間がかかります。警告が表示されて終了し、「目的のエラー率が達成されなかった」というエラーが表示されます。 Octaveの同じプログラムは問題なく実行されます。ただし、独自のfmincg機能が定義されています。 何が悪いのですか?

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