計算科学

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

5
数百万のデータポイントに対する最近傍計算の繰り返しが遅すぎる
3Dで数百万のデータポイントに走るデータセットがあります。私が行っている計算では、半径内の各データポイントの近傍(範囲検索)を計算し、関数をフィットさせ、フィットの誤差を計算し、次のデータポイントに対してこれを繰り返す必要があります。私のコードは正常に動作しますが、実行に非常に長い時間がかかり、データポイントごとに約1秒かかります!おそらく、各ポイントについて、データセット全体を検索する必要があるためです。プロセスを高速化する方法はありますか。どういうわけか、最初の隣人との間に何らかの隣接関係を確立できれば、これはそれほど遅くないという考えがあります。それが役立つ場合は、3Dで最適なParzenウィンドウ幅を見つけようとしています。

3
numpyスライスを使用してこの複雑な式を表現する方法
Pythonで次の式を実装したい: ここでとはサイズ、 numpy配列サイズ numpy配列です。サイズは最大で約10000で、関数は何度も評価される内部ループの一部であるため、速度が重要です。バツ私= ∑j = 1i − 1ki − j 、jai − jaj、バツ私=∑j=1私−1k私−j、ja私−jaj、 x_i = \sum_{j=1}^{i-1}k_{i-j,j}a_{i-j}a_j, バツバツxyyynnnkkkn × nn×nn\times nnnn 理想的には、forループを完全に回避したいのですが、もしそれがあれば世界の終わりではないと思います。問題は、ネストされたループをいくつか持たずにそれを行う方法を理解するのに問題があることです。 誰もが効率的で、できれば読みやすい方法でnumpyを使用して上記の式を表現する方法を見ることができますか?より一般的には、この種のものにアプローチする最良の方法は何ですか?
14 python  numpy 

3
直接的な方法を使用した場合の悪条件の症状は何ですか?
線形システムがあり、そのコンディショニングについて何も知らず、ソリューションに関する予備情報がないとします。盲目的にガウス消去法を適用し、解を取得します。マトリックスの予備的な分析を完全に行わずに、このソリューションが信頼できるかどうか(つまり、システムの条件が整っているかどうか)を判断することは可能ですか?ピボットの大きさは信頼できる情報を提供しますか?バツバツx そして一般的に、「オンザフライ」で悪条件を検出するための主なガイドラインは何ですか?

1
低ランクの変更はKrylovメソッドの収束にどのように影響しますか?
線形システムがあり、すべてのbに対して適切なクリロフ法(CGやGMRESなど)を使用して迅速に収束するとします。場合Bが低いランクを有する行列であり、システム上の同じクリロフ法であろうまた、(理想的にはおおよそにのみ依存する反復の余分な数で迅速に収束)?Ax=bAx=bA x = bbbbBBB(A + B )x = b rrrr(A+B)x=b(A+B)x=b(A + B) x = brrr そのようなシステムの例は、十分に前処理された膜の弾性と曲げに加えて、高密度の外部製品構造を備えた前処理されていない気圧条件です。 あるため、質問は前提条件の有無にかかわらず同じであることに注意してください。P(A+B)Q=PAQ+PBQP(A+B)Q=PAQ+PBQP(A + B)Q = PAQ + PBQはP A Qのランク修正で。rrrPAQPAQPAQ

5
空間と時間の両方で並列処理を使用したPDE計算の例
初期境界値PDEの数値解法では、空間で並列処理を使用することが非常に一般的です。時間離散化で何らかの形式の並列処理を使用することはあまり一般的ではなく、通常、並列処理ははるかに制限されています。時間的並列性を示すコードと公開された作品の数が増えていることは承知していますが、空間的並列性を含むものはありません。 空間と時間の両方に並列性を含む実装の例はありますか?出版物と入手可能なコードの両方に興味があります。

