計算科学

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

6
不規則な境界を持つドメインの有限な差
誰でもポアソンの数値解法(有限差分およびクランク-ニコルソン法)に関する本や、長方形と円の間の領域で構成されるドメイン(特に本またはリンク)などの不規則な幾何学の例を含む拡散方程式に関する本を見つけるのを手伝ってもらえますかこの場合のMATLABコード例で?)

1
非線形反応項を持つ拡散方程式の可能な数値スキームは何ですか?
いくつかの単純な凸型ドメインのための 2Dで、我々はいくつか持っているU (X ):下記式を満足 - D IのVを(A ∇ U )+ C U N = F 特定ディリクレおよび/またはノイマン境界条件を有します。私の知る限り、有限要素空間でニュートンの方法を適用することは、この方程式を数値的に解くための比較的簡単な方法でしょう。ΩΩ\Omegau (x )u(x)u(x)- D I V(A ∇ U )+ C Un= f−div(A∇u)+cun=f -\mathrm{div}(A\nabla u)+cu^n = f 私の質問は次のとおりです。(1)ディリクレ境界条件をゼロと仮定して、この方程式の対応する変分定式化の適切性に関するソボレフ理論はありますか?もしそうなら、どのようなバナッハのスペースを考慮すべきでしょうか?(2)このタイプの方程式の可能な数値的アプローチは何ですか?

5
数学や計算の勉強に集中することが望ましいですか?
クリロフ部分空間法に関する私の研究と並行して、HPCの背後にある数学を一歩前進させるか、計算の理論(ハードウェア、OS、コンパイラなど)を探索するオプションがあります。現在、私は両方ともちょうど得るために十分に知っています。たとえば、CGの方程式と反復法の基本をどのように導出するかは知っていますが、詳細や、PreconditionersやConvergenceなどのより複雑なものについてはわかりません。同様に、有限要素法の基本(弱形式、非弱形式、コドメインやガラーキンなど)は知っていますが、その深さはわかりません。計算の面では、可能なすべての言語でシリアルにコーディングする方法を知っており、OpenMPとMPIを十分に使用できます。私はハードウェアとキャッシングをそれほどよく理解していません。 私の質問は次のとおりです。何に集中すべきか:数学または計算?それらはHPCで分離不可能ですか?一方について学習することを推奨しますが、他方については学習しませんか? 編集:私は現在機械工学を専攻しており(後悔しています)、工学と計算(流体、熱伝達など)のコースをたくさん持っています。私は今年HPCの大学院に入学する予定で、卒業研究を始める前に何らかの側面(Math / Comp / Hybrid)を強化したいと考えています。私は数学とコンプが同じように好きです(だから「もっと楽しむことをする」は冗長です)。

6
分子振動を視覚化するために利用できるオープンソースツールは何ですか?
通常モードではない分子振動を視覚化したいと思います。動きの静的なベクトル表現を提示したいのですが、ベクトルスタイル(サイズ、色など)に柔軟性を持たせたいと思います。また、振動のビデオを作成することに興味があります。 分子振動を表示するための優れたリソースは何ですか? 私の好みはオープンソースツールですが、もしそれが他の選択肢よりも本当に優れていれば、商用ソフトウェアを使って楽しませます。

2
科学プログラムでFortranの関数ポインターを操作する方法
Cでの関数ポインターの典型的な使用法を次に示します。Fortranでも同様のことをしたいと思います。私はいくつかのアイデアを持っていますが、そうするための標準的な方法があるかどうかを知りたいです。 ユーザーによって渡された関数ポインターとコンテキストは保存され、後で呼び出されます。 typedef PetscErrorCode (*TSIFunction)(TS,PetscReal,Vec,Vec,Vec,void*); PetscErrorCode TSSetIFunction(TS ts,Vec res,TSIFunction f,void *ctx); ユーザーの関数は、さまざまな時間にコンテキストを使用してコールバックされます。 PETScでは、文字列->関数ポインターテーブルも多用します。すべてがプラグインであるため、ユーザーは独自の実装を登録でき、一流です。 #define PCGAMG "gamg" PCRegisterDynamic(PCGAMG ,path,"PCCreate_GAMG",PCCreate_GAMG); これにより、作成ルーチンが「FList」に登録され、PCSetFromOptions()がこのメソッドを他の選択肢と比較して選択できるようになります。システムが動的ロードをサポートしている場合、PCCreate_GAMGシンボルのコンパイル時の依存関係をスキップしてNULLを渡すだけで、シンボルは実行時に共有ライブラリで検索されます。 これは「工場」を超えた一歩であり、マーティン・ファウラーが「サービスロケーター」と呼ぶものに似た制御デバイスの反転であることに注意してください。 注:これは、Jed Brownとの個人的なやり取りで出てきたもので、Jed Brownがこの質問をしてくれました。私はそれを外部委託し、人々が思い付くことができる答えを見ることにしました。
11 petsc  fortran 

