計算科学

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

3
FAS-マルチグリッドは線形欠陥修正よりも遅いですか?
線形欠陥修正(LDC)と完全近似スキーム(FAS)の両方を使用して、Vサイクルマルチグリッドソルバーを実装しました。 私の問題は次のとおりです。LDCを使用すると、残差が1サイクルあたり約0.03倍減少します。FAS実装も線形係数で収束しますが、係数は約0.58です。したがって、FASには約20倍のサイクル数が必要です。 ほとんどのコードは共有され、唯一の違いはダウン/アップの計算です。LDCは ダウン:あなたH:= 0 、bH:= 私Hh(bh− Lhあなたh)uH:=0,bH:=IhH(bh−Lhuh)u_H:=0,\quad b_H:=I_h^H(b_h-L_hu_h) up:あなたh:= uh+ 私hHあなたHuh:=uh+IHhuHu_h:=u_h+I_H^hu_H およびFASの用途 ダウン:あなたH:= 私Hhあなたh、bH:= 私Hhbh+ LH私Hhあなたh− 私はHhLhあなたhuH:=IhHuh,bH:=IhHbh+LHIhHuh−IhHLhuhu_H:=I_h^Hu_h,\quad b_H:=I_h^Hb_h+L_HI_h^Hu_h-I_h^HL_hu_h up:あなたh:= uh+ 私hH(uH− 私はHhあなたh)uh:=uh+IHh(uH−IhHuh)u_h:=u_h+I_H^h(u_H-I_h^Hu_h) 私のテスト設定は、Briggの「マルチグリッドチュートリアル、第2版」、p。64、分析ソリューションがあります u (x 、y)= (x2− x4)(y4− y2)u(x,y)=(x2−x4)(y4−y2)u(x,y)=(x^2-x^4)(y^4-y^2) \quadx 、y∈ [ 0 、1 ]2x,y∈[0,1]2x,y\in [0,1]^2 L V = Δ U = : BLv=Δu=:bLv=\Delta u=:bLLLv=0v=0v=0 u(x,y)=0u(x,y)=0u(x,y)=0v=1v=1v=1 ダウン/アップコードのみが異なるため、LDCの結果は本に準拠しており、FASも少なくとも機能しているように見えるため、同じ線形設定でそれが非常に遅い理由がわかりません。 =0=0=010−1510−1510^{-15}10−110−110^{-1} 写真は言葉以上のものを言うので: …
9 multigrid 

1
対称性のない行列と比較して、対称行列を解くことには数値的な利点がありますか?
3つの連立方程式のシステムに差分法を適用しています。2つの方程式は結合されていませんが、3番目の方程式は他の2つの方程式に結合しています。方程式の順序をから(x 、z 、y )に変更することで、係数行列が対称になることに気付きました。(x 、 y、 z)(x,y,z)(x, y, z)(x 、 z、 Y)(x,z,y)(x, z, y) これを行う利点はありますか?たとえば、ソリューションの安定性または効率/速度の観点から。行列は非常にスパースであり、それが重要な場合、非ゼロ項は中央の対角線に沿っています。

4
Fortranの学習
Fortranでプログラミングする方法を学ぶための最良の方法は何だろうと思っていました。 私は本を​​探していましたが、私には問題ないと思われた例として、「Fortran 95/2003 Explained」や「Fortran For Scientists And Engineers」などがありました。 私はあなたたちがこれらについてどう思うか知りませんか? 私が疑問に思っているもう1つのことは、どのコンパイラを使用する必要があるかです。私はWindows 7マシン(64ビット)で作業しています。 皆さんが私にこれを手伝ってくれることを願っています! だから私のプログラミングの経験のために: Matlabとmapleは、プログラミングの世界への私の最初の紹介をやさしく思いました。Matlabは、私が実際にかなり良いプログラムであり、ループを操作するコツと、これらを組み合わせてより効果的なプログラムを作成する方法を得ました。Mapleはより基本的な段階にあります(私は単純な積分などの解を検索する方法を知っています)。 その1年後、Visual BasicでC ++を紹介しました。教授は実際にこれにすばやく取り掛かりましたが、2か月後、ポインターと継承についてはすでに議論していました。私はこの言語で簡単なプログラムを書くことができます。クラスでの作業だけが難しい問題ですが、それは練習の問題だと思います。 そしてその1年後、私はMathematica 8を学ぶ必要がありましたが、これも今日では本当に上手になっています。 だから私は少しプログラミングexpierinceを持っていますが、それが信じられないほどの量であるとは言いません! 私がFortranを学びたいのは、主にそれ自体では理論物理学を行うことができず、理論をテストする必要があり、そのためにそれらの理論を数値的にテストできるプログラムを作成できる必要があるためです。Fortranは、数値数学に関しては使用する言語を分類するものだと聞いたので、この言語を知ることは重宝すると思います。 PS:Fortran95とFortran 2003の違いは何ですか?
9 fortran 