4
読者が結果をそれらを生成するコードに明確に一致させることができるように、論文のコードを記述する最も役立つ方法は何でしょうか?
私は再現可能な論文を書いていますが、この論文にはPythonスクリプトによって生成される計算結果があります(同様のMATLABスクリプトはほぼ同じ結果を生成します)。読者が論文の計算とコードの計算を一致させることができれば、読者にとって論文の理解が容易になると思います。この作品は抽象的な形式主義を提案しており、論文の例はこの形式主義を読者(より多くはエンジニアになる)にとってより具体的なものにすることになっている。コードはおそらく、計算の実行方法の最も詳細な記録になるので、それを明確にすることで、レビュープロセス中に役立つ可能性があります。 コードと計算結果(図、方程式)の間の対応をより明確にする方法についての提案はありますか? たとえば、論文のさまざまなステップを実装するコード行については、方程式番号を引用できると考えていました(コードとLaTeXの間で相互参照できれば驚くでしょうが、それらに手でラベルを付けるのは問題ありません) 、さまざまな例や図に対応する関数を書くことができます。 def example_1(): # Insert code corresponding to first example pass def figure_1(): # Insert code that generates Figure 1 pass コードが大きく、エンジニアリングで使用されるさまざまな数学的手法が実際に同じである方法を説明しようとしていなかった場合、おそらくコードを明確にすることはそれほど気にしませんが、紙と小さなコードベース、この演習で価値があるかもしれないようです。

6
大きな行列の近似スペクトル
大きなスパース行列(数十万行)のスペクトル(すべての固有値)を計算したい。これはきつい。 近似値に落ち着きます。これを行う近似方法はありますか? この質問に対する一般的な回答を希望する一方で、次の特定の場合の回答にも満足します。私の行列は、大きなグラフの正規化ラプラシアンです。固有値は0から2の間であり、それらの多くは1前後にクラスター化されます。

4
有限差分法によって離散化された移流方程式の境界条件
有限差分法を使用してPDEを解くときに境界条件を選択する方法を説明するのに役立つリソースを見つけようとしています。 私が現在アクセスできるすべての本とメモは、同様のことを言っています: 境界が存在する場合の安定性を管理する一般規則は、入門テキストとしては複雑すぎます。彼らは洗練された数学的な機械を必要とします (A.イセル微分方程式の数値解析の最初のコース) たとえば、移流方程式に2段階のリープフロッグ法を実装しようとする場合: あなたはn + 1私= あなたn − 1私+ μ (uni + 1- Uni − 1)あなたは私n+1=あなたは私n−1+μ(あなたは私+1n−あなたは私−1n)u_i^{n+1} = u_i^{n-1} + \mu (u_{i+1}^n - u_{i-1}^n) MATLABを使用して M = 100; N = 100; mu = 0.5; c = [mu 0 -mu]; f = @(x)(exp(-100*(x-0.5).^2)); u = zeros (M, N); x = …

6
OOPで最新のFortranを使用するオープンソースの科学ライブラリはありますか?
私はここ数か月、特定のPDEシステムを解決するためのFortranプログラムのコーディングに費やしました(流体の流れ/燃焼について説明しています)。私は、最新のFortranと、最新のFortranに備わっている新しいOOP機能を使用しようとしました。私は自分で作業していて、質問をするためのFortranの第一人者がいないので、私にとって学習するための自然な方法は、最新のFortranを使用する他のライブラリ/ソルバーを調べることです。 残念ながら、そこにあるすべてのFortranライブラリは、かなり古いFortran、Fortran90トップで書かれているようです。したがって、クラスの設計と相互作用を自分で考えなければなりませんでした。そして、特にパフォーマンスの観点から見た場合、私はそれを正しくやったとはまったく言えません。しかし、おそらく私は何かを見逃しており、FortranとOOPを使用している場合、現代の科学的なパッケージがありますか? 多くの優れたC ++ライブラリ(OpenFOAM、deal.IIなど)やPythonライブラリから学ぶことができます。これらの言語には、一般に大きなコミュニティもあります。例を使って学習したい場合、Fortranを削除して言語を切り替える方が良いでしょうか?
14 fortran 

4
模倣有限差分法の実例
インターネットで簡潔な説明を見つけようとする限り、模倣の有限差分の概念や、標準の有限差分との関係を把握することはできません。古典的な線形PDE(双曲線、楕円、および放物線)に対してそれらがどのように実装されるかの簡単な例を見ると、本当に役立ちます。

