計算科学

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

1
固定小数点問題の非単調収束
バックグラウンド 私は、液体理論からOrnstein-Zernike方程式の変形を解いています。抽象的に、問題は不動点問題を解くと表現できます。ここで、Aは積分代数演算子であり、c (r )は解関数(OZ直接相関関数)です。私は初期の試行解c 0(r )を提供し、スキーム c j + 1 = α (A c (r )= c (r )Ac(r)=c(r)A c(r)=c(r)AAAc (r )c(r)c(r)c0(r )c0(r)c_0(r)αは調整可能なパラメータの制御ミックスつまり Cと Cの次の試験溶液中に使用しました。この議論のために、 αの値は重要ではないと仮定しましょう。私が希望する許容誤差内に反復が収束するまで繰り返し ε: ΔのJ + 1 ≡ ∫ D → R | c j + 1(r )− ccj + 1= α (A cj)+ (1 - α …

6
メッシュの一般的なファイル/データ形式(FEM用)とは何ですか?
FEMシミュレーションを開発しています。初期のテストでは、簡単な自己記述型のメッシャーとメッシュグラフの視覚化を使用します。ただし、既存のメッシャーによって生成されたデータを使用するようにプログラムを準備し、既存の視覚化ツールに出力したいと思います。 (FEM)メッシュのファイル形式と内部データ形式の推奨(準)標準はありますか?

3
DG-FEMにおける数値フラックスの役割
私はHesthaven / Warburtonの本を使用してDG-FEMメソッドの背後にある理論を学んでおり、「数値フラックス」の役割について少し混乱しています。これが基本的な質問であればおIびしますが、満足のいく答えが見つかりませんでした。 線形スカラー波動方程式を考えます。 ここで、線形フラックスはとして与えられます。、F(U)=AU∂あなたは∂t+ ∂f(u )∂バツ= 0∂あなたは∂t+∂f(あなたは)∂バツ=0\frac{\partial u}{\partial t} + \frac{\partial f(u)}{\partial x} = 0f(u )= a uf(あなたは)=aあなたはf(u) = au Hesthavenの本で紹介されているように、各要素、基底関数ごとに1つの方程式があり、残差が弱くなることを強制します。NkkkNNN Rh(x 、t )= ∂あなたはh∂t+ ∂Uh∂バツRh(バツ、t)=∂あなたはh∂t+∂aあなたはh∂バツR_h(x,t) = \frac{\partial u_h}{\partial t} + \frac{\partial au_h}{\partial x} ∫DkRh(x 、t )ψn(x )dx = 0∫DkRh(バツ、t)ψn(バツ)dバツ=0\int_{D^k} R_h(x,t) \psi_n(x) \, dx = 0 いいよ したがって、パーツによる統合を1回行って「弱いフォーム」に到達し(1)、パーツによる統合を2回行って「強いフォーム」を取得します(2)。Hesthavenの一種の行き過ぎだが、簡単に一般化された1Dの表面積分形式を採用します。 (1)∫Dk(∂あなたはkh∂tψn- …

2
悪条件の線形システムを正確に解決できるのはなぜですか?
ここでの答えによると、(線形システムの解法のための)条件数が大きいと、浮動小数点ソリューションで保証される正しい桁数が減少します。擬似スペクトル法の高次微分行列は、通常、非常に悪条件です。なぜ彼らはまだ非常に正確な方法であるのですか? 悪条件の行列から生じる低精度は保証された値にすぎないことを理解していますが、それでも悪条件の行列が実際の直接的な方法で正確に解かれるのか疑問に思いLCOLます。Wang et al。、擬似スペクトル積分行列を使用したウェル条件付きコロケーション方法、SIAM J. Sci。計算、36(3)。


2
固有値問題の検証
フォームの問題から始めましょう (L+k2)u=0(L+k2)u=0(\mathcal{L} + k^2) u=0 与えられた境界条件のセット(Dirichlet、Neumann、Robin、Periodic、Bloch-Periodic)。これは、いくつかの幾何学および境界条件の下で、ある演算子の固有値と固有ベクトルを見つけることに対応しLL\mathcal{L}ます。たとえば、音響学、電磁気学、弾性力学、量子力学でこのような問題を得ることができます。 さまざまな方法、たとえば、有限差分法を使用して演算子を離散化できることを知っています [A]{U}=k2{U}[A]{U}=k2{U}[A]\{U\} = k^2 \{U\} または、有限要素法を使用して取得する [K]{U}=k2[M]{U}.[K]{U}=k2[M]{U}.[K]\{U\} = k^2 [M]\{U\} \enspace . あるケースでは、固有値問題と一般化された固有値問題を別のケースで取得します。問題の離散バージョンを取得した後、固有値問題のソルバーを使用します。 いくつかの考え Manufactured Solutionsの方法は、方程式のバランスをとるためのソース用語がないため、この場合は役に立ちません。 行列および[ M ]が、ソースタームの周波数領域の問題を使用してうまくキャプチャされていることを検証できます。たとえば、[K][K][K][M][M][M] [∇2+ω2/c2]u(ω)=f(ω),∀ω∈[ωmin,ωmax][∇2+ω2/c2]u(ω)=f(ω),∀ω∈[ωmin,ωmax][\nabla^2 + \omega^2/c^2] u(\omega) = f(\omega) \enspace ,\quad \forall \omega \in [\omega_\min, \omega_\max] の代わりに [∇2+k2]u=0.[∇2+k2]u=0.[\nabla^2 + k^2] u = 0 \enspace . しかし、これはソルバーの問題をチェックしません。 たぶん、FEMやFDMなどの異なる方法のソリューションを比較できます。 質問 …

1
Krylov加速マルチグリッド(MGを前提条件として使用)はどのように動機付けられますか?
マルチグリッド(MG)は、線形システム解くために使用されてもよい初期推定構築することによって、X 0とするための次の繰り返しiは= 0 、.. 1収束するまで:A x = bAバツ=bAx=bバツ0バツ0x_0i = 0、1 ...私=0、1 ..i=0,1.. 残差r i = b − A x iを計算しますr私= b − A x私r私=b−Aバツ私r_i = b-Ax_i 近似を得るためにマルチグリッドサイクルを適用、ここで、A 、E 、I = R I。ΔのX私≈ E私△バツ私≈e私\Delta x_i \approx e_iA e私= r私Ae私=r私Ae_i = r_i アップデートは、バツi + 1← x私+ Δ X私バツ私+1←バツ私+△バツ私x_{i+1} \gets x_i + \Delta …

1
Python関数で壊滅的なキャンセルを避ける方法は?
関数を数値的に実装するのに問題があります。入力値が大きい場合、結果は非常に大きな数倍と非常に小さな数であるという事実に悩まされます。壊滅的なキャンセルが正しい用語であるかどうかはわかりませんので、正しい場合は修正してください。何かがおかしくなっている証拠: 6の大きな入力に対して、振動と0.0の割り当てを回避するにはどうすればよいですか? 私の機能は次のとおりです。 import numpy as np def func(x): t = np.exp(-np.pi*x) return 1/t*(1-np.sqrt(1-t**2))

3
Thomasアルゴリズムは、対称対角優勢なスパース三重対角線形システムを解くための最速の方法ですか
Thomasアルゴリズムが、アルゴリズムの複雑さの観点から対称対角線上にあるスパース三重対角システムを解決するための最速の方法(おそらく?)かどうか疑問に思っています(LAPACKなどの実装パッケージを探していません)。トーマスアルゴリズムとマルチグリッドの両方が複雑さであることは知っていますが、マルチグリッドの定数因子はそれよりも少ないのでしょうか?マルチグリッドの方が速いように思えませんが、私は前向きではありません。O(n )O(n)O(n) 注:マトリックスが非常に大きい場合を考えています。直接的な方法または反復的な方法のどちらでもかまいません。

2
Matlabの積分がScipyでintegrated.quadより優れているのはなぜですか?
matlabが数値積分とScipyを処理する方法に不満を感じています。以下のテストコードで次の違いを観察します。 Matlabのバージョンは、私のPythonの同等バージョンよりも平均で24倍高速に動作します! Matlabのバージョンは警告なしで積分を計算することができますが、Pythonは nan+nanj 上記の2つの点に関して、Pythonで同じパフォーマンスが得られるようにするにはどうすればよいですか?文書によると、両方の方法は、積分を近似するために「グローバル適応求積法」を使用する必要があります。 以下は、2つのバージョンのコードです(かなり似ていますが、Pythonでは複雑な被積分関数を処理できるように積分関数を作成する必要があります)。 Python import numpy as np from scipy import integrate import time def integral(integrand, a, b, arg): def real_func(x,arg): return np.real(integrand(x,arg)) def imag_func(x,arg): return np.imag(integrand(x,arg)) real_integral = integrate.quad(real_func, a, b, args=(arg)) imag_integral = integrate.quad(imag_func, a, b, args=(arg)) return real_integral[0] + 1j*imag_integral[0] vintegral = np.vectorize(integral) def …

1
有限差分の近似ヤコビアンは、ニュートン法の不安定性を引き起こすことができますか?
私はpython 3に後方オイラーソルバーを実装しました(numpyを使用)。私自身の便宜と演習として、勾配の有限差分近似を計算する小さな関数を作成しました。これにより、ヤコビアンを常に分析的に決定する必要はありません(可能な場合でも!)。 Ascher and Petzold 1998で提供された説明を使用して、特定のポイントxで勾配を決定するこの関数を作成しました。 def jacobian(f,x,d=4): '''computes the gradient (Jacobian) at a point for a multivariate function. f: function for which the gradient is to be computed x: position vector of the point for which the gradient is to be computed d: parameter to determine perturbation value eps, …

4
ハードウェアエラー確率の推定
http://www.nersc.gov/users/computational-systems/edison/configurationで4時間、10万コアでスーパーコンピューター計算を実行し、ネットワーク上で約4 PBのデータを交換し、約4 TBのI / O. 計算はすべて整数であるため、結果は正しいか間違っています(中間の数値エラーはありません)。 コードが正しいと仮定して、ハードウェア障害のために計算が間違っている確率を推定したいと思います。これについて良い方法は何ですか?そのような推定を行うために必要な数値の良い情報源はありますか?

2
] 0,1 [の熱方程式の周期境界条件
私たちは一次元でスムーズな初期条件と熱方程式を考えてみましょう: ∂tu=∂xxu∂tu=∂xxu \partial_t u = \partial_{xx} u 開区間で]0,1[]0,1[]0,1[、と私たちは有限差分を数値的にそれを解決したいと仮定しましょう。 問題を適切に解決するには、x=0x=0x=0およびで境界条件を付与する必要があることを知っていx=1x=1x=1ます。ディリクレまたはノイマンがうまく機能することを知っています。 最初のケースでNNN内点xk=kN+1xk=kN+1x_k=\frac{k}{N+1}のためにk=1,⋯,Nk=1,⋯,Nk=1,\cdots,N、その後、私はNNN未知数を:uk=u(xk)uk=u(xk)u_k=u(x_k)のためのk=1,⋯,Nk=1,⋯,Nk=1,\cdots,N、のでuuu境界で規定されています。 2番目のケースでは、N+2N+2N+2未知数実際にありu0,⋯,uN+1u0,⋯,uN+1u_0,\cdots,u_{N+1}、境界でラプラシアンを離散化するために(同種の)ノイマンBCを使用する方法を知っています。x−1x−1x_{-1}およびxN+2xN+2x_{N+2}および等式: u1−u−12h=0=uN+2−uN2hu1−u−12h=0=uN+2−uN2h\frac{u_1-u_{-1}}{2 h} = 0 = \frac{u_{N+2}-u_N}{2 h} 私の質問は、定期的なBCについてです。私は1つの方程式を使用することができると感じている、すなわち が、おそらく2、そして私が使用する ∂ Xのu (0 )= ∂ X Uを(1 )u(0)=u(1)u(0)=u(1)u(0) = u(1)∂xu(0)=∂xu(1)∂xu(0)=∂xu(1)\partial_x u(0) = \partial_x u(1) しかし、私にはわかりません。どれだけの未知数を持っているべきか、私にもわかりません。それは、?N+1N+1N+1

3
有限差分法を使用するときに曲線境界条件を処理する方法は?
私は自分でPDEを数値的に解くことについて学ぼうとしています。 FDMはPDEの多くの数値的手法の基礎であると聞いたので、私はしばらくの間、差分法(FDM)から始めました。これまでのところ、FDMの基本的な理解があり、ライブラリとインターネットで見つけた資料を使用して、通常の地域にある簡単なPDEのコードを書くことができましたが、奇妙なことに、これらの資料はほとんど話せませんこのような不規則な、湾曲した、奇妙な境界の処理について。 さらに、曲線の境界に対処する簡単な方法を見たことはありません。たとえば、これまで見てきた最も詳細な議論(主にp71の3.4およびp199の6.4 )を含む書籍「偏微分方程式の数値解法-はじめに(Morton K.、Mayers D)」は、私にとって本当に面倒でイライラする外挿。 それで、タイトルが尋ねたように、湾曲した境界に関して、FDMを使用するとき、通常人々はそれをどのように扱いますか?言い換えれば、最も一般的な治療法は何ですか?それともPDEのタイプに依存しますか? (少なくとも比較的)エレガントで高精度の曲線境界に対処する方法はありますか?または、それは避けられない痛みですか? 私も尋ねたいのですが、人々は実際に湾曲した境界に実際にFDMを使用していますか?そうでない場合、一般的な方法は何ですか? 任意の助けをいただければ幸いです。

3
わずかに振動するシリーズを高精度に計算しますか?
私は、次の興味深い機能を有していると仮定: 微分がπの有理倍数で連続していないなど、不快な特性があります。閉じたフォームが存在しないと思われます。f(x)=∑k≥1coskxk2(2−coskx).f(x)=∑k≥1cos⁡kxk2(2−cos⁡kx). f(x) = \sum_{k\geq1} \frac{\cos k x}{k^2(2-\cos kx)}. ππ\pi 部分和の計算とリチャードソンの外挿を使用して計算できますが、問題は、十分な数の小数桁(たとえば、100が望ましい)に関数を計算するには遅すぎることです。 この機能をよりうまく処理できる方法はありますか? ここでのプロットだいくつかの成果物と:f′(πx)f′(πx)f'(\pi x)

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