3
希薄で非常に悪条件なシステムの解決
私はAx = bを解こうとしています。ここで、Aは複雑で、スパースで、非対称で、非常に悪条件(条件番号〜1E + 20)の正方形または長方形の行列です。LAPACKのZGELSSでシステムを正確に解くことができました。しかし、私のシステムの自由度が高くなると、スパース性が活用されないため、ZGELSSを使用してPCでシステムを解くのに長い時間がかかります。最近、同じシステムでSuperLU(Harwell-Boeingストレージを使用)を試しましたが、条件番号> 1E + 12で結果が不正確でした(これがピボットの数値的な問題かどうかはわかりません)。 すでに開発されたソルバーを使用する傾向があります。私が言及したシステムをすばやく(つまり、スパース性を活用して)確実に(条件数を考慮して)解決できる堅牢なソルバーはありますか?


2
与えられた間隔で関数のすべての根を見つける
与えられた間隔でスカラー関数のすべての根を見つける必要があります。関数に不連続がある可能性があります。アルゴリズムの精度はεにすることができます(たとえば、アルゴリズムがεよりも近い2つの異なるルートを検出しなくても問題ありません)。 そのようなアルゴリズムは存在しますか?それについての論文を私に教えてもらえますか? 実際には、ブレントのアルゴリズムを使用して特定の間隔でゼロを見つける関数と、特定の間隔で最小値を見つける関数があります。これらの2つの関数を使用して、独自のアルゴリズムを作成しましたが、より良いアルゴリズムが存在するかどうか疑問に思いました。私のアルゴリズムはそのようなものです: インターバル[a,b]と機能から始めますf。場合はsign(f(a+ε)) ≠ sign(f(b-ε))、私が間に少なくとも1つのゼロがあると知っているaとb、私は見つけますz = zero(]a,b[)。私のテストでは、もしz本当にの値を見ることによって、(それが不連続かもしれない)がゼロであるz-εとz+ε。ある場合は、見つかったゼロのリストに追加します。f(a+ε)とf(b-ε)両方が正の場合、私は検索しm = min(]a, b[)ます。f(m)それでも肯定的な場合は、とのm = max(]a,b[)間に不連続がある可能性があるため、検索をa行いbます。もしネガティブだったらf(a+ε)、私は反対のことをしますf(b-ε)。 次に、見つけた(zまたはm)ポイントから、関数のゼロ、不連続点、および変曲点を含むスタックを構築します。最初の反復後、スタックはのようになり[a, z, b]ます。私は再び間隔からアルゴリズムを開始]a,z[して]z,b[。2つのポイントaとの間bで、極値が両方の区間の端よりも同じ符号を持ち、両方の極値で不連続性がない場合、スタックから区間を削除します。アルゴリズムは、間隔がなくなると終了します。

1
周期的境界条件を持つ線形弾性問題の適切性
定常状態の熱伝達や多孔質媒体内の流れなどの特定のアプリケーションでは、反対の境界面に周期的な境界条件を課し、残りの境界にディリクレBCを課すことにより、はるかに大きな(無限)ドメインをシミュレートできます。2D長方形ドメインの場合、周期的条件は、ドメインが円柱の表面にあるかのように解釈できます。 弾性の問題についても同じことが言えるかどうか私は興味があります。標準の線形弾性問題が有限領域に限定されていることに気づき、周期的な境界条件が規定または実装されている例を見たことがない。周期性によって引き起こされる剛体の動き(並進や回転)が原因で、この問題の解決策の一意性に問題があるのではないかと思います。 簡単にするために、2Dの長方形ドメインで線形等方性平面弾性のケースを想定します。2つの対向する境界に固定変位(ディリクレ)条件を使用し、残りの境界に周期的変位条件を使用して、大きな(周期的)媒体をモデル化するとします。 この問題は適切なものですか?そうでない場合、最終的な目標は反復的な材料特性を持つはるかに大きい(無限)媒体をシミュレートすることであることを知っているため、適切な戦略にするために使用できる戦略(追加の制約など)はありますか?

4
参照リクエスト:PDEおよびODEのアルゴリズムの厳密な分析
私は、数値PDEおよびODEの主題、特に専門の数学者向けに書かれた方法でのそのような方法の厳密な分析に関する本の参考文献の提案に興味があります。数百または数千の異なるメソッドをリストするという意味では、非常に包括的である必要はありませんが、現代のテクニックを導く主要な概念の少なくともほとんどをカバーするものに興味があります。 私がよく知っている数値線形代数についてのテキストに類推を描くのが適切だと思います。Highamの数値アルゴリズムの精度と安定性は数値線形代数の安定性と丸め誤差であり、ODEとPDEの最新の手法をGolubの方法で説明するため、数値微分方程式の安定性と打ち切り誤差に関するものを探していますVan LoanのMatrix Computationsは、線形代数の主なタイプの技法のほとんどについて説明しています。 私は実際には数値ODEとPDEについてほとんど知りません。私はいくつかのオンラインノートを読んでいますが、Randall LeVequeによる『Finite Difference Methods for Ordinary and Partial Differential Equations』という本を持っています。これは明確な本ですが、目的には十分ではありません。私が探しているレベルのより具体的な例として、楕円および放物線方程式のセクションは、読者がソボレフ空間とその埋め込みの理論、およびPDEの弱い解に完全に精通しており、結果を使用していることを前提としています。その理論から、有限要素などの誤差推定を導出する際にかなり自由に

1
大きな行列の条件数をどのように概算するのですか?
がフーリエ変換(不均一または均一)、有限差分、および対角行列組み合わせである場合、大きな行列の条件数をどのように近似しますか?G F R SGGGGGGFFFRRRSSS 行列は非常に大きく、メモリには保存されず、関数としてのみ使用できます。 特に、次のマトリックスがあります。 Gμ= SHFHFS+ μ RHRGμ=SHFHFS+μRHRG_\mu=S^HF^HFS+\mu R^HR と条件数の関係を調べたい。K (G μ)μμ\muk (Gμ)k(Gμ)k(G_\mu) ある種の反復的なアプローチが必要だと思いますか?最適には、利用可能なMATLABコードがいくつかあります。

2
大きな共分散行列の並列計算
サイズがから100000 × 100000の範囲の共分散行列を計算する必要があります。GPUとクラスターにアクセスできます。これらの計算を高速化するための最適な並列アプローチは何でしょうか。10000×1000010000×1000010000\times10000100000×100000100000×100000100000\times100000

1
Ax = bを解くための行列なしのメソッドの前提条件
Ax = bを解く必要がありますが、それがスパースであっても、問題の行列係数を格納するとメモリが大量に消費されることを理解しています。そこで、同じ係数が行列に多く現れるので、独自のプライベートストレージスキームを使用できるように(そして、キャッシュ効率を向上させることができる)、行列なしの方法の使用を検討しています。 そのような行列のない線形演算子のインターフェイスを提供するpetscを見ていますが、私が実際に理解していないのは、前処理がどのようにpetscによって計算されるかです。それとも、独自のプレコンディショナーを用意する必要がありますか もしそうなら、行列のない線形演算子から前提条件子を構築するために利用可能なツールまたはレシピはありますか? 私の演算子に関する詳細情報:非対称であり、斜めに支配的ではありませんが、いくつかの側波帯が支配的です(ただし、斜めにバンド化されていません)

1
超伝導体の曲線をモデリングするための数値積分(Python)
私は、超伝導体-超伝導体接合の電流-電圧特性をモデル化しようとしている物理学者です。 このモデルの方程式は次のとおりです。 私(V)= 1e Rn − n∫∞- ∞| E|[ E2- Δ21]1 / 2| E+ e V|[ (E+ e V)2- Δ22]1 / 2[ f(E)− f(E+ e V)]d EI(V)=1eRn−n∫−∞∞|E|[E2−Δ12]1/2|E+eV|[(E+eV)2−Δ22]1/2[f(E)−f(E+eV)]dE\begin{align} I(V) = \frac{1}{eR_{\mathrm{n-n}}}\int_{-\infty}^{\infty}\frac{|E|}{[E^{2} - \Delta_{1}^{2}]^{1/2}}\frac{|E + eV|}{[(E + eV)^{2} - \Delta_{2}^{2}]^{1/2}}[f(E) - f(E + eV)]\,\mathrm{d}E \end{align} 現在の(またはコード内の)値は、この積分を特定の電圧(Vまたはコード内)について評価することによって計算されます。私私IIVVVv 私はこれをPythonで試みました。コードを以下に示します。 from scipy import integrate from …

1
Barrodale-Roberts-algorithmを使用した最小絶対偏差の解決:早期終了?
長めの質問は申し訳ありませんが、実際の問題にたどり着くには説明が必要です。前述のアルゴリズムに精通している人は、おそらく最初のシンプレックスタブラウに直接ジャンプするでしょう。 最小絶対偏差の問題(別名解決する -optimization)を、Barrodale -ロバーツアルゴリズムは、はるかに少ないストレージと適切な最小値を見つけるために計算努力を必要とする特殊目的シンプレックス法です。L1L1L_1 アルゴリズムの実装は、適切な最小値に達する前に、単純な例で終了します。しかし、おそらく最初に、より詳細な方法で問題を述べさせてください。 データ与えられると、 -optimizationはを最小化する を見つけようとします ここで、は、何らかの方法で依存する行列です。この問題は線形プログラムとして説明できるため、特にシンプレックスのような方法を使用して解決できます。L 1 C ∈ M N Σは iが= 1 | y i − f (x i)|(x私、Y私)(xi,yi)(x_i,y_i)L1L1L_1C ∈ Mc∈mc\in mA 、X、N × M個のXΣi = 1ん| y私− f(x私)|とf(x ):= Aバツ⋅ φ∑i=1n|yi−f(xi)|withf(x):=Ax⋅ϕ \sum_{i=1}^n |y_i-f(x_i)| \quad\text{with}\quad f(x):=A_x\cdot \phi あバツAxA_xn × mn×mn\times mバツxx BarrodaleとRobertsは、問題の特別な構造を使用してシンプレックス法を根本的に簡素化するシンプレックス法の(明らかに広く使用されている)変更を提案しました。最も注目すべきは、これは、最適なソリューションが、指定されたデータポイントの少なくともを補間することです。Jstorアクセス​​権を持つユーザーは、対応する記事をここで見つけることができます。r a n k(A …

1
大きな密な低ランク割り当て問題
π 1 :N最高πΣ私あπ私、私maxπ∑iAπi,i\max_\pi \sum_i A_{\pi i,i}ππ\pi1 :n1:n1:n ここで、あAAは低ランクrのn × nn×nn\times n行列です。典型的なサイズは n = 10000 ~~(おそらくはるかに大きい)、r = 15です。rrrn = 10000 n=10000 n=10000~~r = 15r=15r=15

2
異なるパラメーターに対する目的関数のさまざまな時間コストを考慮する最適化方法
一部の人口統計モデリングソフトウェアの最適化プロセスの改善に取り組んでいるため、人口統計モデルをデータによりよく適合させることができます。最適化時間を短縮したいと思います。 目的関数の評価にかかる時間は、入力値によって大きく異なります。目的関数を評価する時間と入力の関係は既知です。評価するポイントを選択するときに目的関数の相対時間コストを考慮する最適化方法があるかどうか疑問に思っています。 ありがとう! 更新: Paulが要求したように、この特定の目的関数のいくつかの顕著な特徴は次のとおりです。 パラメータの数は中程度です(〜12ish) 私たちの問題は非凸であるか、少なくとも目的関数の表面に狭くて平らな「尾根」があります。現時点では、さまざまなポイントから複数の最適化を使用してこれに対処していますが、もっと改善したいと考えています。 目的関数は非常に滑らかですが、導関数の有限差分近似しか計算できません。 評価コストは、パラメーター値の滑らかな関数でもあり、非常に予測可能です。おおまかに言えば、各パラメーターの評価コストは、範囲の一端で高く、他端で低くなります。したがって、評価に費用がかかるパラメーターセットの大きな領域がありますが、それらがどこにあるかはわかっています。

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