計算科学

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

3
Multigridで収束チェックを行わないのは普通ですか?
Briggs / Henson / McCormickによる「A Multigrid Tutorial」の第3章、linkを読みました 。 テキストは、Vサイクル、ミューサイクル、FMGなどのマルチグリッドサイクルに関するものです。私の目を引いたもの:ほとんどの反復手順では、目的の許容誤差/精度に収束したかどうかを確認し、収束した場合は手順を停止します。ただし、Briggs / Henson / McCormickは提示されたスキームで収束チェックを使用しません。反復と再帰の数はハードコーディングされているだけであり、スキームが収束することを信頼する必要があります。 それでは、これはマルチグリッドで通常どのように行われますか?反復/再帰の数が単にハードコーディングされているのは普通ですか?私は非常に正確であるために多くの計算時間を浪費するか、逆に反復/再帰の数を少なくすると多くの場合精度が低下することを本当に恐れています。
12 multigrid 

3
Comsol Multiphysicsの代替
これはSEのSoftware Recommendations側により適した質問かもしれませんが、SEのこの部分に頻繁にアクセスする人はこの質問に答えられる可能性が高いと思います。 Comsol Multiphysicsに代わる無料の(自由であるだけでなく)代替品を探しています。ここに注意が必要な点があります。モデリングとシミュレーションのパッケージを探しているだけではありません。その中には負荷がありますが、Comsolと可能な限り類似した構文を持つ無料のソリューションを探しています。Octaveと一緒に実行できるパッケージがありますか?もしそうなら、私はそれを見つけていません。どんな助けも大歓迎です! ありがとうございました! [編集]数値モデリングとシミュレーションのためのソフトウェアが必要です。さまざまな容器間を流れる流体、熱伝導、電気ショック療法。要するに、さまざまなPDEのシミュレーションソリューション。オウムに他のソフトウェアを探している主な機能はComsols Model Wizardです。

2
自動差別化に関して、ソースコード変換(STC)は演算子オーバーロード(OO)よりも効率的ですか?
時空間プロセスのベイジアンモデルに取り組んでおり、対数確率のモデルとモデルパラメーターに関する勾配を必要とする非Uターンサンプラー(NUTS)を使用しています。もっと簡潔に言えば、統計分布、クロネッカー積、指数、比、if-elseステートメントなどを含むかなり複雑な対数確率関数、それを提供する必要があり、NUTSに勾配があります。いくつかのパッケージ(Stanおよび JuliaのMCMC)は、オペレーターのオーバーロード(私の知る限り)を使用して、勾配を自動的に取得します。f:Rn→ Rf:Rn→Rf : \mathbb{R}^n \rightarrow \mathbb{R} おそらくソースコード変換の自動差分ツールを使用して独自の勾配関数を作成できた場合、パフォーマンスが向上しますか?

2
多くの変数の数値積分
ましょう及びFは(→ X):[ 0 、1 ] 、N → Cは、これらの変数関数です。x⃗ =(x1,x2,…,xn)∈[0,1]nx→=(x1,x2,…,xn)∈[0,1]n\vec{x} = (x_1, x_2, \dots, x_n) \in [0,1]^nf(x⃗ ):[0,1]n→Cf(x→):[0,1]n→Cf(\vec{x}): [0,1]^n \to \mathbb{C} この反復積分に再帰的なスキームはありますか? ∫[0,1]n∏dxif(x⃗ )∫[0,1]n∏dxif(x→)\int_{[0,1]^n} \prod dx_i \;f(\vec{x}) 場合及びIブレーク[ 0 、1 ] 100へのセグメントは、我々は10 20n=10n=10n = 10[0,1][0,1][0,1]1020102010^{20}まで追加するポイント。よりスマートな方法が必要です。 実際、統合したい機能は は、ユニタリグループのHaarメジャーです。 ∫U(n)f(A) dA=1n!∫[0,2π]n∏j<k∣∣eiθj−eiθk∣∣2⋅f(θ1,…,θn) dθ12π ⋯ dθn2π∫U(n)f(A) dA=1n!∫[0,2π]n∏j<k|eiθj−eiθk|2⋅f(θ1,…,θn) dθ12π ⋯ dθn2π\int_{U(n)} f(A) \ dA = \frac{1}{n!} …

