計算科学

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

3
多くの右側のスパース線形ソルバー
多くの右側(300から1000)で同じ疎な線形システム(300x300から1000x1000)を解く必要があります。この最初の問題に加えて、さまざまなシステムを解決したいと思いますが、同じ非ゼロ要素(値が異なる)で、スパースパターンが一定の多くのスパースシステムです。私の行列は不定です。 因数分解と初期化のパフォーマンスは重要ではありませんが、解決段階のパフォーマンスは重要です。現在、私はPaStiXまたはUmfpackを検討しています。おそらく、両方のソルバーをサポートするPetscをいじります多分私のニーズに合わせて少し変更しますか? スパース行列がまでの場合はどうなりますか?106×106106×10610^6 \times 10^6

1
* full *マルチグリッドアルゴリズムはどのくらい正確に実行されますか?
だから私は、Vサイクルがどのように実行されるかを理解しています(少なくとも、私はそう信じています)。Matlabで、Vサイクルの1-D、再帰バージョンを作成しました。ただし、FMGのコードを実行したとき、解決策は収束していませんでした。私の問題は、実際のFMGパーツの理解にあると考えています。私が現在知っていることはこれです: FMG補間の直前に、私は私の解決策を緩和しましたuuu エラーとuの両方を補間します(?) uuu 2グリッドvサイクルを実行し、エラーをvサイクルに渡します(?) エラーを緩和する(2番目に粗いグリッド上) とエラーを補間するuuu エラーを追加してを更新します。uuu vサイクルを実行し、ステップ4から繰り返します。 順序についてはわかりませんが、正確に補間してvサイクルに渡すものについても間違っている可能性があります。アルゴリズムに何か足りない場合はお知らせください。
12 multigrid 

5
同じ、異なるを繰り返し解く
MATLABを使用して、が時間とともに変化するすべてのタイムステップでを解く問題を解決しています。現在、MATLABを使用してこれを実現しています:Ax=bAx=b\mathbf{A} \mathbf{x}=\mathbf{b}bb\mathbf{b}mldivide x = A\b 必要なだけ多くの事前計算を行う柔軟性があるので、より高速で正確な方法があるかどうか疑問に思っていmldivideます。ここで通常行われることは何ですか?皆さんありがとう!

2
解のヤコビアンが特異な場合のニュートン法の戦略
変数およびx 2(他のすべては定数です)について次の連立方程式を解こうとしています。P、x1P、バツ1P,x_1バツ2バツ2x_2 A (1 − P)2− k1バツ1= 0A P2− k2バツ2= 0(1 − P)(r1+ x1)4L1− P(r1+ x2)4L2= 0A(1−P)2−k1バツ1=0AP2−k2バツ2=0(1−P)(r1+バツ1)4L1−P(r1+バツ2)4L2=0\frac{A(1-P)}{2}-k_1x_1=0 \\ \frac{AP}{2}-k_2x_2=0 \\ \frac{(1-P)(r_1+x_1)^4}{L_1}-\frac{P(r_1+x_2)^4}{L_2}=0 x 1とx 2の方程式1と2をそれぞれ解き、方程式3に代入することにより、この連立方程式を単一変数単一方程式に変えることができることがわかります。 matlabのコマンドを使用して解決策を見つけます。パラメーターk 1 = k 2 = 1、r 1 = r 2 = 0.2、およびA = 2を使用すると、真の解はP = x 1 = xであることがわかりました。(P)(P)(P)バツ1バツ1x_1バツ2バツ2x_2fzerok1= k2= 1k1=k2=1k_1=k_2=1r1= r2= 0.2r1=r2=0.2r_1=r_2=0.2A = 2A=2A=2。P= …

1
ドリフト拡散および関連モデルのPDEソルバー
ドリフト拡散モデルから始めて、教育目的で基本的な半導体モデルをシミュレートしようとしています。既製の半導体シミュレーターは使いたくありませんが、他の(一般的な、最近の、または曖昧な)モデルを学習しますが、既製のPDEソルバーを使用したいと思います。 しかし、単純な1Dの場合でも、ドリフト拡散モデルはいくつかの結合した非線形PDEで構成されています。 電流密度方程式 J P = Q P (X )μ P E (X )+ Q D P ∇ PJn= qn (x )μnE(x )+ qDn∇ NJn=qn(バツ)μnE(バツ)+qDn∇nJ_n = q n(x) \mu_n E(x) + qD_n \nabla n Jp= qp (x )μpE(x )+ qDp∇ PJp=qp(バツ)μpE(バツ)+qDp∇pJ_p = q p(x) \mu_p E(x) + qD_p \nabla p …
12 pde 

