計算科学

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

2
連続方程式の良い有限差分
次の方程式の優れた差分離散化は何でしょうか: ∂ρ∂t+ ∇ ⋅ (ρ U ) = 0∂ρ∂t+∇⋅(ρu)=0\frac{\partial \rho}{\partial t} + \nabla \cdot \left(\rho u\right)=0? 1Dケースを使用できます。 ∂ρ∂t+ ddバツ(ρ U ) = 0∂ρ∂t+ddx(ρu)=0\frac{\partial \rho}{\partial t} + \frac{d}{dx}\left(\rho u\right)=0 何らかの理由で、私が見つけることができるすべてのスキームは、ラグランジアン座標での定式化です。とりあえずこのスキームを思いつきました(jインデックスは無視してください): ρn + 1私、j- ρn私、jτ+ 1hバツ(ρn + 1i + 1 、j+ ρn + 1私、j2あなたはnバツI + 1 / 2で、J- ρn + 1私、j+ ρn …

10
ソートされた数値の配列の合計を計算するのに、どのアルゴリズムがより正確ですか?
与えられるのは、正数増加する有限シーケンスです。次の2つのアルゴリズムのうち、数値の合計の計算に適しているのはどれですか?z1、z2、。。。。。znz1、z2、。。。。。znz_{1} ,z_{2},.....z_{n} s=0; for \ i=1:n s=s + z_{i} ; end または: s=0; for \ i=1:n s=s + z_{n-i+1} ; end 私の意見では、エラーはますます小さくなるので、最大の番号から最小の番号に番号を追加し始める方が良いでしょう。また、非常に大きな数値を非常に小さな数値に加算すると、近似結果が大きな数値になる可能性があることもわかっています。 これは正しいです?他に何が言えますか?


5
コンピュータプログラミングの学部課程を教えるとき、どの言語を使用すればよいですか?
学部レベルの学生に「コンピュータープログラミング入門」というタイトルのコースを教えるつもりです。私は少し混乱しています。計算物理学では、科学者はC / C ++またはPythonまたはFortran、CUDAなどを使用します。何を使うべきですか?私はあなたがあなたの生活の中でいつでも新しいプログラミング言語を学ぶことができることを知っていますが、私はそれらをすべての基本的なプログラミング概念とOOP概念を後で詳しく説明するために賢明な選択です。

6
OpenCLの将来?
OpenCLプログラミングパラダイムは、異種コンピューティング向けのロイヤリティフリーのオープン標準になることを約束します。OpenCLに基づいたソフトウェアの開発に時間を投資すべきですか?長所短所?

2
2D関数を適応的にサンプリングするための簡単な方法は何ですか?
値をサンプリングしたい2次元関数あります。この関数は計算が非常に高価であり、複雑な形状を持っているため、最小数のサンプルポイントを使用して、その形状に関する最も多くの情報を取得する方法を見つける必要があります。f(x,y)f(x,y)f(x,y) これを行うにはどのような良い方法がありますか? 私が今まで持っているもの 関数値をすでに計算している既存のポイントのセットから開始します(これは、ポイントの正方格子などです)。 次に、これらのポイントのドロネー三角形分割を計算します。 ドローネ三角形分割において2つの隣接点が十分に(ある場合)と十分にそれらの関数値が異なる(> Δ F)、私はそれら挟ん新しい点を途中で挿入します。隣接する各ポイントペアに対してこれを行います。> Δ X>△バツ > \Delta X> Δ F>△f> \Delta f この方法の何が問題になっていますか? まあ、それは比較的うまく機能しますが、これと似た機能では、サンプルポイントがリッジを「飛び越える」傾向があり、そこに気づかないこともあるため、理想的ではありません。 次のような結果が生成されます(初期ポイントグリッドの解像度が十分に粗い場合)。 上記のプロットは、関数値が計算されるポイント(実際にはそれらの周りのボロノイセル)を示しています。 上記のプロットは、同じ点から生成された線形補間を示し、それをMathematicaの組み込みのサンプリング方法と比較します(ほぼ同じ開始解像度)。 それを改善するには? ここでの主な問題は、私の方法が勾配に基づいてリファインメントポイントを追加するかどうかを決定することだと思います。 改良点を追加するときは、曲率または少なくとも2次導関数を考慮することをお勧めします。 質問 ポイントの位置がまったく制約されていない場合に、2次導関数または曲率を考慮するための非常に簡単な実装方法は何ですか?(開始点の正方格子は必ずしも必要ではありません。これは理想的には一般的なものでなければなりません。) または、最適化された方法で絞り込み点の位置を計算する他の簡単な方法はありますか? これをMathematicaで実装しますが、この質問は主にメソッドに関するものです。「実装しやすい」ビットについては、私がMathematicaを使用していると見なされます(つまり、これはDelaunayの三角形分割を行うためのパッケージがあるため、これまでは簡単でした) 私はこれをどのような実用的な問題に適用していますか 相図を計算しています。複雑な形をしています。ある地域ではその値は0であり、別の地域では0と1の間です。2つの地域間で急激なジャンプがあります(不連続です)。関数がゼロより大きい領域では、滑らかな変動といくつかの不連続性の両方があります。 関数値はモンテカルロシミュレーションに基づいて計算されるため、不正確な関数値またはノイズが予期される場合があります(これは非常にまれですが、多数のポイントでは定常状態に到達しない場合などに発生しますいくつかのランダムな要因) すでにMathematica.SEでこれを尋ねましたが、まだプライベートベータ版であるため、リンクできません。ここでの質問は、実装ではなくメソッドに関するものです。 @sukiへの返信 これは、あなたが提案する分割のタイプ、つまり、三角形の中央に新しいポイントを置くことですか? ここでの私の懸念は、領域のエッジで特別な処理が必要なように見えることです。そうしないと、上記のように非常に長くて非常に細い三角形が得られます。これを修正しましたか? 更新 私が説明する方法と、三角形に基づいて細分割を行い、三角形内に細分割ポイントを配置するという@sukiの提案の両方に現れる問題は、不連続がある場合(私の問題のように)、ステップの後にドローネ三角形分割を再計算することです3つの頂点で異なる関数値を持つ三角形が変更され、おそらくいくつかの大きな三角形が表示されます。 以下に2つの例を示します。 最初の例は、真っ直ぐな不連続の周りでサンプリングしたときの最終結果を示しています。2番目は、同様のケースのサンプリングポイント分布を示しています。 これを回避する簡単な方法は何ですか?現在、私は単純に再三角形分割後に消えるそれらのエーグを細分化していますが、これはハックのように感じ、対称メッシュ(正方形グリッドなど)の場合にはいくつかの有効なDelaunay三角形分割があるため、エッジが変更される可能性があるため、注意して行う必要があります再三角測量後、ランダムに。

1
多次元データを補間するための好ましい効率的なアプローチは何ですか?
多次元データを補間するための好ましい効率的なアプローチは何ですか? 私が心配していること: 構築のためのパフォーマンスとメモリ、シングル/バッチ評価 1から6の寸法を処理する 線形または高次 勾配を取得する機能(線形でない場合) 通常のグリッドと散布グリッド 補間関数として使用、たとえば根を見つけたり最小化する 外挿機能 これの効率的なオープンソース実装はありますか? 私はscipy.interpolateとscikit-learnからのクリギングで部分的な運がありました。 スプライン、チェビシェフ多項式などは試しませんでした。 これは、このトピックでこれまでに見つけたものです。 長方形グリッド上のPython 4D線形補間 x、y、zの異なる間隔で定期的にサンプリングされた3Dデータの高速補間 通常のグリッドデータの高速補間 多変量散乱補間のどの方法が実用に最適ですか?

8
科学計算における最新のC ++ですか?
科学計算でのC ++の最新の機能(移動セマンティクス、STL、反復子、遅延評価など)の使用に特に対処する書籍、記事、またはブログ投稿、または一般に公開されている資料を探しています。何か提案できますか? これらの新機能により効率的なコードを記述しやすくなると思いますが、実際の例は見当たりません。私が読んだほとんどの参考文献は、C ++の一般的な使用に関するものであり、科学計算の例は含まれていません。そこで、C ++の最新機能を使用した科学計算コードの例(たとえば、数値レシピのレベルで、量産コードの例でなく、単に教育的な例である必要があります)を探しています。 これらの機能を使用するライブラリについては質問していないことに注意してください。科学計算でこれらの機能をどのように活用できるかを説明する記事/本/などについて尋ねています。

3
インテルFortranコンパイラー:コンパイル時の最適化のヒント
私の研究室での個人的な経験から始めます。ifort 9と10日に戻って、-O3とプロセッサ固有のフラグ(たとえば、-xW -xSSE4.2)を使用してコンパイルする最適化に非常に積極的でした。しかし、ifort 11から始めて、次のことに気付き始めました 。1.結果にいくつかの矛盾があります(セマンティクスが保持されなかったため) 2. -O2に比べて小さいゲイン。 そのため、現在は、通常-O2と-xhostを使用してコンパイルするだけです。ifort 11でより良い提案がありますか?ifort 12に移行すると、これは再び変わりますか?前もって感謝します。

1
Python / Numpy配列操作のパフォーマンスは、配列の次元の増加に伴ってどのようにスケーリングしますか?
Python / Numpy配列は配列の次元の増加に伴ってどのようにスケーリングしますか? これは、この質問に対するPythonコードのベンチマークテスト中に気づいたいくつかの動作に基づいています:numpyスライスを使用してこの複雑な式を表現する方法 この問題のほとんどは、配列を作成するためのインデックス付けに関係していました。Pythonループ上で(あまり良くない)CythonとNumpyバージョンを使用する利点は、関係する配列のサイズによって異なることがわかりました。NumpyとCythonの両方は、ある時点まで(Cythonの場合は、Numpyの場合はN = 2000程度)のパフォーマンス上の利点が増加し、その後利点は低下しました(Cython機能は最速のままでした)。N= 500N=500N=500N= 2000N=2000N=2000 このハードウェアは定義されていますか?大規模な配列で作業するという点で、パフォーマンスが高く評価されているコードについて従うべきベストプラクティスは何ですか? この質問(なぜMatrix-Vector Multiplication Scalingではないのですか?)は関連している可能性がありますが、Pythonで配列を処理するさまざまな方法が相互にどのようにスケーリングするかについてもっと知りたいと思っています。

4
(適応?)関数プロットのアルゴリズム
私は、特異性を持っているかもしれないし、持っていないかもしれない関数のために標準的な2Dグラフを描くアルゴリズムを探しています。目的は「Mini-CAS」を作成することです。そのため、ユーザーがグラフ化する機能のタイプについての先験的な知識はありません。 この問題は非常に古いので、文献には標準的なアルゴリズムがいくつかあるはずです。かつては、Googleを介して参照を見つけることにあまり成功していませんでした。 1つの興味深いアルゴリズム、つまり「Adaptive function plotting」という名前の「YACAS-アルゴリズムの本」からのアルゴリズムを見つけました 。 要するに: 標準のアルゴリズムはありますか? 既知のプロット困難な関数のテストスイートはありますか? 読むべき興味深い論文は何ですか?

2
スパース線形システムを解くためのライブラリ
スパース線形連立方程式を解くさまざまなライブラリがありますが、その違いを理解するのは難しいと感じています。 私が知る限り、3つの主要なパッケージがあります: Trilinos、PETSc、およびIntel MKLです。それらはすべてスパース行列を解くことができ、すべて高速です(私が知る限り、それらのいずれについても堅実なベンチマークを見つけることができませんでした)。それらはすべて並列化可能です。私が見つけることができないのは違いです。 それでは、そこにあるさまざまなスパース線形システムソルバーの違いは何ですか?

5
不均一にサンプリングされた関数を数値的に区別するにはどうすればよいですか?
標準の有限差分式を使用して、等間隔の関数値があるという期待の下で導関数を数値的に計算できるため、は定数です。不等間隔のポイントがある場合、隣接ポイントのペアごとに変化するようになった場合はどうなりますか?もちろん、として一次導関数を計算できますが、高次の数値微分公式はありますグリッドサイズの変動に適応できる精度H ≡ X K + 1 - X k個の時間F '(X )≈ 1f(xk)f(xk)f(x_k)H ≡ Xk + 1− xkh≡xk+1−xkh \equiv x_{k+1} - x_khhhf′(X )≈ 1hk[ f(xk + 1)− f(xk)]f′(x)≈1hk[f(xk+1)−f(xk)]f'(x) \approx \frac{1}{h_k}[f(x_{k+1}) - f(x_k)]

8
制約付き最適化のためのソフトウェアパッケージ?
いくつかの変数(具体的にはボックス化された制約)の境界がわかっている制約付き最適化問題を解決しようとしています。 arg分あなたはf(u 、x )arg⁡minuf(u,x) \arg \min_u f(u,x) の対象 A ≤ D (U 、X )≤ Bc (u 、x )= 0c(u,x)=0 c(u,x) = 0 ≤ D(U 、X )≤ Ba≤d(u,x)≤b a \le d(u,x) \le b ここで、あなたはuuは設計変数のベクトル、バツxxは状態変数のベクトル、c (u 、x )c(u,x)c(u,x)は等式制約(通常はPDE)です。下限および上限の制約aaaおよびbbbは、空間的に可変です。 この形式のシステムを処理できるパッケージはどれですか?

3
対角線と固定対称線形システムは、事前計算後の2次時間で解くことができますか?
ある解決する方法、フォームのシステム線形(D_I + A)X_I = b_i Aが固定SPD行列でありD_Iは正の対角行列でありますか?O(n3+n2k)O(n3+n2k)O(n^3+n^2 k)kkk A D i(Di+A)xi=bi(Di+A)xi=bi(D_i + A) x_i = b_iAAADiDiD_i たとえば、各DiDiD_iがスカラーの場合、AのSVDを計算するだけで十分AAAです。ただし、これは、可換性の欠如により、一般DDDについて分類されます。 更新:これまでの答えは「いいえ」です。誰が理由について興味深い直感を持っていますか?回答がないということは、2人の非通勤オペレーター間で情報を圧縮する非自明な方法がないことを意味します。驚くほど驚くことではありませんが、それをよりよく理解することは素晴らしいことです。

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