計算科学

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

3
実スパース行列の特性多項式の計算
一般的なスパース行列所与とM << N(訂正:M « N 2)非ゼロ要素(典型的には、mは∈ O(N ))。Aは特定のプロパティ(例:正定性)を持たず、構造(例:縞模様)がないと見なされるという意味で一般的です。A∈Rn×nA∈Rn×nA \in \mathbb{R}^{n\times n}m≪n2m≪n2m \ll n^2m∈O(n)m∈O(n)m \in {\cal O}(n)AAA Aの特性多項式または最小多項式のいずれかを計算するための優れた数値手法のいくつかは何ですか?AAA

1
静的、動的、単一の動的リンクとはどういう意味ですか?
インテルMKL for BLASを使用し、コマンドラインオプションのヘルプにはインテルMKLリンクラインアドバイザーを使用しています。 アドバイザーは、静的、動的、および単一動的ライブラリーのオプションを提供します。これらの用語はどういう意味ですか? これに関するSOに関する投稿は数多くありますが、それらすべては科学的/数学的なコードではなくソフトウェアの開発に焦点を当てています。(これは特に便利でした) これらの用語は並列コンピューティングにどのように関連していますか? どちらか一方が他方より「優れている」のでしょうか。(より良いものをより正確に定義する必要があることは知っていますが、今のところ方法がわかりません) より一般的に使用されるものとその理由は? リンクするときにプログラマは何を考慮する必要がありますか?
9 compiling 

1
ストラン分割の最適な使用(反応拡散方程式用)
単純な1D反応拡散方程式の解を計算しているときに奇妙な観察をしました。 ∂∂ta = ∂2∂バツ2a − a b∂∂ta=∂2∂x2a−ab\frac{\partial}{\partial t}a=\frac{\partial^2}{\partial x^2}a-ab ∂∂tb = − a b∂∂tb=−ab\frac{\partial}{\partial t}b=-ab ∂∂tc = a∂∂tc=a\frac{\partial}{\partial t}c = a 初期値定数である(B (0 、X )= B 0)、および私は上に一体に興味があるから0に1(∫ 1 0(T 、X )D T)。目的Cと方程式∂bbbb (0 、x )= b0b(0,x)=b0b(0,x)=b_0aaa000111∫10a(t,x)dt∫01a(t,x)dt\int_0^1a(t,x)dtcccちょうどこの積分を評価することです。∂∂tc=a∂∂tc=a\frac{\partial}{\partial t}c = a 拡散と反応のカップリングにストラン分割スキームを使用しました(ハーフステップ反応、次にフルステップ拡散、そして再びハーフステップ反応)、拡散にはクランクニコルソンスキーム、そして反応の分析ソリューション(式を含む)。∂∂tc=a∂∂tc=a\frac{\partial}{\partial t}c = a 分析ソリューションの1ステップは、クランクニコルソンスキームの1ステップよりも3倍以上遅いため、各反応ステップで複数のクランクニコルソンステップを作成しようとしました。Strang分割スキームのステップを減らして、全体的に速くなるようにしたいと思っていました。 ただし、反対の効果が見られます。つまり、複数のクランクニコルソンステップが使用される場合、ストラン分割スキームにはさらに多くのステップが必要です。(私はの積分の精度にのみ関心があります。それはそれ自体よりも速く収束するようです。)しばらく疑問に思った後、同じ効果がb (t 、x )= b 0 …

1
LAPACKは3重対角システムをどのように解決しますか?その理由は?
私のプロジェクトでは、タイムステップごとに2つの3重対角行列を解く必要があるため、それらに対して優れたソルバーを使用することが重要です。私は独自の実装を行いましたが、ウィキペディアに記載されている古典的な方法で実装しました。その後、代わりにLapackを使用してみましたが、驚いたことに遅くなりました! さて、Lapackの内部では、LU分解による解法を実行しているように見えますが、なぜそうなるよりも複雑ではないのでしょうか。 さらに、nr.comの「Numerical Recipes」の本で、システムを再帰的に小さな三重対角問題に分割するアルゴリズムを見つけました。それは有望に見えた。他にグッズはありますか? 更新:問題のサイズは約1000x1000です。私はGotoBLASを使用しましたが、Lapack 3.1.1ライブラリも提供します。問題は対称的ではありません。私は一般的な三重対角行列にLapackルーチンを使用しました。

1
残りの多項式を計算するための数値的に安定したアルゴリズム
ましょうと゜F > 度G。f mod gを計算するための漸近的に高速で数値的に安定したアルゴリズムを探しています。意図されたアプリケーションでは、f 、gは両方とも倍精度浮動小数点係数をもつ密な多項式です。しかし、今のところ、実装よりもアルゴリズムに興味があります。数値多項式のGCDを計算するためのアルゴリズムのリファレンスも高く評価されています。f,g∈R[x]f,g∈R[x]f, g \in \mathbb{R}[x]degf>deggdeg⁡f>deg⁡g\deg f > \deg gfmodgfmodgf \bmod gf,gf,gf, g


