タグ付けされた質問 「algorithms」

特定の問題を明確な方法で解決するために必要な特定の手順の説明。抽象的な形式で表現されます。

2
(方法)より高速に実行されるシミュレーションを作成しますか?
私はすべての割り当てをCFDで行うためのプログラミング言語としてpythonを使い始めました。プログラミングの経験はほとんどありません。私は機械工学の経験があり、航空宇宙工学の高等教育を追求しています。 CFDの計算面は、方程式を操作したり、数学を実行したりするよりも面倒になります。 プログラムの実行を高速化する一般的なガイドラインは何ですか?物事を並行して行うコツは何ですか?より高速に実行されるコードを記述する方法は? 上記の質問に答えるリソース(私のような素人にとって理解しやすい)はどこで入手できますか?

1
オープンソースの逆ベースのマルチレベルILU実装はありますか?
マルチレベル逆ベースのILUプレコンディショナーのシリアルパフォーマンス、特に異種Helmholtzのシリアルパフォーマンスには非常に感銘を受けましたが、オープンソースの実装が見つからないことに驚きました。特に、ILUPACKはバイナリを学者が自由に利用できるようにしますが、ソースコードをリリースしているようには見えません。 誰も実装をオープンソース化していないというのは本当ですか?

1
Adams-BashforthアルゴリズムよりもAdams-Moultonを使用する相対的な利点は何ですか?
私は、2つの空間次元と時間で2つの結合PDEのシステムを計算的に解いています。関数の評価には費用がかかるため、マルチステップメソッド(Runge-Kutta 4-5を使用して初期化)を使用したいと思います。 5つの以前の関数評価を使用するAdams-Bashforthメソッドは、グローバルエラー(これは、以下で参照するWikipedia記事場合です)で、ステップごとに1つの関数評価(PDEごと)が必要です。O (h5)O(h5)O(h^5)s = 5s=5s=5 一方、Adams-Moulton法では、ステップごとに2つの関数評価が必要です。1つは予測ステップ用で、もう1つは修正ステップ用です。繰り返しますが、5つの関数評価が使用される場合、グローバルエラーはです。(ウィキペディアの記事では)O (h5)O(h5)O(h^5)s = 4s=4s=4 では、Adams-BashforthよりAdams-Moultonを使用する理由は何ですか?関数の評価回数が2倍になると、同じ次数のエラーが発生します。直観的には、予測子修正子メソッドが好ましいはずですが、誰かがこれを定量的に説明できますか? 参照:http : //en.wikipedia.org/wiki/Linear_multistep_method#Adams.E2.80.93Bashforth_methods

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

5
クラスを使用して数値アルゴリズムをカプセル化することに固有の利点と欠点は何ですか?
科学計算で使用される多くのアルゴリズムは、ソフトウェア工学のあまり数学集約型ではないと一般的に考えられているアルゴリズムとは異なる固有の構造を持っています。特に、個々の数学アルゴリズムは非常に複雑になる傾向があり、多くの場合、数百行または数千行のコードが含まれますが、状態は含まれません(つまり、複雑なデータ構造に作用しません)。インターフェイス-配列(または2つ)に作用する単一の関数へ。 このことは、クラスではなく、関数が科学計算で遭遇するほとんどのアルゴリズムへの自然なインターフェースであることを示唆しています。しかし、この議論は、複雑なマルチパートアルゴリズムの実装がどのように処理されるべきかについてほとんど洞察を提供しません。 従来のアプローチは、他の多くの関数を呼び出す1つの関数を使用して、関連する引数を途中で渡すだけでしたが、OOPはアルゴリズムをクラスとしてカプセル化できる別のアプローチを提供します。明確にするために、アルゴリズムをクラスにカプセル化するということは、アルゴリズム入力がクラスコンストラクターに入力され、パブリックメソッドが呼び出されて実際にアルゴリズムを呼び出すクラスを作成することを意味します。このようなC ++ psuedocodeでのマルチグリッドの実装は次のようになります。 class multigrid { private: x_, b_ [grid structure] restrict(...) interpolate(...) relax(...) public: multigrid(x,b) : x_(x), b_(b) { } run() } multigrid::run() { [call restrict, interpolate, relax, etc.] } 私の質問は次のとおりです。クラスを使用しない従来のアプローチと比較して、この種のプラクティスの利点と欠点は何ですか?拡張性や保守性の問題はありますか?明確にするために、私は意見を求めるつもりはありませんが、そのようなコーディング手法を採用することのダウンストリーム効果(つまり、コードベースが非常に大きくなるまで生じない効果)をよりよく理解するつもりです。
13 algorithms 

