計算科学

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

2
なぜ有限要素の形状が重要なのですか?
私はFEAをここ数年使用していますが、それを使用することと正しく使用することは2つの異なるものであり、安全率はすべてに対する解決策ではありません。その質問に明確な答えがない限り、私はそれを正しく使用しないだろうと感じています。 正確な結果を得るためには、要素がそれらの理想的な形状(ヤコビアンのみに基づいているか?)に近い必要があることを認識しています。しかし、なぜですか?私はそれが座標変換から来ることを理解しているので、要素の2つのベクトルが同一線上にならない限り、その形状に関係なく結果は正確ではありませんか? 図解された例(任意の応力分布)に基づく段階的な答えは、特に比較的一般的な質問であることを考えると理想的です(しかし、私が見たものからはよく答えられません)。

1
参照正方形上のラビアートトーマス要素
Raviart-Thomas(RT)要素がどのように機能するかを知りたいのですが。そのために、基底関数が参照正方形上でどのように見えるかを分析的に説明したいと思います。ここでの目標は、それを自分で実装することではなく、単に要素を直感的に理解することです。 私は、この作業をここで説明した三角形要素に主に基づいています。おそらく、四角形に拡張すること自体が誤りです。 つまり、最初のRK要素RK0の基底関数を定義できます。 ϕi(x)=a+bx=(a1+b1xa2+b2y)ϕi(x)=a+bx=(a1+b1xa2+b2y)\mathbf{\phi}_i(\mathbf{x}) = \mathbf{a} + \mathbf{b}\mathbf{x} = \begin{pmatrix} a_1 + b_1 x\\a_2 + b_2 y\end{pmatrix} fori=1,…,4.i=1,…,4.i = 1,\dots,4. の条件は次のとおりです。ϕiϕi\mathbf{\phi}_i ϕi(xj)⋅nj=δijϕi(xj)⋅nj=δij\mathbf{\phi}_i(\mathbf{x}_j)\cdot\mathbf{n}_j = \delta_{ij} ここで、は以下に示す単位法線で、はその座標です。njnj\mathbf{n}_jxjxj\mathbf{x}_j これは参照二乗なので、各基底関数の方程式系になります。ためこれは、次のとおりです。[ - 1 、1 ] × [ 1 、1 ][−1、1]×[1、1][-1,1]\times[1,1]φ1φ1\mathbf{\phi}_1 ⎛⎝⎜⎜⎜10− 100− 10110100101⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜a1a2b1b3⎞⎠⎟⎟⎟= ⎛⎝⎜⎜⎜1000⎞⎠⎟⎟⎟(10100−101−10100101)(a1a2b1b3)=(1000)\begin{pmatrix} 1 & 0 & 1 & 0\\ 0 & -1 & …