4
代数マルチグリッドコード
代数的マルチグリッド法(AMG)の実装に関する詳細を理解したいと思います。私は「マルチグリッドチュートリアル」を読んでいます。これは非常に優れており、AMGの補間、粗グリッドオペレーター、粗グリッド選択のすべての詳細を説明しています。しかし、コードをいじって読むのと同じだと私は思います。 そこで、SF McCormickの「Multigrid Methods」(SIAM)の最後にある幾何学的マルチグリッドFORTRANコードのような、古典的なAMGの「サンプルコード」を誰かが知っているかどうかを尋ねたいと思います。メソッドの詳細を学ぶためにBoomerAMGのような高品質で量産コードを入手するのは非常に困難です。

1
メッシュの値が与えられた場合、レベルセットの等高線を効率的に構築するためにどのアルゴリズムを使用できますか?
メッシュ、面、エッジE、および頂点Vがあり、事前定義されたレベルセットコンターのリストがあります。FFFEEEVVV 最も効率的な方法で輪郭を作成するために使用できるアルゴリズムは何ですか? 輪郭のプロットは上に示されています。同じ色の線は同じ値を持っています。zzz

5
7つの非線形方程式のシステムの記号解
私は常微分方程式のシステムを持っています-7つの方程式と、病気の伝染の数学モデルの一部としてそれらの振る舞いを支配する約30のパラメーター。私は思います好きな変更、これらの方程式のための定常状態見つけることdx/dt = rest of the equationに0 = equation方程式のそれぞれのためには、それは簡単代数の問題になります。これは手動で行うこともできますが、その種の計算はとんでもないほど苦手です。 この問題の小さいバージョンを処理できるMathematicaを使用してみましたが(ここを参照)、Mathematicaはこの問題を解決しようとしています。これに取り組むためのより効率的/効果的な方法はありますか?より効率的なシンボリック数学システム?他の提案? いくつかの更新(3月21日): 目標は確かにそれらを象徴的に解決することです-数値の答えは素晴らしいですが、現時点では最終目標は象徴的なバージョンです。 少なくとも1つの均衡があります。私は実際に座ってこれを証明したわけではありませんが、設計上、最初は何も感染していない些細なものを少なくとも1つ持つべきです。それ以外に何もないかもしれませんが、それは私が他の何よりもコンテンツとしてなります。 以下は、話し合っている実際の方程式のセットです。 要約すると、私は7つの変数の7つの2次方程式のシステムの解のシンボリック式を探しています。