2
ベクトル間の角度を計算する数値的に安定した方法
2つのベクトル間の角度に古典的な公式を適用する場合: α=arccosv1⋅v2∥v1∥∥v2∥α=arccos⁡v1⋅v2‖v1‖‖v2‖\alpha = \arccos \frac{\mathbf{v_1} \cdot \mathbf{v_2}}{\|\mathbf{v_1}\| \|\mathbf{v_2}\|} 非常に小さい/鋭角の場合、精度が失われ、結果が正確ではないことがわかります。このStack Overflow answerで説明されているように、1つの解決策は代わりにアークタンジェントを使用することです。 α=arctan2(∥v1×v2∥,v1⋅v2)α=arctan⁡2(‖v1×v2‖,v1⋅v2)\alpha = \arctan2 \left(\|\mathbf{v_1} \times \mathbf{v_2}\|, \mathbf{v_1} \cdot \mathbf{v_2} \right) そして、これは実際により良い結果をもたらします。しかし、これがに非常に近い角度で悪い結果を与えるのではないかと思います。そうですか?もしそうなら、ブランチ内の公差をチェックせずに角度を正確に計算する式はありますか?π/2π/2\pi / 2if

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

1
3DでのDelaunayテッセレーションから派生したグラフの列挙
3Dの点のいくつかのDelaunayテッセレーションに対応するグラフを列挙するアルゴリズムはありますか? ある場合、「Delaunay graph」に対応するジオメトリの効率的なパラメーター化はありますか? 結合などの先験的な知識がなくても、指定された組成の分子のすべての安定したジオメトリを体系的に列挙したいと考えています。 編集:をN個の頂点を持つグラフのセットとします。LET D :R 3 N → G NはマップであるN個の点R 3GNGNG_NNNND:R3N→GND:R3N→GND: \mathbb{R}^{3N} \to G_NNNNR3R3\mathbb{R}^3次元における前記点のドロネーテッセレーションに対応するグラフです。 D (R 3 N)を列挙する方法D(R3N)D(R3N)D(\mathbb{R}^{3N})(効率的に)ですか? さらに、Aグラフ所与、どのようにパラメータ化することができD - 1(グラム)g∈Gng∈Gng\in G_nD−1(g)D−1(g)D^{-1}(g)(効率的に)? 編集:2Dの例:4ポイントの場合、2つのドロネーグラフがあります。 1−╲2|4−╱3 and 1|3−×−2|41−2−3╲|╱4 and 1−2|×|3−4 \begin{matrix} 1 & - & 2 & - & 3 \\ &\diagdown &| & \diagup\\ &&4 \end{matrix}\mbox{ and } \begin{matrix} …