3
高速化の結果を報告するための正しい統計
いくつかのコードの低速バージョンと高速バージョンがあり、2つのコードを比較して高速化した数値を報告したいとします。低速バージョンを回、高速バージョンをm回実行して、時間(s 1、… 、s n)および(f 1、… 、f m)を生成します。高速化を生成する最も簡単な方法は、手段を平均化することである。 ˉ 秒nnnmmm(s1,…,sn)(s1,…,sn)(s_1, \ldots, s_n)(f1,…,fm)(f1,…,fm)(f_1, \ldots, f_m) ただし、これは外れ値を考慮していません。s¯f¯=m∑i&lt;nsin∑j&lt;mfjs¯f¯=m∑i&lt;nsin∑j&lt;mfj\frac{\bar{s}}{\bar{f}} = \frac{m \sum_{i<n} s_i}{n \sum_{j<m} f_j} 質問:スピードアップの数値を報告するときに使用するのに最適な統計は何ですか?

1
ラグランジュ乗数としての圧力
非圧縮性ナビエ・ストークス方程式で、 圧力の項は、非圧縮性条件を強制するラグランジュ乗数と呼ばれることがよくあります。ρ(ut+(u⋅∇)u)∇⋅u=−∇p+μΔu+f=0ρ(ut+(u⋅∇)u)=−∇p+μΔu+f∇⋅u=0\begin{align*} \rho\left(\mathbf{u}_t + (\mathbf{u} \cdot \nabla)\mathbf{u}\right) &= - \nabla p + \mu\Delta\mathbf{u} + \mathbf{f}\\ \nabla\cdot\mathbf{u} &= 0 \end{align*} これはどのような意味で本当ですか?非圧縮性の制約を受ける最適化問題として、非圧縮性のナビエ・ストークス方程式の定式化はありますか?もしそうなら、非圧縮性流体流の方程式が最適化フレームワーク内で解かれる数値的類似物はありますか?

3
HDF5ファイルはgitリビジョン管理に適していますか?
私はHDF5で使用されているファイル形式に精通していませんが、HDF5ファイルがgit(またはMercurialやSubversionなど)のリビジョン管理に適しているかどうか疑問に思っていますか?つまり、HDF5ファイルは行ベースの差分に適していますか、またはgitはHDF5を1つの大きなバイナリとして扱い、各リビジョンのコピー全体を保存する必要がありますか?

2
Pythonで非常に大きくて疎な隣接行列のすべての固有値を計算する最速の方法は何ですか?
scipy.sparse.linalg.eigshを使用するよりも非常に大きくて疎な隣接行列のすべての固有値と固有ベクトルを計算するより速い方法があるかどうかを把握しようとしていますマトリックスの対称属性。隣接行列もバイナリであるため、より高速な方法があると思います。 ランダムな1000x1000スパース隣接行列を作成し、x230 ubuntu 13.04ラップトップでいくつかの方法を比較しました。 scipy.sparse.linalg.eigs:0.65秒 scipy.sparse.linalg.eigsh:0.44秒 scipy.linalg.eig:6.09秒 scipy.linalg.eigh:1.60秒 スパースeigとeigshで、希望する固有値と固有ベクトルの数であるkを行列のランクに設定します。 問題は、より大きな行列から始まります-9000x9000行列では、scipy.sparse.linalg.eigshに45分かかりました!

2
不定対称システム用のPETScのどの前提条件(およびソルバー)を使用する必要がありますか?
私のシステムは、ラグランジュ乗数を伴う対称FE問題です(たとえば、非圧縮ストークスの流れ)。 (ABBTC)(ABTBC)\begin{pmatrix}A & B^T \\ B & C\end{pmatrix} ここで、は典型的なケースです(ラグランジュ乗数が最後に現れるように方程式に番号が付けられていることを確認しました)。システムは非常に大規模です(+ 100k行)。C= 0C=0C = 0 この質問に対する答えを読んで、混合FE問題に使用できる適切な前提条件が存在するという印象を受けました。 PETScを使用して、MINRES(-ksp_type minres -pc_type none -mat_type sbaij)でシステムを解決できましたが、精度はそれほど高くありません(線形問題に対していくつかのニュートン反復が発生します)。前提条件とksp-solverの他の組み合わせは機能しないようです。 MINRESを使用するよりも速くこのシステムを解決するPETScのフラグの組み合わせはありますか?