1
FEMで集中質量行列を作成する方法
有限要素法、たとえば熱方程式を使用して時間依存のPDEを解く場合、明示的な時間ステップを使用すると、質量行列のために線形システムを解かなければなりません。たとえば、熱方程式の例に固執すると、 ∂u∂t=c∇2u∂u∂t=c∇2u\frac{\partial{u}}{\partial{t}} = c\nabla{}^{2}u 次に、フォワードオイラーを使用して M(un+1−undt)=−cKunM(un+1−undt)=−cKunM(\frac{u^{n+1}-u^{n}}{dt}) = -cKu^{n} したがって、明示的な時間ステップ方式を使用している場合でも、線形システムを解く必要があります。明示的なスキームを使用する主な利点は線形システムを解く必要がないことなので、これは明らかに大きな問題です。この問題を回避する一般的な方法は、通常の(一貫性のある)質量行列を対角行列に変換し、逆変換を簡単にする「集中」質量行列を使用することです。グーグル検索を行ったとき、この集中質量行列がどのように作成されるかはまだ完全にはわかりません。たとえば、彼の論文、ADVECTION-DEFUSION EQUATIONの質量ランピングに関する数値実験Edson Wendland HarryとEdmar Schulzにより、対角線上にすべての係数を単純に合計することにより、集中質量行列を作成します。したがって、たとえば、元の一貫した質量行列が次の場合、 ⎛⎝⎜⎜⎜4212242112422124⎞⎠⎟⎟⎟(4212242112422124)\begin{pmatrix} 4 & 2 & 1 & 2 \\ 2 & 4 & 2 & 1 \\ 1 & 2 & 4 & 2 \\ 2 & 1 & 2 & 4\end{pmatrix} 集中質量行列は次のようになります。 ⎛⎝⎜⎜⎜9000090000900009⎞⎠⎟⎟⎟(9000090000900009)\begin{pmatrix} 9 & 0 …

2
切り捨てられたSVDの計算、一度に1つの特異値/ベクトル
特異値を1つずつ計算する切り捨てSVDアルゴリズムはありますか? 私の問題:大きな密行列の最初の特異値(および特異ベクトル)を計算したいのですが、適切な値がわかりません。は大きいため、効率上の理由から、後で最小のSVを切り捨てるためだけに完全なSVDを評価するのではなく、kkkMMMkkkMMM 理想的には、特異値を最大()から最小()まで連続的に計算する方法があるでしょう。そうすれば、があるしきい値を下回った場合に、番目の特異値を計算した後で計算を停止することができます。σ1、σ2、…σ1,σ2,…\sigma_1, \sigma_2,\ldotsσ1σ1\sigma_1σんσn\sigma_nkkkσk/ σ1σk/σ1\sigma_k/\sigma_1 そのようなアルゴリズムは存在しますか(できればPython実装で)?私のグーグル検索では、kをパラメーターとして使用する切り捨てられたSVD関数のみを見つけたので、アプリオリに推測する必要があります。

2
Pandasの制限とPythonでの代替
Pandasが最初に金融の世界、特に自然科学(物理学、生物学など)向けに開発されなかったことをどこかで読んだことがあります。同様のデータ分析Pythonパッケージがより「自然科学指向」なものはありますか? 私はパンダの使用を開始したばかりで、他のパッケージまたは自家製のソリューションを使用しないと解決できない2つの問題がすでに発生しています。 不確実性を管理する方法は? データの単位を簡単に定義するにはどうすればよいですか? おそらく他の問題があるかもしれませんが、もっと正確には経験がありません。現時点では、最初の点を解決するための不確実性パッケージについて考えていますが、パンダで正常に動作し、計算速度が低下しないかどうかはわかりません。実際、私は不確実性を伴う計算方法を探しているのではなく、インポートしたデータと共に不確実性を保存する単純な方法を探しています。2番目の点については、DataFrameとは別に辞書を作成して、各データに関連付けられた単位を管理するよりも優れた解決策を見つけることができませんでした。 同じ問題を経験したことがある場合、どのようにそれを解決しましたか、または自然科学のPythonでのデータ操作/保存/分析にどのパッケージを使用しましたか?