1
Remezアルゴリズム
Remezアルゴリズムは、ミニマックスノルムの多項式で関数を近似するよく知られた反復ルーチンです。しかし、Nick Trefethen [1]がそれについて言っているように: これらの[実装]のほとんどは何年も前に遡り、実際、それらのほとんどは上記の一般的な最良近似問題を解決するのではなく、離散変数またはデジタルフィルタリングを含むバリアントを解決します。流通している他のいくつかのコンピュータープログラムを見つけることができますが、全体として、現時点では最適な近似を計算するために広く使用されているプログラムはないようです。 たとえば、Matlabと[-1、1]のルンゲ関数に適用される無料のCVXツールボックスを使用して、最小二乗または凸最適化を適用することによって、ミニマックスソリューションを計算することもできます。 m = 101; n = 11; % 101 points, polynomial of degree 10 xi = linspace(-1, 1, m); % equidistant points in [-1, 1] ri = 1 ./ (1+(5*xi).^2); % Runge function tic % p is the polynomial of degree (n-1) cvx_begin % minimize the …

3
差分法で境界条件を課す方法
高次の中心差分近似を使用したいときに問題があります: (- Ui + 2 、j+ 16 ui + 1 、j− 30 ui 、j+ 16 ui − 1 、j- Ui − 2 、j12)(−あなたは私+2、j+16あなたは私+1、j−30あなたは私、j+16あなたは私−1、j−あなたは私−2、j12)\left(\frac{-u_{i+2,j}+16u_{i+1,j}-30u_{i,j}+16u_{i-1,j}-u_{i-2,j}}{12}\right) ポアソン方程式の (あなたx x+ あなたyy= 0 )(あなたはバツバツ+あなたはyy=0)(u_{xx}+u_{yy}=0)境界条件が次の正方形領域の場合: u(0,y)=u(x,0)=u(x,1)=0,u(1,y)=sinπyu(0,y)=u(x,0)=u(x,1)=0,u(1,y)=罪⁡πyu(0,y)=u(x,0)=u(x,1)=0,u(1,y)=\sin \pi y Δx=Δy=0.1Δx=Δy=0.1\Delta{x}=\Delta{y}=0.1 ドメインの内側のポイントの値を取得する場合、この近似を考慮して、いくつかのポイントは境界の外側のポイントに依存します。たとえば、には、の値が境界の外側にある必要があります。この場合、誰でも助けてくれますか? u1,1u1,1u_{1,1}ui−2,j=u−1,0ui−2,j=u−1,0u_{i-2,j}=u_{-1,0}

2
PETScは密行列にどの程度役立ちますか?
私が見たところどこでも、PETScのチュートリアル/ドキュメントなどは、線形代数に有用であり、通常、スパースシステムが有益であることを指定しています。密行列はどうですか?密なAのを解くのが心配です。A x = bAバツ=bAx=bAAA FortranでCGとQMRのコードを独自に作成しました。基本的な構成は、疑似コードをリッピングし、可能な限りBLASルーチン(ddot、dnrmおよびdgemv)を少しの自己調整で追加することです。これはPETScと比較してどうですか? 最善の答えは自分で試してみることだと思いますが、時間やその他の理由により不可能です。 どんな助けも大歓迎です。

2
線形最適化のためのシンプレックス法に対する内点法の利点/欠点は何ですか?
私が理解しているように、線形プログラムの解は常に多面体実現可能セットの頂点で発生するため(解が存在し、最適化目的関数値が最小化問題を仮定して下から制限されている場合)、実行可能領域の内部はより良いですか?より速く収束しますか?どのような状況で、内点法よりもシンプレックス法を使用する方が有利でしょうか?1つは他のコードよりもコードに実装しやすいですか?

3
多くの次元のPDE
PDEの近似解を見つけるためのほとんどの方法は、次元の数に応じてスケーリングが不十分であり、モンテカルロは100次元以下を必要とする状況に使用されることを知っています。 〜4-10次元のPDEを効率的に数値的に解くための良い方法は何ですか?10-100? 次元の数に応じて適切にスケーリングするモンテカルロ以外の方法はありますか?

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