タグ付けされた質問 「linear-solver」

線形連立方程式を解く方法を参照します。

17
Python用の高品質な非線形プログラミングソルバーはありますか?
解決すべきいくつかの挑戦的な非凸のグローバル最適化問題があります。現在、MATLABのOptimization Toolbox(特にfmincon()algorithm ='sqp'を使用)を使用していますが、これは非常に効果的です。ただし、私のコードのほとんどはPythonで作成されているため、Pythonでも最適化を行いたいと考えています。競合できるPythonバインディングを備えたNLPソルバーはありfmincon()ますか?ちがいない 非線形等式および不等式の制約を処理できる ユーザーがヤコビアンを提供する必要はありません。 グローバルな最適化を保証していなくても構いません(保証fmincon()しません)。私は、困難な問題や、それよりもわずかに遅い場合でも、ローカル最適にロバストに収束するものを探していfmincon()ます。 OpenOptで利用できるソルバーをいくつか試しましたが、MATLABのソルバーより劣っていfmincon/sqpます。 強調するために、私はすでに扱いやすい定式化と優れたソルバーを持っています。私の目標は、ワークフローをより合理化するために、単に言語を変更することです。 Geoffは、問題のいくつかの特性が関連している可能性があると指摘しています。彼らです: 10-400の決定変数 4〜100の多項式等式制約(1〜8の範囲の多項式次数) 決定変数の数の約2倍に等しい合理的な不等式制約の数 目的関数は決定変数の1つです 不等式制約のヤコビアンと同様に、等式制約のヤコビアンは密です。

4
スパース線形システムソルバーを選択する場合、どのガイドラインに従う必要がありますか?
スパース線形システムは、アプリケーションの頻度が高くなるにつれて現れます。これらのシステムを解決するために選択する多くのルーチンがあります。最高レベルでは、直接法(特殊な順序付けアルゴリズムを使用したスパースガウス消去法またはコレスキー分解法、マルチフロント法など)と反復法(GMRES、(双)共役勾配法)の間に分岐点があります。 直接法を使用するか反復法を使用するかをどのように決定しますか?その選択をした後、特定のアルゴリズムをどのように選ぶのでしょうか?対称性の活用についてはすでに知っています(たとえば、スパース対称正定値システムに共役勾配を使用します)が、メソッドを選択する際に考慮すべきこのような他の考慮事項はありますか?

3
線形方程式を解く方法を選択する方法
私の知る限り、線形方程式系を解くには4つの方法があります(さらにある場合は修正してください): システム行列がフルランク正方行列の場合、Cramerの規則を使用できます。 システム行列の逆または擬似逆を計算します。 マトリックス分解法を使用します(ガウスまたはガウスヨルダン消去法はLU分解と見なされます)。 共役勾配法などの反復法を使用します。 実際、特に高次元行列の場合、Cramerのルールを使用するか、逆行列または擬似逆行列を計算して方程式を解くことはほとんどありません。したがって、最初の質問は、それぞれ分解法と反復法を使用する場合です。システムマトリックスのサイズとプロパティに依存すると思います。 2番目の質問は、数値の安定性と効率の観点から、特定のシステムマトリックスに最適な分解法または反復法の種類を知っていることです。 たとえば、共役勾配法は、行列が対称かつ正定値の方程式を解くために使用されますが、をA T A x = A T bに変換することにより、任意の線形方程式に適用することもできます。正定行列の場合も、コレスキー分解法を使用して解を求めることができます。しかし、CGメソッドを選択するタイミングと、コレスキー分解を選択するタイミングはわかりません。私の感覚では、大きな行列にはCG法を使用した方が良いと思います。A x = bAバツ=b\mathbf{A}x=bATA x= ATbATAバツ=ATb\mathbf{A}^{\rm T}\mathbf{A}x=\mathbf{A}^{\rm T}b 長方形行列の場合、QR分解またはSVDのいずれかを使用できますが、ここでもいずれかを選択する方法がわかりません。 他のマトリックスについては、エルミート/対称マトリックス、スパースマトリックス、バンドマトリックスなど、適切なソルバーを選択する方法は今ではありません。

3
解く
行列とます。はスパースで、で非常に大きい(数百万程度)は高さの行列で、はかなり小さく()、各列はように、残りがである単一のエントリのみがあります。は巨大なので、反転するのは本当に、などのクリロフ部分空間法を使用して、などの線形システムを繰り返し解くことができますが、AAAGGGAAAn×nn×nn\times nnnnGGGn×mn×mn\times mmmm1<m<10001<m<10001 \lt m \lt 1000111000GTG=IGTG=IG^TG = IAAAAx=bAx=bAx = bBiCGStab(l)BiCGStab(l)\mathrm{BiCGStab}(l)A−1A−1A^{-1} explicitly. I want to solve a system of the form: (GTA−1G)x=b(GTA−1G)x=b(G^TA^{-1}G)x = b, where xxx and bbb are mmm length vectors. One way to do it is to use an iterative algorithm within an iterative algorithm to solve for ...

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

3
共役勾配がGMRESよりもはるかにうまく機能する問題
共役勾配がGMRESメソッドよりもはるかに優れている場合に興味があります。 一般に、CGは多くのSPD(対称正定値)の場合に望ましい選択であり、必要なストレージが少なく、CGの収束率の理論的限界がそのGMRESの2倍であるためです。そのような率が実際に観察される問題はありますか?GMRESが同じ数のspmv(スパースマトリックスベクトル乗算)でCGより優れているか、CGに匹敵する場合の特性はありますか。

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

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