2
勾配降下法と共役勾配降下法
プロジェクトの場合、これら2つの方法を実装し、さまざまな機能でのパフォーマンスを比較する必要があります。 共役勾配法は、の線形方程式系を解くことを意図しているように見えます Ax=bAx=b A\mathbf{x} = \mathbf{b} ここで、は対称で正定で実数のn行n列の行列です。AAA 一方、勾配降下法について読むと、Rosenbrock関数の例が表示されます。 f(x1,x2)=(1−x1)2+100(x2−x21)2f(x1,x2)=(1−x1)2+100(x2−x12)2 f(x_1,x_2) = (1-x_1)^2+100(x_2-x_1^2)^2 見てのとおり、共役勾配法ではこれを解決できません。それとも私は何かを逃していますか?

3
小さなポイントの3D凸包のボリュームは、すべて船体に設定されます
3Dを除いて前にこれと似た質問があります。船体の実際の形状ではなく、ボリュームだけが必要です。 より正確には、3Dで小さなポイントセット(たとえば、10〜15)が与えられます。これらはすべて、ポイントセットの凸包上にあることがわかっています(したがって、それらはすべて「重要」であり、ハルを定義します)。船体の体積だけを計算したいのですが、実際の多面体を計算する必要はありません。これを行うための効率的なアルゴリズムはありますか?

1
Matlabでの最適なトランスポートワーピングの実装
私は「登録とワーピングに最適なマストランスポート」というペーパーを実装しています。私の目標は、オイラーマストランスポートコードをオンラインで見つけることができないため、オンラインにすることです。これは、少なくとも画像処理の研究コミュニティにとって興味深いものです。 この論文は次のように要約できます。 - x座標とy座標に沿った1Dヒストグラムマッチングを使用して初期マップを見つける の固定点を、ここでは反時計回りの90度回転を表し、はディリクレ境界条件(= 0)のポアソン方程式の解を表します。そして、ヤコビ行列の行列です。 -タイムステップ安定性が保証されていますu t = 1uuuあなたt= 1μ0D U ∇⊥△− 1di v (u⊥)ut=1μ0Du∇⊥△−1div(u⊥)u_t = \frac{1}{\mu_0} Du \nabla^\perp\triangle^{-1}div(u^\perp)あなた⊥u⊥u^\perp△− 1△−1\triangle^{-1}D UDuDudt &lt; 分| 1μ0∇⊥△− 1di v (u⊥)|dt&lt;min|1μ0∇⊥△−1div(u⊥)|dt<\min|\frac{1}{\mu_0}\nabla^\perp\triangle^{-1}div(u^\perp)| 数値シミュレーション(通常のグリッドで実行)の場合、ポアソン方程式を解くためにmatlabのpoicalcを使用することを示し、風上スキームを使用して計算されるD UDuDuを除いて、空間微分に中心有限差分を使用します。 私のコードを使用すると、エネルギー関数とマッピングのカールは、2、3回の反復(タイムステップに応じて数十から数千)に対して適切に減少しています。しかし、その後、シミュレーションは爆発します。非常に少ない反復でエネルギーが増加し、NANに到達します。私は微分と積分(ここで cumptrapzのより高次の置換がここにあります)といくつかの補間スキームに対していくつかの次数を試してみましたが、常に同じ問題が発生します(非常に滑らかな画像、どこでも0でないなど)。 誰かがコードや私が直面している理論上の問題に興味がありますか?コードはかなり短いです。 デバッグ機能を備えたコード 登録機能 登録する同じサイズの2つのイメージがある場合、テストコード テストスタッフなしで必要な機能のみ(&lt;100行) 最後のgradient2()をgradient()に置き換えてください。これはより高次の勾配でしたが、問題も解決しません。 今のところ、紙の最適な輸送部分にのみ関心があり、追加の正則化用語には関心がありません。 よろしくお願いします!

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&gt;1ytyyRnRn+1t = ∫dyf(y)t=∫dyf(y)t = \int \frac{dy}{f(y)}n &gt; 1ん&gt;1n>1yyy1により、時間依存性の場合は、付加することによりシミュレートすることができるので、にのドメイン変更、からに。tttyyyyyyRんRん\mathbb R^nRn + 1Rん+1\mathbb R^{n+1}
10 ode  numerics 