4
非同期セルオートマトン用の並列(GPU)アルゴリズム
非同期セルラーオートマトンと呼ばれる計算モデルのコレクションがあります。これらのモデルはイジングモデルに似ていますが、少し複雑です。このようなモデルは、CPUではなくGPUで実行することでメリットが得られるようです。残念ながら、そのようなモデルを並列化することは非常に簡単ではなく、どのように実行するかはまったくわかりません。私は主題に関する文献があることを知っていますが、それはすべて、私が実装できるものの説明を望んでいる私のような人ではなく、アルゴリズムの複雑さの詳細に興味がある筋金入りのコンピュータ科学者を対象にしているようです、その結果、私はそれをかなり浸透していません。 明確にするために、私はCPU実装を大幅に高速化する可能性があるCUDAで迅速に実装できるものほど最適なアルゴリズムを探していません。このプロジェクトでは、プログラマーの時間はコンピューターの時間よりもはるかに制限要因です。 また、非同期セルオートマトンは同期セルオートマトンとはかなり異なるものであり、同期CA(Conwayの生活など)を並列化する技術はこの問題に簡単に適応できないことを明確にする必要があります。違いは、同期CAはすべてのセルをタイムステップごとに同時に更新するのに対して、非同期CAはランダムに選択されたローカルリージョンをタイムステップごとに更新することです。 並列化したいモデルは、〜100000セルからなる格子(通常は六角形)に実装されています(さらに使用したいのですが)、それらを実行するための非並列化アルゴリズムは次のようになります。 隣接するセルのペアをランダムに選択します 「エネルギー」機能計算これらの細胞の周囲の局所近傍に基づきますΔ E△E\Delta E 依存確率で(とβ Aパラメータ)、いずれか2つのセルの状態を入れ替えるか、何もしません。e- βΔ Ee−β△Ee^{-\beta \Delta E}ββ\beta 上記の手順を無期限に繰り返します。 境界条件にはいくつかの複雑な問題もありますが、並列化にそれほど困難はないと思います。 ちょうど平衡状態ではなく、これらのシステムの過渡的なダイナミクスに興味があることに言及する価値があるため、同じ平衡分布に近づくだけではなく、上記と同等のダイナミクスを持つものが必要です。(したがって、チェッカーボードアルゴリズムのバリエーションは、私が探しているものではありません。) 上記のアルゴリズムを並列化する際の主な困難は衝突です。すべての計算はラティスのローカル領域のみに依存するため、近傍が重複していない限り、多くのラティスサイトを並行して更新できます。問題は、このような重複を回避する方法です。いくつかの方法を考えることができますが、実装するのに最適な方法があるかどうかはわかりません。これらは次のとおりです。 CPUを使用して、ランダムグリッドサイトのリストを生成し、衝突をチェックします。グリッドサイトの数がGPUプロセッサの数と等しい場合、または衝突が検出された場合、座標の各セットをGPUユニットに送信して、対応するグリッドサイトを更新します。これは簡単に実装できますが、おそらくCPUでの衝突のチェックはCPUで更新全体を行うよりもそれほど安くないので、おそらく速度をあまり上げません。 ラティスをリージョン(GPUユニットごとに1つ)に分割し、そのリージョン内のグリッドセルをランダムに選択および更新するGPUユニットを1つ用意します。しかし、このアイデアには解決方法がわからない多くの問題があります。最も明白なのは、ユニットがその領域の端に重なる近傍を選択したときに正確に何が起こるかです。 システムを次のように近似します。時間を個別のステップで進めます。格子を上に分割します別のものに事前に定義されたスキームに従ってタイムステップごとに領域のセットを作成し、各GPUユニットが、領域の境界と重なり合わないグリッドセルのペアをランダムに選択および更新します。境界はタイムステップごとに変化するため、領域が比較的大きい限り、この制約はダイナミクスにあまり影響しません。これは簡単に実装でき、高速であるように見えますが、ダイナミクスをどれだけ近似するか、または各タイムステップで領域境界を選択するための最適なスキームはどれかわかりません。「ブロック同期セルオートマトン」への参照をいくつか見つけましたが、これはこの考えと同じである場合とそうでない場合があります。(メソッドの説明はすべてロシア語であるか、アクセスできないソースにあるようですので、わかりません。) 私の具体的な質問は次のとおりです。 上記のアルゴリズムのいずれかは、非同期CAモデルのGPU並列化にアプローチする賢明な方法ですか? もっと良い方法はありますか? このタイプの問題に対応する既存のライブラリコードはありますか? 「ブロック同期」メソッドの明確な英語の説明はどこにありますか? 進捗 適切な非同期CAを並列化する方法を考え出したと思います。以下に概説するアルゴリズムは、私のように隣接するセルのペアではなく、一度に1つのセルのみを更新する通常の非同期CA用です。私の特定のケースにそれを一般化することにはいくつかの問題がありますが、私はそれらを解決する方法を考えていると思います。ただし、以下で説明する理由により、どれだけの速度のメリットが得られるかはわかりません。 考え方は、非同期CA(以降ACA)を、同等に動作する確率的同期CA(SCA)に置き換えることです。これを行うには、まずACAがポアソンプロセスであると考えます。つまり、時間は継続的に進み、各セルは、他のセルとは無関係に、その更新機能を実行する単位時間あたりの一定の確率として進行します。 バツ私はjバツ私jX_{ij}t私jt私jt_{ij}t私はj( 0 )〜経験(λ)t私j(0)〜Exp⁡(λ)t_{ij}(0) \sim \operatorname{Exp}(\lambda)λλ\lambda 値を任意に選択できるパラメーターです。) 各論理タイムステップで、SCAのセルは次のように更新されます。 k 、lk、lk, li 、j私、ji,jtk l&lt; t私はjtkl&lt;t私jt_{kl}<t_{ij} バツ私はjバツ私jX_{ij}バツk lバツklX_{kl}Δ トン〜経験(λ )△t〜Exp⁡(λ)\Delta t \sim \operatorname{Exp}(\lambda)t私はjt私jt_{ij}t私はj+ Δ …