1
積分変換を反転するための数値的方法?
私は次の積分変換を数値的に反転しようとしています: F(y)= ∫∞0yexp[ − 12(y2+ x2)] I0(x y) f(x )d xF(y)=∫0∞yexp⁡[−12(y2+x2)]I0(xy)f(x)dxF(y) = \int_{0}^{\infty} y\exp{\left[-\frac{1}{2}(y^2 + x^2)\right]} I_0\left(xy\right)f(x)\;\mathrm{d}x したがって、与えられたに対して、f (x )を近似する必要が あります。F(y)F(y)F(y)f(x )f(x)f(x) および F (y )は実数かつ正f(x )f(x)f(x)F(y)F(y)F(y)(連続確率分布) は実数で正ですx 、yx,yx,y(大きさです) 私はこれをすぐに行うための非常に厄介で総当たり的な方法を持っています: と一連のポイント上のスプラインを定義します。スプライン化されたポイントの値はランダムサンプリングによって「推測」され、予測されたF (y )が生成されます。私が書いた基本的な遺伝的アルゴリズムは、予測されたF (y )配列と測定されたF (y )配列の差を最小化します。次に、アルゴリズムが収束するf (x )を反転の答えとします。f(x )f(x)f(x)F(y)F(y)F(y)F(y)F(y)F(y)f(x )f(x)f(x) このアプローチは、いくつかの単純なケースではかなりうまく機能しますが、私には面倒で、特に堅牢ではありません。 誰もこの問題を解決するより良い方法についてのガイダンスをくれますか? お時間をいただきありがとうございます! [コンピューターサイエンスに投稿]

2
コレスキー因子の計算
したがって、コレスキー分解の定理は、任意の実対称正定行列がコレスキー分解持っていると述べています。ここで、は下三角行列です。M = L L ⊤ LMMMM= L L⊤M=LL⊤M= LL^\topLLL 与えられた場合、コレスキー因子を計算する高速アルゴリズムがあることはすでにわかっています。LMMMLLL ここで、長方形の行列が与えられ、が正定であることを知っていたとします。明示的に計算してからコレスキー分解アルゴリズムを適用せずに、のコレスキー因子を計算する方法はありますか?A A ⊤ A L A ⊤ A A ⊤ Am×nm×nm\times nAAAA⊤AA⊤AA^\top ALLLA⊤AA⊤AA^\top AA⊤AA⊤AA^\top A が実行する非常に大きな長方形行列である場合、は明らかに非常に高価であるため、問題になります。A ⊤ AAAAA⊤AA⊤AA^\top A

3
C ++の並列動的グラフライブラリを探しています。
こんにちは、scicompコミュニティ、 NetworkX(Python)、JUNG、YFiles(Java)などのフレームワークを使用して、グラフアルゴリズムの分野で働いてきました。現在、並列コンピューティングと高性能コンピューティングの分野に参入しています。新しいプロジェクトでは、次の機能を備えたC ++グラフライブラリを探しています。 アルゴリズム開発を可能にする直感的なインターフェースを備えています 動的な操作をサポートします。たとえば、任意のノード/エッジの挿入と削除 並列化をサポートします。たとえば、マルチスレッドで発生する問題からプログラマを保護します メモリオーバーヘッドが低く、高性能コンピューティングに適しています いくつかのライブラリを提案し、これらの基準と賛否両論について議論してください。