3
MATLABでODEを使用したステップサイズの選択
こんにちは、私の質問を見てくれてありがとう。これは、以前にphysics.stackexchange.comに投稿した私の質問の更新版です。 現在、2D励起子スピナーBose-Einstein Condensateを研究しており、このシステムの基底状態に興味があります。基底状態に到達する数学的方法は、虚数時間法と呼ばれます。 この方法は、量子力学の時間が虚数に置き換えられる非常に単純な この置換により、システム内の高エネルギー粒子が低エネルギー粒子よりも速く崩壊します。計算のすべてのステップで粒子の数を再正規化すると、最終的に最も低いエネルギーの粒子のシステム(別名)になります。基底状態。t=−iτt=−iτ t = -i \tau 問題の方程式は非線形であり、非線形シュレディンガー方程式と呼ばれ、時にはグロス-ピタエフスキー方程式とも呼ばれます。問題を解決するために、Matlabs ode45を使用しています。これは、システムを時間内に進化させ、最終的に基底状態に到達します。 注意!非線形シュレディンガー方程式には、ラプラシアンおよびその他の空間の微分項が含まれます。これらはすべて高速フーリエ変換を使用して解決されます。最後に、時間ODEのみがあります。* 私の問題と質問:計算はからにます。ode45はforループに入れられるため、巨大なベクトルを同時に計算しません。最初のラウンドはode45(odefun、)で、次にからます。ここで、タイムステップは私の問題です。タイムステップの選択が異なると、基底状態のソリューションも異なります。どのタイムステップが「最も」正しい基底状態を与えるかを判断する方法がわかりません。t0t0t_0tftft_f[ T 0、T 0 + Δ / 2 、T 0 + Δ ] 、Y 、... 、T 0 + Δ Δ[t0,…,tf][t0,…,tf][t_0,\dots,t_f][t0,t0+Δ/2,t0+Δ],y,…[t0,t0+Δ/2,t0+Δ],y,…[t_0, t_0+\Delta/2, t_0 + \Delta],y,\dotst0+Δt0+Δt_0 + \DeltaΔΔ\Delta 私の試み:このスキームでは、大きな時間ステップにより元の粒子に再正規化される前に多数の粒子が崩壊し、小さな時間ステップにより再正規化される前に少量の粒子が崩壊します。私の最初の考えは、小さな時間ステップがより正確な解決策を提供するはずであるが、それは反対のように思われるということです。 私は数値の専門家ではないので、ode45の選択は単純に任意でした。ode113でも同じことがわかります。:( 誰もこの問題について何か考えを持っていますか。追加の詳細が必要かどうかを教えてください。 ありがとうございました。 更新1: 仮想時間法とODEを研究しています。タイムステップが十分に小さくないと、全体が不安定になります。これは、私の非線形方程式が硬く、理解することから物事をはるかに難しくするのではないかと思うようになります。最新情報をお届けします。 更新2: 修正済み:問題は実際にODEの外部で正規化されていました。正規化がodefun内に保持される場合、ODEは、「外部」タイムステップの異なる選択に対して同じ結果を返します。同僚が古いコードを見せてくれたので、odefunに1行だけ追加しました。 function y_out = odefun(t,y_in,...variables...) …

2
有限要素による特異摂動反応拡散問題の振動
ときは、FEM-離散化と反応拡散問題を解決する、例えば 用いて 0 &lt; ε « 1(特異摂動)、離散問題の解決策は、典型的に近い境界に振動層を示すであろう。Ω = (0 、1 )、 ε = 10 - 5と線形有限要素、溶液 U Hルックス等- ε Δ U + U = 1 で Ωuが= 0を 上 ∂Ω−ε△あなたは+あなたは=1 オン Ωあなたは=0 オン ∂Ω - \varepsilon \Delta u + u = 1 \text{ on } \Omega\\ u = 0 \text{ …

1
固定小数点反復を使用して、pdeのシステムを分離する
境界値の問題があると仮定します。 DUd2あなたはdバツ2+ dvdバツ= f で Ωd2あなたはdバツ2+dvdバツ=f に Ω\frac{d^2u}{dx^2} + \frac{dv}{dx}=f \text{ in } \Omega uが=時間 に ∂Ωdあなたはdバツ+ d2vdバツ2= g に Ωdあなたはdバツ+d2vdバツ2=g に Ω\frac{du}{dx} +\frac{d^2v}{dx^2} =g \text{ in } \Omega Uは= 時間 に ∂Ωあなたは=h に ∂Ωu=h \text{ in } \partial\Omega 私の目標は、この結合問題の解を非結合PDEのシーケンスに分解することです。システムを分離するために、私は、固定された近似値のシーケンス上の点繰り返し印加だ、その結果を(あなたk、vk)(あなたはk、vk)(u^k,v^k) du k − 1d2あなたはkdバツ2+ dvk − 1dバツ= fd2あなたはkdバツ2+dvk−1dバツ=f\frac{d^2u^k}{dx^2} + \frac{dv^{k-1}}{dx}=f …

1
数値求積法のメソッド選択
数値求積法にはいくつかのメソッドファミリがあります。特定のクラスの被積分関数がある場合、理想的な方法を選択するにはどうすればよいですか? 被積分関数(例:滑らかですか?特異点がありますか?)と計算問題(例:誤差許容度、計算予算)の両方に関連する質問は何ですか? これらの質問への回答は、さまざまな方法のファミリーをどのように除外または促進しますか?簡単にするために、単一または低次元の積分だけを考えてみましょう。 たとえば、QUADPACKに関するWikipediaの記事には、かなり一般QAGS的なルーチンが、「ピーターウィンのイプシロンアルゴリズムによる加速を使用して、各部分区間内で21点のガウスクロンロッド求積法に基づくグローバル適応求積法を使用する」 この決定はどのように行われましたか?より多くのことがわかっている場合、どのようにして同様の決定を下すことができますか?
12 quadrature 

1
ディリクレノイマン境界条件解が不安定になる-圧力補正法
レイノルズ数が500のシリンダー上の非圧縮性の流れをシミュレートしています。圧力補正法を使用してナビエストークス方程式を解いています。一定の時間(約5秒)が経過すると、ソリューションが不安定になります。 メッシュ、ステップサイズ(0.05)を改良しようとしました(暗黙的な方法を使用している場合でも、CFL &lt;1を確認してください) 私の境界条件、メッシュ、不安定な結果は添付の図に示されています。ドメインは、シリンダーの直径の約25倍です。 私はこの問題Oグリッド(ほとんどすぐに不安定になった)のシミュレーションを試みました。 次のリンクには、境界条件と結果の写真が含まれています。 誰もがこの問題について彼らの考え/経験を共有できるならば、私は感謝するでしょう。どうもありがとう。 編集済み: タイプミスの謝罪: 次の境界条件を使用しています。ノイマン境界 ∂あなたは⃗ ∂n− n⃗ p = 0 ;∂あなたは→∂n−n→p=0;\frac{\partial \vec{u}} {\partial n} - \vec{n} p = 0; ディリクレ境界上 あなたは⃗ =あなたバツ= 1あなたは→=あなたはバツ=1 \vec{u} = u_x = 1 編集済み: ディリクレ境界の周囲のノードに速度境界条件を適用しました。また、右上隅と右下隅のノードは、速度1のディリクレ境界です。 その後、シミュレーション結果をさらに詳しく調べたところ、流入/流出ジャンクションで不安定性が入り込み始めていることがわかりました。

2
LAPACKとBLASを使用して
既存のコードをMATLABからC ++に移植しており、を解決する線形システムを持っています(より一般的な形式A x = bではなく)xA=bxA=bxA=bAx=bAx=bAx=b 行列は高密度で一般的な形式ですが、1000x1000以下です。そのため、MATLABでは、解は関数またはスラッシュ表記法で見つかりますAAAmrdivide(b,A)x = b/A; BLASおよびLAPACKルーチンを使用して、C ++コードでこれを解決するにはどうすればよいですか? 私は、LAPACKルーチンに精通していDGESV解きするために、X。Ax=bAx=bAx=bxxx したがって、私が考えていたのは、行列の転置恒等式を使用していくつかの操作を行うことです。 (xA)T=bT(xA)T=bT(xA)^T=b^T ATxT=bTATxT=bTA^T x^T = b^T xT=(AT)−1bTxT=(AT)−1bTx^T = (A^T)^{-1} b^T 次にDGESV、転置操作を使用して最終形式を解きます。(Aを転置するコストとシステムを解決するコスト)ATATA^TAAA より効率的なアプローチや他の方法でより良いアプローチがありますか? BOOST uBLASライブラリからのBLAS実装だけでなく、LAPACKライ​​ブラリルーチンへのバインドと同様に、マトリックスクラスとベクトルクラスを使用しています。私はこのセットアップを他の操作に正常に使用してきましたが、これらのライブラリに限定されたソリューションを見つけたいと思っています。 また、コードのセットアップ中にこのタイプの操作を実行するのは数回だけなので、パフォーマンスは重要な問題ではありません。 たぶん、このMATLABのドキュメント上には、mrdivide他人のために有用です。

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