2
非構造化セル中心FVM CFDコードに適したデータ型は何ですか?
非構造化セルベースの有限体積CFDでのセルブラウジングの効率的なデータ構造に関するアドバイスに興味があります。 (ドルフィン cfdコードで)遭遇した1つの例は、このようになります(関連するセグメントを表示します) したがって、各セルの面の数が格納される配列NFacesがあります。次に、ローカルからセルへの面番号をグローバルな面番号にマップするCFace配列。\ begin {listing} do ip = 1、Ncel ... do j = 1、NFaces(ip) k = CFace(ip、j) ipp = Face(k)%cell1 inn = Face(k)%cell2 if(inn &gt; 0)その後 !内部\ end {listing}\ begin {listing} do ip = 1、Ncel ... do j = 1、NFaces(ip)k = CFace(ip、j)ipp = Face(k)%cell1 inn = Face(k)%cell2 if(inn &gt; …

2
数値統合-NaNの処理(C / Fortran)
私は、ゼロに近い特定の値でNaNを示すトリッキーな積分を扱っており、現時点では、これが発生したときに被積分関数をゼロに設定するISNANステートメントを使用して非常に大雑把に扱っています。FORTRANのNMSライブラリ(q1daルーチン-q1daxも同じです)とCのGSLライブラリ(QAGSルーチンを使用)でこれを試しました。 被積分関数でNaNとINFを処理するように特別に設計されたCQUAD(CのGSLライブラリの一部)を調べましたが、リファレンスには有用な情報がほとんどなく、オンラインのサンプルプログラムは見つかりませんでした。誰かが仕事をすることができるCまたはFORTRANのその他の数値積分ルーチンを知っていますか?
12 quadrature 

1
大きなスパース整数行列のアルゴリズム
数値の安定性を犠牲にすることなく、大きなスパース行列で行列演算を実行するライブラリを探しています。行列は1000+ x 1000+になり、行列の値は0〜1000になります。インデックス計算アルゴリズムを実行するため、行列の(スパース)行ベクトルをシリアルに生成します。各行を開発するにつれて、線形独立性をテストする必要があります。必要な数の線形独立ベクトルでマトリックスを入力したら、マトリックスを縮小行エシェロン形式に変換する必要があります。 ここでの問題は、私の実装がガウス消去法を使用して線形独立性を決定することです(すべての行ベクトルが見つかったら、行の階層を確保します)。ただし、行列の密度とサイズを考えると、キャンセルを実行するには先頭のエントリのlcmを見つける必要があるため、新しい行のエントリは時間とともに指数関数的に大きくなります。行列の縮小形を見つけると、問題がさらに悪化します。 私の質問は、線形独立性をテストし、エントリを可能な限り小さく保ちながら行の階段型を解くことができるアルゴリズム、またはそれ以上の実装がありますか?線形独立性の効率的なテストは、インデックス計算アルゴリズムで最も多く実行されるため、特に重要です。

4
任意精度のスケーラブルロープシミュレーション
ロープオブジェクトをシミュレートしようとしています。私が理解している定式化は、スプリングで接続された粒子の配列です。これらのスプリングのk値は非常に大きいため、線は変形しますが、伸びはほとんどありません。ロープは振り子の一般化であるため、これを時間の関数として解決することは閉じた形式では不可能であると結論付けました(閉じた形式ではありません)。 それから、近似解に落ち着きます。拡張性の高いアルゴリズムが必要です。例では、明示的または暗黙的なオイラー積分を使用して粒子を移動しています。これはスケーリングしません。 これを確認するには、n個のノードを持つロープを考えてください。一端に大きな力を加えます。ロープはあまり伸びてはならないので、もう一方の端の加速はすぐに行わなければなりません。 しかし、オイラーの統合で、取得する任意のもう一方の端は、n個のステップを必要とする力を。指数関数的な減衰に気付きます。最初のノードが特定の量を加速する場合、隣接ノードの加速は小さくなります(同じ速度で加速する場合、アルゴリズムは安定しません)。その結果、隣接するノードにそのノードがさらに遅く加速します! したがって、nノード離れている場合、加速はほとんど無視できます。これは、大幅に伸びるロープにつながります。シミュレーションの解像度を2倍にしたいだけの場合、同様の動作を得るには、突然数十または数百倍の時間ステップを踏む必要があります。 この問題を解決する簡単な方法を探しています。つまり、高解像度のシミュレーションは、多項式時間の余分な計算のみで解に収束します。マトリックスと線形代数のテクニックの完全なライブラリが利用可能です。古典力学の私の知識は非常に優れており、数値解析を知っています。
12 simulation 

1
3D 4ノード要素に多項式表現を統合する方法は?
3次元の4ノード要素上の多項式を統合したい。FEAに関するいくつかの書籍では、任意のフラットな4つのnoned要素に対して積分が実行される場合について説明しています。この場合の通常の手順は、ヤコビ行列を見つけ、その行列式を使用して積分基底を正規化されたものに変更することです。 換言すれば∫Sf(x,y) dxdy∫Sf(x,y) dxdy\displaystyle\int_S f(x,y)\ \mathrm{d}x\,\mathrm{d}y\,∫−11∫−11f~(e,n) |det(J)|dedn∫1−1∫1−1f~(e,n) |det(J)|dedn\displaystyle\int^{-1}_{1}\int^{-1}_{1} \tilde{f}(e,n)\ \left|\det(J)\right|\,\mathrm{d}e\,\mathrm{d}n しかし、2Dの場合、任意のフラット要素を2×2のフラットな平面要素に変更します。 3D 4節点要素は一般に平坦ではありませんが、それでも何らかの方法でデカルト座標系に関連する2D座標系でマッピングできると思います。{x、y、z}を{e、n}で表現する方法と、この場合のヤコビ行列のサイズ(正方形であると想定されている)はどうなるかわかりません。

1
不正確な行検索のWolfe条件を理解する
Nocedal&WrightのBook Numerical Optimization(2006)によると、不正確な線探索のWolfeの条件は、下降方向場合、ppp 十分減少: 曲率条件:∇ F (X + α P )T P ≥ C 2 ∇ F (X )T P 用0 &lt; C 1 &lt; C 2 &lt; 1f(x+αp)≤f(x)+c1αk∇f(x)Tpf(x+αp)≤f(x)+c1αk∇f(x)Tpf(x+\alpha p)\le f(x)+c_1\alpha_k\nabla f(x)^T p∇f(x+αp)Tp≥c2∇f(x)Tp∇f(x+αp)Tp≥c2∇f(x)Tp\nabla f(x+\alpha p)^Tp\ge c_2 \nabla f(x)^T p0&lt;c1&lt;c2&lt;10&lt;c1&lt;c2&lt;10<c_1<c_2<1 私は新しいポイントでの関数値ことをどのように十分な減少条件の状態を見ることができるでの接線の下でなければならないのx。しかし、曲率条件が幾何学的に何を示しているのかはわかりません。また、なぜc 1 &lt; c 2の関係を課さなければならないのですか?これは幾何学的に何を達成しますか?x+αpx+αpx+\alpha pxxxc1&lt;c2c1&lt;c2c_1<c_2

3
数値安定性のヒューリスティックチェック
数値的に評価したい変数x iの実数値関数があると仮定します。一般に、fの式には積、有理数、超越関数などが含まれる可能性があり、その数値的安定性を分析的に調査するのは長くなります。または、少なくとも実際にそれを行うには時間がかかります。安定性を保証する同等の短いものがないと仮定します。fの数値安定性を分析するための系統的な手順はありますかf(x1,…,xN)f(x1,…,xN)f(x_1,\ldots ,x_N)xixix_iffffff。コンピューター代数システムを使用して得られた任意の精度の結果と比較することを考えています。関数は、stdlib関数と単精度または倍精度を使用してCで実装されます。有限精度での近似の品質を定量化するには、どの量を比較する必要がありますか?変数の重要な値を判断するにはどうすればよいですか?他の人が結果を簡単に再現できるように、コンパイラとコンパイラ最適化を選択するにはどうすればよいですか?...問題の設定は、適切な答えを出すためにおそらく汎用的なものであることを知っています。しかし、これはコンピューターサイエンスの一般的な問題であり、そのような分析を実行するための標準を提案する参考文献があるのではないかと考えています。
12 stability 

2
拡張ラグランジアンの効率的な前提条件
私は非線形等式制約で非線形問題を解決したいのですが、よく知られているように、線形化されたシステムの条件数を損なうペナルティ正則化項を持つ拡張ラグランジアンを使用しています(各ニュートン反復で意味します) 。ペナルティ項が大きいほど、条件数は悪くなります。その特定のケースでこの悪い条件を取り除くための効率的な方法を誰かが知っていますか? 具体的には、一般的に冗長になる可能性のある多くの制約があるため、古典的な拡張ラグランジアンを使用しています。したがって、制約変数を主変数に盲目的に組み込むことは非常に便利です。KKTシステムで直接変数の削除または効率的な前提条件に基づいた他のより洗練されたアプローチを試しましたが、制約の冗長性のために、いくつかの問題があります。 変数に関する問題は、ラグランジュに従って、 L(U、λ ):= W(U)+ ρ λ Tu=[u1,⋯,un]u=[u1,⋯,un]\mathbf u =[u_1,\cdots,u_n]L(u,λ):=W(u)+ρλTc(u)+ρ2c2(u)L(u,λ):=W(u)+ρλTc(u)+ρ2c2(u)\mathcal L(\mathbf u,\lambda):= \mathcal W(\mathbf u) + \rho \lambda^T \,c(\mathbf u) + \frac{\rho}{2} c^2(\mathbf u) したがって、一般的に、各ニュートン反復の目標は、 With(制約のヘッセ行列を削除) という形式の問題を解決することです および b(\ mathbf u、\ rho):=-\ big(\ nabla _ {\ mathbf u} \ mathcal W(\ mathbf u)+(\ rho + \ lambda ^ …

1
ODEの線形システムのアルゴリズム
私は疑問に思います:を解くのに最適なアルゴリズムは何ですか ここでは実行列です。Aは明示的に時間依存ではなく、通常は疎ですが、必ずしもバンド化されていません。その固有値には正の実数部があります。Aは対角化も可能ですが、完全に対角化するには計算が効率的すぎるには大きすぎる場合があります。dあなたはdt= A udあなたはdt=Aあなたは\begin{equation} \frac{du}{dt} = Au \end{equation}AAAn × nn×nn\times n 私が良い経験をした暗黙の台形規則があります。 (私は- Δ トン2A )あなたn + 1= ( I+ Δ トン2A )あなたn(私−△t2A)あなたはn+1=(私+△t2A)あなたはn\begin{equation} \left(I-\frac{\Delta t}{2} A\right) u_{n+1} = \left(I+\frac{\Delta t}{2} A\right) u_{n} \end{equation} 明示的な方法やパデ近似はどうですか?また、強制用語がRHSに追加された場合、これはどのように変わりますか?

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