1
数値ソフトウェア開発のためのテストフレームワークはありますか
私の計算科学プログラミングの多くに、標準のテストフレームワークではカバーされないテスト要件があることがわかりました。 計算時間テスト アルゴリズムが遅くならないようにするため。私は次のようなことをすることができます assureSmallerEqual(RuntimeWrapper(algorithm),53)が、アルゴリズムに取り組んでいるときに53秒のしきい値を継続的に減らしたい、つまりassureSmallerEqual(RuntimeWrapper(algorithm),'previousbest+noisetolerance') 性能試験 以前に分析解の良い近似を見つけたアルゴリズムが、少なくとも同じかそれ以上の解を見つけることを確認するため。繰り返しになりますが、これは標準の統合テストでエミュレートできますが、アルゴリズムが次第に良くなるにつれて、許容範囲を継続的に縮小したいと思います。交換assureAlmostEqual(foo(),1,places=3)することを考えるassureAlmostEqual(foo(),1,places='previousbest') 物理的要件のテスト アルゴリズムが突然より多くのメモリ/ハードディスク領域を必要としないことを確認するため。1に非常に似ています。 抽象要件テスト 二次近似でうまくいったアルゴリズムが突然3次近似を必要としないこと、またはタイムステップ0.1でうまく行ったアルゴリズムが安定性のために突然0.01を必要としないことを確認するため。繰り返しになりますが、これらは標準の統合テストでエミュレートできますが、目標は、特定の目標を達成した最小要件パラメーターを覚えておくことです。そのため、これには多くの手動更新が必要になります。たとえば、foo(10)以前に例外がスローされなかった場合は、フレームワークがfoo(10)引き続き機能することを確認し、現在機能するかどうかを試しfoo(9)ます(この場合、今後のすべてのテストで機能することを確認しfoo(9)ます)。 たとえば、ランタイムの増加は他の改善の見返りとして受け入れられる可能性があるため、私が求めているのはユニット/統合テストの意味でのテストについて記述していないと主張することができます。 ただし、実際には、上記のテスト機能があれば、導入したバグのために要件とパフォーマンスが95%失敗したため、デバッグ時間を大幅に節約できたと思います。実際、外部の数値ソフトウェアライブラリを使用して(多くの時間を自分のコードのチェックに費やした後で)見つけた多くのバグは、上記のテストを厳密に適用すれば、簡単に回避できたという事実を知っています。 PS 同様の名前の質問/programming/34982863/framework-for-regression-testing-of-numerical-codeは、標準の回帰テストフレームワークでより簡単に達成できる機能を説明しているため、重複していません。 質問ユニットテストとテスト駆動開発のための戦略、それらを実装する(とその答えで提供され、それは/を要求戦略が、私は私の意見では、ここで説明するものとは異なっている)ことができますフレームワークとは対照的に、戦略を要求します。
10 testing 

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%を選択すると、最高のパフォーマンスが得られます。

1
DGローカル方程式、平均平均テスト関数の解釈方法
論文http://www.sciencedirect.com/science/article/pii/S0045782509003521で、HDG要素ローカル方程式は584ページの方程式(4)で説明されており、次の形式を取る方程式の1つが含まれます。 − (uh、∇ Q)K= - ⟨ U^h⋅ N 、Q− q¯⟩∂K−(uh,∇q)K=−⟨u^h⋅n,q−q¯⟩∂K-(u_h,\nabla q)_K = -\left\langle\hat{u}_h \cdot n, q - \bar{q}\right\rangle_{\partial K} これは、連続式に変近似であるスカラー値テスト機能で、qは理にかなった空間インチ∇ ⋅ U = 0∇⋅u=0\nabla \cdot u = 0qqq 紙定義。q¯=1|∂K|∫∂Kqq¯=1|∂K|∫∂Kq\bar{q} = \frac{1}{|\partial K|} \int_{\partial K} q これは有限要素の意味でどのように解釈されますか?私の理解から、我々乗算両側テスト機能により、、その後は満たすソリューションのすべての可能な選択肢のための方程式を見つけるしようとqと。この方法でテストスペースを変更するにはどうすればよいですか?qqqqqq 論文はまた、これはアイデンティティ施行する必要があると述べて 私はこの声明に同意しますが、どのようにテスト機能かもしれませんQ - ˉ qはコードで実装できますか?要素の局所線形システムを組み立てるとき、要素の基底関数を取り、それらの平均を差し引く必要がありますか?⟨u^h⋅n,q−q¯⟩∂K=0⟨u^h⋅n,q−q¯⟩∂K=0\left\langle\hat{u}_h\cdot n, q - \bar{q}\right\rangle_{\partial K} = 0q−q¯q−q¯q - \bar{q}

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