1
Krylov加速マルチグリッド(MGを前提条件として使用)はどのように動機付けられますか?
マルチグリッド(MG)は、線形システム解くために使用されてもよい初期推定構築することによって、X 0とするための次の繰り返しiは= 0 、.. 1収束するまで:A x = bAバツ=bAx=bバツ0バツ0x_0i = 0、1 ...私=0、1 ..i=0,1.. 残差r i = b − A x iを計算しますr私= b − A x私r私=b−Aバツ私r_i = b-Ax_i 近似を得るためにマルチグリッドサイクルを適用、ここで、A 、E 、I = R I。ΔのX私≈ E私△バツ私≈e私\Delta x_i \approx e_iA e私= r私Ae私=r私Ae_i = r_i アップデートは、バツi + 1← x私+ Δ X私バツ私+1←バツ私+△バツ私x_{i+1} \gets x_i + \Delta ...

3
Thomasアルゴリズムは、対称対角優勢なスパース三重対角線形システムを解くための最速の方法ですか
Thomasアルゴリズムが、アルゴリズムの複雑さの観点から対称対角線上にあるスパース三重対角システムを解決するための最速の方法(おそらく?)かどうか疑問に思っています(LAPACKなどの実装パッケージを探していません)。トーマスアルゴリズムとマルチグリッドの両方が複雑さであることは知っていますが、マルチグリッドの定数因子はそれよりも少ないのでしょうか?マルチグリッドの方が速いように思えませんが、私は前向きではありません。O(n )O(n)O(n) 注:マトリックスが非常に大きい場合を考えています。直接的な方法または反復的な方法のどちらでもかまいません。

3
単精度と倍精度の浮動小数点精度
単精度の浮動小数点数はメモリの半分を占有し、最新のマシン(GPUの場合でも)では、倍精度に比べてほぼ2倍の速度で操作を実行できます。私が見つけた多くのFDTDコードは、単精度の算術演算とストレージのみを使用しています。大規模なスパース方程式を解くために単精度を使用することが許容される場合の経験則はありますか?マトリックス条件数に大きく依存する必要があると思います。 さらに、必要に応じて倍精度を使用し、倍精度を必要としない単一精度を使用する効果的な手法はありますか。たとえば、行列ベクトル乗算またはベクトルドット積の場合、結果を倍精度変数に蓄積して(キャンセルエラーを回避する)ことをお勧めしますが、個々のエントリは互いに乗算する必要があります単精度を使用して乗算できます。 最新のFPUでは、単精度(浮動)から倍精度(倍)へ、またはその逆にシームレスに変換できますか?または、これらの費用のかかる操作ですか?

2
krylovメソッドを別のkrylovメソッドで事前調整する
gmresやbicgstabのようなメソッドでは、別のkrylovメソッドを前提条件として使用すると魅力的です。結局のところ、それらは、マトリックスを使用しない方法および並列環境で簡単に実装できます。たとえば、1つのcoulは、gmresまたはkrylovメソッドのその他の組み合わせの事前調整子として、事前調整されていないbigcstabのいくつかの(たとえば〜5回)反復を使用します。私は文学ではそのようなアプローチにあまり言及していないので、あまり効果的ではないからだと思う。なぜそれが効率的でないのかを理解したいと思います。それが良い選択である場合はありますか? 私の研究では、並列(mpi)環境での3D楕円問題の解決に興味があります。

2
LAPACKとBLASを使用して
既存のコードをMATLABからC ++に移植しており、を解決する線形システムを持っています(より一般的な形式A x = bではなく)xA=bxA=bxA=bAx=bAx=bAx=b 行列は高密度で一般的な形式ですが、1000x1000以下です。そのため、MATLABでは、解は関数またはスラッシュ表記法で見つかりますAAAmrdivide(b,A)x = b/A; BLASおよびLAPACKルーチンを使用して、C ++コードでこれを解決するにはどうすればよいですか? 私は、LAPACKルーチンに精通していDGESV解きするために、X。Ax=bAx=bAx=bxxx したがって、私が考えていたのは、行列の転置恒等式を使用していくつかの操作を行うことです。 (xA)T=bT(xA)T=bT(xA)^T=b^T ATxT=bTATxT=bTA^T x^T = b^T xT=(AT)−1bTxT=(AT)−1bTx^T = (A^T)^{-1} b^T 次にDGESV、転置操作を使用して最終形式を解きます。(Aを転置するコストとシステムを解決するコスト)ATATA^TAAA より効率的なアプローチや他の方法でより良いアプローチがありますか? BOOST uBLASライブラリからのBLAS実装だけでなく、LAPACKライ​​ブラリルーチンへのバインドと同様に、マトリックスクラスとベクトルクラスを使用しています。私はこのセットアップを他の操作に正常に使用してきましたが、これらのライブラリに限定されたソリューションを見つけたいと思っています。 また、コードのセットアップ中にこのタイプの操作を実行するのは数回だけなので、パフォーマンスは重要な問題ではありません。 たぶん、このMATLABのドキュメント上には、mrdivide他人のために有用です。

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

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

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