4
A'AおよびAA '配合の条件数
これは、(ユセフサアド、示されていますスパース線形システムのための反復法、P。260)がcond(A′A)≈cond(A)2cond(A′A)≈cond(A)2cond(A'A) \approx cond(A)^2 これはにも当てはまりますか?AA′AA′AA' ケースにはであると、私はその観察AAAN×MN×MN\times MN≪MN≪MN \ll Mcond(A′A)≫cond(AA′)cond(A′A)≫cond(AA′)cond(A'A) \gg cond(AA') この場合、での定式化が望ましいということですか?AA′AA′AA'

1
周期的な境界条件を持つシュレディンガー方程式
以下について、いくつか質問があります。 私は、クランクニコルソンの離散化を使用して1Dでシュレディンガー方程式を解き、続いて結果の三重対角行列を反転させようとしています。私の問題は周期的な境界条件の問題に発展したため、シャーマンモリソンアルゴリズムを使用するようにコードを変更しました。 仮定しv、私は三重対角行列を反転したいとき、各時間ステップでの私のRHSです。のサイズvは、スペース上にあるグリッドポイントの数です。私が設定するv[0]とv[-1]、私の定期的な状況で必要とされるように、お互いに関して、私の方程式は爆発します。なぜこれが起こっているのかわかりません。私はpython2.7とscipyの組み込みのsolve_bandedを使用して方程式を解いています。 これは私の2番目の質問につながります。Pythonは私が最もよく知っている言語であるため使用しましたが、(numpyとscipyによって提供される最適化を使用しても)かなり遅いと感じます。C ++に慣れているので、C ++を使用してみました。BLAS最適化されるGSLを使用すると思いましたが、複雑なベクトルを作成したり、そのような複雑な値のベクトルで三重対角行列を解いたりするためのドキュメントが見つかりませんでした。 私は、波動関数間の結合を含めるために後で一般化する最も簡単な方法であり、したがってオブジェクト指向言語に固執していると思うので、プログラムにオブジェクトを入れたいと思います。 三重対角行列ソルバーを手動で作成することもできましたが、Pythonで作成すると問題が発生しました。細かく細かいタイムステップで長い時間をかけて進化していくと、エラーが蓄積し、無意味なものになってしまいました。これを念頭に置いて、組み込みのメソッドを使用することにしました。 アドバイスは大歓迎です。 編集:関連するコードスニペットは次のとおりです。この表記法は、Wikipediaのページの三重対角行列(TDM)方程式から借用したものです。vは、各タイムステップでのクランクニコルソンアルゴリズムのRHSです。ベクトルa、b、cはTDMの対角線です。定期的なケースの修正されたアルゴリズムは、CFD Wikiからのものです。少し名前を変更しました。彼らがu、vと呼んでいるものをU、V(大文字)と呼んでいます。私はqを補数、yを一時的なソリューション、実際のソリューションをself.currentStateと呼んでいます。ここでv [0]とv [-1]の割り当てが問題を引き起こしているため、コメント化されています。ガンマの要素は無視してかまいません。これらは、ボーズアインシュタイン凝縮のモデル化に使用される非線形因子です。 for T in np.arange(self.timeArraySize): for i in np.arange(0,self.spaceArraySize-1): v[i] = Y*self.currentState[i+1] + (1-2*Y)*self.currentState[i] + Y*self.currentState[i-1] - 1j*0.5*self.timeStep*potential[i]*self.currentState[i] - self.gamma*1j*0.5*self.timeStep*(abs(self.currentState[i])**2)*self.currentState[i] b[i] = 1+2*Y + 1j*0.5*self.timeStep*potential[i] + self.gamma*self.timeStep*1j*0.5*(abs(self.currentState[i])**2) #v[0] = Y*self.currentState[1] + (1-2*Y)*self.currentState[0] + Y*self.currentState[-1] - 1j*0.5*self.timeStep*potential[0]*self.currentState[0]# - self.gamma*1j*0.5*self.timeStep*(abs(self.currentState[0])**2)*self.currentState[0] …

1
高速フーリエ変換を使用して混合境界条件で2Dポアソン問題を解決するには、どのフーリエ級数が必要ですか?
境界条件がすべて1つのタイプである場合、高速フーリエ変換を使用してポアソン問題を解くことができると聞きました。ディリクレの正弦級数、ノイマンの余弦、および周期の両方です。2Dの長方形のドメインを考えて、2つの反対側に周期的な境界条件があり、他の2つにはディリクレ条件があるとします。この問題を効率的に解決するために、高速フーリエ変換を適用できますか?もしそうなら、指数形式は十分ではないでしょうか?そうでない場合、この状況に対してどのソルバーをお勧めしますか?

3
ブロック構造のない不確定システムの反復法
行列の不定システムは、たとえば混合有限要素による鞍点問題の離散化に現れます。次に、システムマトリックスを次の形式で入力できます。 (ABBtC)(ABtBC)\begin{pmatrix} A & B^t \\ B & C\end{pmatrix} ここで、は負(半)確定、は正(半)確定、は任意です。もちろん、規約によっては確定性条件を使用することもできますが、これはこれらの行列の構造とほぼ同じです。AAACCCBBB これらの方法には、実際にはシステムを共役勾配、勾配降下法などで解くことができる同等の半定値システムに変換するための単なる「トリック」である宇沢の方法を使用できます。 私はそのようなブロック構造を持たない不明確なシステムに直面しています。その場合、宇沢タイプの方法は適用されません。私はPaige&Saundersによって導入された最小残差法(MINRES)を知っています。これは、3項の再帰であり、実装が簡単なようです。 質問: MINRESは一般的に、プロトタイピングに適していますか?それは何か実用的な意味がありますか?現在、プレコンディショニングは中心的な問題ではありません。

2
FEM DGメソッドをリーマンソルバーに結合
不連続なガラーキン有限要素ソルバーとリーマンソルバーを結合する優れた論文やコードはありますか? 楕円問題と双曲線問題の結合を探る必要がありますが、ほとんどの分割方法はせいぜいアドホックです。私は大量のFEniCSコードを持っているので、リーマンソルバーをそれと組み合わせたいだけです。単純なRoeソルバーが最初ですが、もっと複雑な方法を使用するためのガイダンスを探しています。

1
関数を特異点と統合するためにどの数値求積法を選択しますか?
たとえば、u = 1のノルムを数値計算したいとします。L2L2L^2ゼロを含むいくつかのドメインにおいて、Iは、ガウス求積を試み、それが失敗し、それはちょっと遠い実からなるL2統合する球座標を用いて、単位球上のノルムでありますこれを行う良い方法はありますか?この問題は、リエントラントコーナーのあるドメインの有限要素計算のおもちゃの問題でよく見られます。ありがとう。u = 1(x2+ y2+ z2)1 / 3あなた=1(バツ2+y2+z2)1/3\displaystyle u = \frac{1}{(x^2+y^2+z^2)^{1/3}}L2L2L^2

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