3
2つの粒子積分<ij | kl>に効率的なインデックス関数を実装する方法は?
これは単純な対称列挙問題です。ここで完全な背景を説明しますが、量子化学の知識は必要ありません。 2つの粒子の積分は次のとおりです。 そして、次の4つの対称性があります。 積分を計算して、次のようにインデックス付けされた1D配列に格納する関数があります。⟨ij|kl⟩⟨ij|kl⟩\langle ij|kl\rangle⟨ij|kl⟩=∫ψ∗i(x)ψ∗j(x′)ψk(x)ψl(x′)|x−x′|d3xd3x′⟨ij|kl⟩=∫ψi∗(x)ψj∗(x′)ψk(x)ψl(x′)|x−x′|d3xd3x′ \langle ij|kl\rangle = \int {\psi_i^*({\bf x})\psi_j^*({\bf x}')\psi_k({\bf x})\psi_l({\bf x}') \over | {\bf x} - {\bf x}' |}\, d^3 x \,d^3 x' ⟨ij|kl⟩=⟨ji|lk⟩=⟨kl|ij⟩=⟨lk|ji⟩⟨ij|kl⟩=⟨ji|lk⟩=⟨kl|ij⟩=⟨lk|ji⟩\langle ij|kl\rangle = \langle ji|lk\rangle = \langle kl|ij\rangle = \langle lk|ji\rangleint2 int2(ijkl2intindex2(i, j, k, l)) ijkl2intindex2上記の対称性を考慮して、関数は一意のインデックスを返します。唯一の要件は、i、j、k、lのすべての組み合わせ(それぞれ1からnまで)をループする場合、int2配列を連続して埋め、上記に関連するすべてのijklの組み合わせに同じインデックスを割り当てることです4つの対称性。 Fortranでの私の現在の実装はこちらです。とても遅いです。誰もこれを効果的に行う方法を知っていますか?(任意の言語で。) ヒント:軌道が実数である場合、上記の対称性に加えて、およびを交換できるため、合計8つの対称性が得られます: そして、インデックス付けのための非常に高速な関数を実装できます。こちらの実装を参照してください。軌道が実数でない場合の効率的な索引付けスキームを見つけたいと思います。ψi(x)ψi(x)\psi_i({\bf x})i↔ki↔ki\leftrightarrow kj↔lj↔lj\leftrightarrow l⟨ij|kl⟩=⟨ji|lk⟩=⟨kj|il⟩=⟨il|kj⟩=⟨ij|kl⟩=⟨ji|lk⟩=⟨kj|il⟩=⟨il|kj⟩=\langle ij|kl\rangle = …

2
mpi_allgather操作の計算コストは​​、ギャザー/スキャッター操作と比較してどうですか?
単一のmpi_allgather操作または1つのmpi_scatterと1つのmpi_gather操作を使用して並列化できる問題に取り組んでいます。これらの操作はwhileループ内で呼び出されるため、何度も呼び出される場合があります。 MPI_allgatherスキームを使用した実装では、重複する行列を解決するために、分散ベクトルをすべてのプロセスに収集しています。もう1つの実装では、分散ベクトルを単一のプロセッサ(ルートノード)に収集し、このプロセッサで線形システムを解き、ソリューションベクトルをすべてのプロセスに分散させます。 収集操作のコストが、分散操作と収集操作を合わせたものよりもかなり大きいかどうか知りたいです。メッセージの長さは、その複雑さにおいて重要な役割を果たしていますか?mpiの実装によって異なりますか? 編集:

3
三重対角行列の固有システムの並列アルゴリズム
大きなスパースマトリックス(〜200万要素)のランチョス対角化を行っています。Lanzcosアルゴリズムのほとんどすべての手順は、収束を確認するためにLanczos行列を対角化することを除いて、GPU上で並行して実行されます。そのために、私はNumerical RecipesのTQLIアルゴリズムを使用しています。並列または簡単に並列化可能な三重対角行列の固有システムを見つける方法はありますか?TQLIの並列バージョンは存在しますか?

1
六面体セルの非構造化メッシュに関して点の雲を並べ替えます
質問 六面体セルの非構造化メッシュに関して、ポイントのクラウドをどのようにソートしますか? 各セルには、中心とそれを表す一意のラベルがあります。基本的に2つのクラウドポイント(元のポイントクラウド、およびセル中心のポイントクラウド)がありますが、セルジオメトリ情報(境界ボックス)が役に立つかもしれません。 結果 私はいくつかの質問をし、文献を検索しました: メッシュが六面体で構造化されていない場合、問題は直交範囲検索に限定されます。この目的のために、kdツリーが最もよく使用されます。メッシュが八分木データ構造に基づいて洗練されている場合、範囲検索アルゴリズムを構築できます。目標は、直接的なメッシュジオメトリの処理を避け、点群A-点群の関係Bに集中することです。点群A:クエリポイント、点群B:メッシュセル中心。

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