2
log(x)の高速近似について
少し前に、ライブラリ関数を使用せずにを計算しようとするコードを書きました。昨日、私は古いコードをレビューしていて、それを可能な限り速くするように試みました(そして正しい)。これまでの私の試みは次のとおりです。l o g(x )log(バツ)log(x) const double ee = exp(1); double series_ln_taylor(double n){ /* n = e^a * b, where a is an non-negative integer */ double lgVal = 0, term, now; int i, flag = 1; if ( n <= 0 ) return 1e-300; if ( n * ee < …

4
C / C ++でルンゲクッタ8次を探しています
Windowsマシンを使用して、C ++で記述された天体力学/宇宙力学アプリケーションでルンゲクッタ8次法(89)を使用したいと思います。したがって、誰もが文書化されて自由に使用できる優れたライブラリ/実装を知っているのでしょうか?予想されるコンパイルの問題がない限り、Cで記述されていても問題ありません。 これまでのところ、このライブラリ(mymathlib)を見つけました。コードは問題ないようですが、ライセンスに関する情報は見つかりませんでした。 あなたが知っている可能性があり、私の問題に適した選択肢のいくつかを明らかにすることで私を助けてくれますか? 編集: 私が思ったほど多くのC / C ++ソースコードが利用できないことがわかります。したがって、Matlab / Octaveバージョンも問題ありません(まだ自由に使用できる必要があります)。



2
確率的に計算された関数で機能する方程式解法の数値法
タイプ方程式を解くための多くのよく知られた数値的方法があります たとえば、二分法、ニュートン法などです。f(x )= 0 、X ∈ Rん、f(バツ)=0、バツ∈Rん、 f(x) = 0, \quad x \in \mathbb{R}^n, 私のアプリケーションでは、は確率的方法で計算されます(結果は平均です)。f(x )f(バツ)f(x) この状況をうまく処理する数値方程式解法はありますか?同様の状況の議論へのリンクも高く評価されます。 計算できる精度はに強く依存し、計算時間を大幅に増加させなければ精度を上げることができない壁に簡単にぶつかる可能性があります。したがって、の結果が正確でないという事実を無視することはできません。これは、が実際に見つかる精度にも影響します。f(x )f(バツ)f(x)バツバツxfffバツバツx

4
quad-double算術スパースマトリックスパッケージはありますか?
私はいくつかの悪条件の大規模なスパース線形方程式系に取り組んでいます。それらを解決するために、ダブルダブル算術またはクワッドダブル算術を使用したいと思います。中田真帆が開発したMPACKという名前のパッケージがあり、4倍算術で数値線形代数計算を実行できることを知っています。ただし、スパースマトリックスではなく、デンスマトリックス用に設計されています。quad-double算術スパースマトリックスパッケージがあるかどうかを知っていますか?

5
たとえば、大きなヤコビ行列を扱う場合、数値コードの複雑さをどのように扱うのですか?
連立方程式の非線形システムを解いていて、離散化システムのヤコビアンを計算しました。結果は本当に複雑です。以下は(のみ!)行列の最初の 3列です。3 × 93×93\times 9 (一部には、数値スキームが安定性のために指数関数近似を必要とするため、複雑さが生じます。) ヤコビアンを使用した数値コードの実装について、かなり一般的な質問があります。 先に進んで、このマトリックスをコードに実装できます。しかし、私の直感は、非常に複雑であり、エラーを導入せざるを得ないため、数日(場合によっては数週間!)の面倒なデバッグを期待するように言っています。数値コードでこのような複雑さに対処するにはどうすればよいのでしょうか?シンボリックパッケージから自動コード生成を使用しますか(その後、コードを手動で微調整します)? 最初に、有限差分近似を使用して分析ヤコビアンをデバッグする予定ですが、落とし穴に注意する必要がありますか?コード内の同様の問題にどのように対処しますか? 更新 私はこれをPythonでコーディングし、sympyを使用してヤコビアンを生成しました。たぶん、コード生成機能を使用できますか?

2
量子モンテカルロについての混乱
私の質問は、このリファレンスで説明されているように、QMCメソッドからオブザーバブルを抽出することです。 Path Integral Monte CarloのようなさまざまなQMCメソッドの正式な派生を理解しています。しかし、結局のところ、私はこれらのテクニックを効果的に使用する方法についてまだ混乱しています。 量子MC法の導出の基本的な考え方は、トロッター近似を介して、密度行列または量子システムの時間発展演算子のいずれかである演算子を離散化することです。次に、MCメソッドで処理できる追加の次元を持つ古典的なシステムを取得します。 私たちが解釈できることを考えると量子演算子で逆温度と虚時間の両方を、これらのアルゴリズムの目的は、この演算子の近似値を計算する必要があります。実際、シミュレーションに沿ってサンプリングされたさまざまな構成から数量を直接測定する場合、「逆温度」の場合、基づく確率密度に関するサンプルがあり、は、トロッター分解。代わりに、「架空の時間」の場合、さまざまな離散時間ステップでサンプルを取得し、時間の平均も取得します。また、ような数量も取得しません。ββ\betae−βH^e−βH^e^{−\beta\hat{H}}β/Mβ/M\beta/MMMM⟨ψt|A^|ψt⟩⟨ψt|A^|ψt⟩\langle\psi_t|\hat{A}|\psi_t\rangle与えられた時間で、いくつかの観測可能な演算子を使用します。tttA^A^\hat{A} ただし、私の意見では、この種類のシミュレーションから直接サンプリングする量(ドキュメントの(5.34)、35ページから取得): O¯≡⟨O^(X)⟩≡1N!∑P∫O(X)π(X,P)dXO¯≡⟨O^(X)⟩≡1N!∑P∫O(X)π(X,P)dX\bar{O} \equiv \langle \hat{O}(X) \rangle \equiv \frac{1}{N!} \sum_P \int O(X) \pi(X,P) dX 追加の次元を考えると、量子システムに関連する量であってはなりません。代わりに、正しい量子量は各サンプル中の全鎖含有(5.35)、のような式を介して計算することができるシミュレー構成。MMM EthN=⟨d2τ−m2(ℏτ)2MN∑j=1M(Rj−Rj+1)2+1MN∑j=1MV(Rj)⟩EthN=⟨d2τ−m2(ℏτ)2MN∑j=1M(Rj−Rj+1)2+1MN∑j=1MV(Rj)⟩\frac{E_{th}}{N}= \left\langle \frac{d}{2 \tau} - \frac{m}{2 (\hbar \tau)^2MN } \sum_{j=1}^{M} (\mathbf{R}_j -\mathbf{R}_{j+1})^2 + \frac{1}{MN} \sum_{j=1}^{M} V(\mathbf{R}_j) \right\rangle 特定のオブザーバブルについての有用な情報を抽出するには、一連のQMCシミュレーションが必要であることは正しいですか?

1
Parareal、PITA、PFASSTの違いは何ですか?
Parareal、PITA、およびPFASSTアルゴリズムはすべて、時間に依存する問題の解を並列化するドメイン全体の手法です。 これらの方法の背後にある基本原則は何ですか? それらの主な違いは何ですか? あるものが別のものに基づいていると言えますか?どうやって? 彼らのアプリケーションはどうですか? 「どちらが良いですか」という質問には答えられないことはわかっていますが、それらのアプリケーション領域と検証条件をよく理解しておくと役に立ちます。

3
有限体積法によるポアソン方程式へのディリクレ境界条件の適用
セル中心の不均一グリッドで有限体積法を使用する場合、ディリクレ条件が通常どのように適用されるかを知りたいのですが、 現在の実装では、最初のセルの値を固定して境界条件を課しています。 φ1= gD(xL)φ1=gD(バツL) \phi_1 = g_D(x_L) ここで、は解変数であり、はドメインのlhsにおけるディリクレ境界条件値です(NB)。ただし、境界条件はセル自体の値ではなくセル面の値を修正する必要があるため、これは正しくありません。私が実際に適用する必要があるのは、G D(XのL)のx L ≡ X 1 / 2φφ\phigD(xL)gD(バツL)g_D(x_L) バツL≡ のx1 / 2バツL≡バツ1/2x_L \equiv x_{1/2} φL= gD(xL)φL=gD(バツL) \phi_{L} = g_D(x_L) たとえば、ポアソン方程式を解いてみましょう。 0 = (ϕバツ)バツ+ ρ (x )0=(φバツ)バツ+ρ(バツ) 0 = (\phi_x)_x + \rho(x) 初期条件と境界条件で、 ρ = − 1gD(xL)= 0gN(xR)= 0ρ=−1gD(バツL)=0gN(バツR)=0\rho=-1\\ g_D(x_L)=0 \\ g_N(x_R)=0 (ここで、は右側のノイマン境界条件です)。gN(xR)gN(バツR)g_N(x_R) 数値解がセル変数の値を境界条件値()に固定したことに注目してください。これには、ソリューション全体を上方にシフトする効果があります。多数のメッシュポイントを使用することで影響を最小限に抑えることができますが、これは問題の適切な解決策ではありません。gD(xL)= …

3
暗黙的FEMと明示的FEMの違いは何ですか?
明示的なFEMと暗黙的なFEMの正確な違いは何ですか?ここの投稿によると、唯一の違いは暗黙的または明示的な時間積分が使用されているかどうかです。 私が読んだ1冊の本で覚えているように、暗黙のFEMは、質量がノードに集中していない場所です。 明示的および暗黙的なFEMの正確な定義は何ですか?

2
FortranのOctreeコード
私は科学計算に不慣れです。OctreeのFortran(できればf90)実装を探しています。 私の問題では、任意のボックスにN個の粒子(またはラプラス方程式のような方程式を解くために積分方程式法にプラグインできる密度値がわかるソース)がなくなるまで、ドメインを分割するOctreeが必要です。 私が見つけたすべてはこのC ++実装でした。使用できるFortranライブラリが既に存在するかどうかを知りたい。 また、計算ボックスへの高速積分方程式法の適用が容易になるように使用できるFortranのOctree実装に関する優れた紙の推奨事項も高く評価されます!

2
不連続ガラーキン/ポアソン/フェニックス
不連続ガラーキン法(DG)と次の離散化を使用して2Dポアソン方程式を解こうとしています(pngファイルがありますが、アップロードできません。申し訳ありません)。 方程式: ∇⋅(κ∇T)+f=0∇⋅(κ∇T)+f=0\nabla \cdot( \kappa \nabla T) + f = 0 新しい方程式: q=κ∇T∇⋅q=−fq=κ∇T∇⋅q=−fq = \kappa \nabla T\\\nabla \cdot q = -f 数値フラックスおよび弱い形式:T^T^\hat{T}q^q^\hat{q} ∫q⋅wdV=−∫T∇⋅(κw)dV+∫κT^n⋅wdS∫q⋅∇vdV=∫vfdV+∫q^⋅nvdS∫q⋅wdV=−∫T∇⋅(κw)dV+∫κT^n⋅wdS∫q⋅∇vdV=∫vfdV+∫q^⋅nvdS\int q \cdot w dV = - \int T \nabla \cdot (\kappa w) dV + \int \kappa \hat{T} n \cdot w dS\\ \int q \cdot \nabla v dV …

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