計算科学

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

1
通常のグリッドでのネストされた解剖
直接因数分解法を使用してスパース線形システムを解く場合、使用される順序付け戦略は、因子内の非ゼロ要素のフィルイン因子に大きな影響を与えます。そのような順序付け戦略の1つは、ネストされた解剖です。グリッドパラメーターのみを指定して、ネストされた解剖順序付けを事前に作成できるかどうか疑問に思っています(M x Nの正方形の差分グリッドで1次の違いがあると仮定します)。 編集 これを行うコードがあることがわかりました:http : //www.cise.ufl.edu/research/sparse/meshnd/

3
数値:次のODEを正規化する方法
この質問は、数値的に問題に取り組む方法に関するものです。 小さなプロジェクトで、ヤヌスとエピメテウスの軌道運動をシミュレートしたいと思いました。これは基本的に三体問題です。私は土星を原点に固定することを選択し、とr 2をそれぞれジャヌスとエピメテウスの位置ベクトルとする。JanusとEpimetheusが非常に接近しているときに効果が発生するので、解像度を上げるために相対座標を選択しました。つまり、r = r 1 − r 2およびR = r 1 + r 2です。これで、次の運動方程式が得られます。r1r1r_1r2r2r_2r=r1−r2r=r1−r2r=r_1-r_2R=r1+r2R=r1+r2R=r_1+r_2 d2dt2(Rr)=−G(m2±m1)RR3−4MG(r+R(r+R)3∓r−R(r−R)3)d2dt2(Rr)=−G(m2±m1)RR3−4MG(r+R(r+R)3∓r−R(r−R)3) \frac {d^2}{dt^2} \binom{R}{r} = - G (m_2\pm m_1) \frac R {R^3} - 4 M G \left(\frac {r+R}{(r+R)^3} \mp \frac {r-R}{(r-R)^3}\right ) ここで、は月の質量に対応し、は土星の質量、は重力定数です。これを数値的に解こうとすると問題が発生します。完全に異なる大きさの値、つまりとます。そして、、は0から150,000の範囲にあります。mimim_iMMMGGGM∼e28M∼e28M \sim e^{28}mi∼e17mi∼e17m_i \sim e^{17}rrrRRR 正直なところ、これがそのような数値的な問題について議論するためのフォーラムかどうかはわかりません。 詳しくは: コードはMatlabで記述されており、標準のODEソルバーを使用して結果を取得しています。ただし、機械の精度ではステップサイズを小さくできないため、これはうまくいきません。(私はこれが驚くべきことではないことを発見しました。なぜなら、すでに言及された桁数を扱わなければならないからです)
9 ode 

2
「ゼロ」による除算が可能な数値積分
統合しようとしています ∫10t2 n + 2exp(α R0t) dt∫01t2ん+2exp⁡(αr0t)dt\int^1_0 t^{2n+2}\exp\left({\frac{\alpha r_0}{t}}\right)dt これはの単純な変換です ∫∞1バツ2 nexp(- α R0x )dバツ∫1∞バツ2んexp⁡(−αr0バツ)dバツ\int^{\infty}_1 x^{2n}\exp(-\alpha r_0 x)dx 不適切な積分を数値で近似することが難しいため、を使用します。ただし、これは新しい被積分関数をゼロに近い値で評価するという問題につながります。間隔は長さ1しかないため、適切な数の直交ノードを取得するのは非常に簡単です(したがって、比較可能なを非常に小さくすることができます)。t = 1バツt=1バツt = \frac1{x}dtdtdt あるレベルでは、単にをとることは、がいくつかの小さな数である場合に良い考えだと思います。しかし、何を選ぶべきですか?マシンイプシロンにする必要がありますか?マシンイプシロンによる除算は十分に数値化された数ですか?さらに、私のマシンのイプシロン(またはそれに近い)の除算が信じられないほど大きな数を与える場合、取得はさらに大きくなります。∫1εt2 n + 2exp(α R0t) dt∫ε1t2ん+2exp⁡(αr0t)dt\int^1_\epsilon t^{2n+2}\exp({\frac{\alpha r_0} {t}})dtεε\epsilonexp(1ε)exp⁡(1ε)\exp(\frac{1}{\epsilon}) これをどのように説明する必要がありますか?この関数の数値積分を明確に定義する方法はありますか?そうでない場合、機能を統合する最良の方法は何ですか?

7
科学雑誌の出版物に標準の評価システムはありますか?
一部のジャーナルは他のジャーナルよりも高く評価されていると聞きました。これは本当ですか?もしそうなら、ピアレビューされたジャーナルの価値を別のジャーナルよりも判断する基準は何ですか?どうすればその評価を確認できますか?たとえばSIAMレビューよりも評判の悪いジャーナルで受け入れられた場合、私の出版物は「価値」が低くなりますか?

2
対角支配行列での反復法の安全な適用
次の線形システムが与えられたと仮定 Lx=c,(1)(1)Lx=c,Lx=c,\tag1 ここで、LLL正であることが知られているラプラシアン重み付けsemi−semi−semi-で張ら一次元のヌル空間と明確1n=(1,…,1)∈Rn1n=(1,…,1)∈Rn1_n=(1,\dots,1)\in\mathbb{R}^n、そして、の翻訳分散x∈Rnx∈Rnx\in\mathbb{R}^{n}、すなわち、x+a1nx+a1nx+a1_nその誘導体である関数値(変化しない(1)(1)(1))。の唯一の正のエントリはLLL、対角線上にあります。これは、負の非対角線上のエントリの絶対値の合計です。 私は非常にも、その場で学業に引用いずれかで見出さLLLであるnot strictlynot strictlynot~strictly斜めドミナント、例えば共役勾配、ガウスSeidl、ヤコビのような方法は、まだ安全に解決するために使用することができるが(1)(1)(1)。理論的根拠は、変換不変性のため、1つの点を固定しても安全です(たとえば、最初の行と列LLLおよび最初のエントリをから削除するccc)。したがって、LLLをa s t r i c t l yに変換します。strictlystrictlystrictly対角線的に支配的な行列。いずれにしても、元のシステムは、完全な形で解決される(1)(1)(1)と、L∈Rn×nL∈Rn×nL\in\mathbb{R}^{n\times n}。 この仮定は正しいですか、正しい場合、代替の根拠は何ですか?メソッドの収束がどのように維持されるかを理解しようとしています。 ヤコビ法を有する収束である場合(1)(1)(1)、どのスペクトル半径約状態可能性ρρ\rho繰り返し行列のD−1(D−L)D−1(D−L)D^{-1}(D-L)、DDDのエントリを有する対角行列であるLLLその対角線上には?あるρ(D−1(D−L)≤1ρ(D−1(D−L)≤1\rho(D^{-1}(D-L)\leq1、のための一般的な収束を保証からしたがって、異なるρ(D−1(D−L))&lt;1ρ(D−1(D−L))&lt;1\rho(D^{-1}(D-L))<1?私はラプラシアン行列の固有値ので、これを求めているD−1LD−1LD^{-1}L対角線上のものが持つべき範囲であることが[0,2][0、2][0, 2]。 原作より: ...................................... 各反復で、次の線形システムを解くことで新しいレイアウト(x(t +1)、y(t + 1))を計算します: L⋅x(t+1)=L(x(t),y(t))⋅x(t)L⋅y(t+1)=L(x(t),y(t))⋅y(t)(8)(8)L・バツ(t+1)=L(バツ(t)、y(t))・バツ(t)L・y(t+1)=L(バツ(t)、y(t))・y(t) L · x(t + 1) = L(x(t),y(t)) · x(t) \\ L · y(t + 1) = L(x(t),y(t)) · y(t) \tag 8 一般性を失うことなく、センサーの1つの位置を固定できます(ローカライズされたストレス)、厳密に対角線的に支配的な行列を取得します。したがって、(8)を解くためにJacobi反復を安全に使用できます。 ................................................. 上記の「反復」の概念は、基礎となる最小化手順に関連しており、Jacobi反復と混同しないでください。したがって、システムはJacobiによって(反復的に)解決され、ソリューションは(8)の右側に購入されますが、今度は、基礎となる最小化の別の反復のためです。これで問題が明確になることを願っています。 正の半定値行列に対して収束する反復線形ソルバーが見つかりましたか?、しかしより複雑な答えを探しています。

1
構造化グリッド上の3Dフローフィールドの最も正確な補間方法は何ですか?
私は、3D構造化グリッドで多種の圧縮可能なナビエ・ストークス方程式を解きます。特定のグリッドでソリューションを取得しました(比較的粗いグリッドとしましょう)。シミュレーションを再開する前に、グリッドを調整し、以前のソリューションを新しいグリッドで補間したいと思います。現在、2つのグリッドのkdツリーを構築し、2つの異なる方法を使用して新しいグリッドの値を計算できる補間ツールがあります。 単純平均 逆距離加重(IDW) 最小二乗法(MLS) 大きな勾配を扱っているため、勾配を正しくキャプチャしないと、計算を再開したときに波が生成されるため、精度に焦点を当てたいと思います。最初は簡単な平均化を試しましたが、精度は十分ではありませんでした。 次数が2の多項式を使用したMLS法は非振動性であると想定されているため、妥当な結果が得られると思いました。ただし、内挿フィールドを見ると、最初のフィールドの値をオーバーシュートする極小/極大が表示されます。これは、このプログラムでのMLSの実装が正しくないことを意味しますか?ステンシルのサイズと多項式の順序に注意する必要がありますか?他にどの方法をお勧めしますか? 前もって感謝します !

3
スパースマトリックスストレージとデンスマトリックスストレージの経験則
マトリックスの予想されるスパース性(つまり、非ゼロの数/非ゼロの可能な合計数)がわかっているとします。スパースマトリックスストレージ(具体的には、圧縮された行ストレージ)を使用するか、高密度マトリックスとして保存するかを決定するための経験則(おそらくおおよそ)はありますか? 私のアプリケーションでは、メモリよりも速度が重要です。しかし、一般的な好奇心から、スピードとメモリの両方の観点からの回答に興味があります。 行列を生成した後は、加算と乗算の演算のみを適用します。 私は定性的な答えしか見つけることができませんでした。たとえば、この質問とこの質問ですが、次のようなものを探しています ...スパース性が約超える場合は、高密度ストレージを使用します。x%x%x\%


6
Armadilloによる行列乗算のSuper C ++最適化
私はArmadilloを使用して、辺の長さが非常に集中的な行列乗算を行っています。ここで、は最大20以上にすることができます。私が使用しているアルマジロをしてOpenBLAS私は、パフォーマンスの最適化のためのスーパーアルマジロでの乗算の形式主義に問題があることを除いて、並列コアで非常に良い仕事をしているように見える行列乗算、ため。 n2ん2ん2^nんんn 次の形式のループがあるとします。 arma::cx_mat stateMatrix, evolutionMatrix; //armadillo complex matrix type for(double t = t0; t &lt; t1; t += 1/sampleRate) { ... stateMatrix = evolutionMatrix*stateMatrix; ... } 基本的なC ++では、私はここでの問題を見つけることはC ++での新しいオブジェクトに割り当てるということであるcx_mat店にしevolutionMatrix*stateMatrix、その後に新しいオブジェクトをコピーstateMatrixしてoperator=()。これは非常に非効率的です。大きなデータ型の複雑なクラスを返すのは悪い考えだということはよく知られていますよね? この方法がより効率的であると私が考える方法は、次の形式で乗算を行う関数を使用することです。 void multiply(const cx_mat&amp; mat1, const cx_mat&amp; mat2, cx_mat&amp; output) { ... //multiplication of mat1 and mat2 and then store …

5
Galerkinメソッドの背後にある動機
ガラーキン法について質問があります。ガラーキン法が形状関数によって残差に重みを付け、それをゼロに設定する理由がわかりません。その理由を知りたい。重み残差関数をゼロに設定する必要があるのはなぜですか?


3
C ++でpolylogarithm関数を使用する方法
polylog関数を使用するために使用できるプリプロセッサディレクティブはありますか?それともcmathに含まれていますか?もしそうなら、あなたはそれを李またはポリログのどちらで呼びますか? 編集:私が本当にやろうとしていることは、関数の不定積分の分析値を与えることです x3ex−1x3ex−1 \frac{x^3}{e^{x} -1} これは多対数関数を含みます。しかし、誰かがこの機能を分析的に統合する別の方法について提案があれば、どんなアイデアでも歓迎します。

4
MATLAB FFT周波数の次数
このウィキブックでは、MATLABの出力は次のFFTように順序付けられた波数に対応していると述べています。 K = { 0 、1 、。。。、n2、− n2+ 1 、− n2+ 2 、。。。、− 1 }k={0,1,...,n2,−n2+1,−n2+2,...,−1}k=\left\{0,1,...,\frac{n}{2},-\frac{n}{2}+1,-\frac{n}{2}+2,...,-1\right\} ただし、同じページのコード例では、波数は次のようにコード化されています。 k = [0:n/2-1 0 -n/2+1:-1]; これは最初のものと同じですが、波数(「最大波数」)が0に置き換えられています。彼らが0を 2回含むのは奇妙に思えます。n / 2n/2n/2000000 wikibookで説明されているように、フーリエ変換を介して導関数を取得するには正しい順序が必要であるようです。これらのうち正しいものはどれですか。MATLABはこれをどこかに文書化していますか?

2
FEMで不均一なディリクレ境界条件を適切に適用する方法
一般に、ディリクレ境界条件は、非均質境界条件のFEMに対して正確に満たされません。私が見たFEMコードは、ディリクレ境界条件を補間するための自由度を設定しましたが、これに対する数学的な正当化は見つかりませんでした。必須の境界条件を設定すると、おそらく計算コストが高くなりますが、おそらくエラーの一部の機能を最小限に抑える必要があります(たとえば、Dirichlet BCが適用される境界の部分で)。| | u− uh| |||あなた−あなたh|| ||u -u_h|| このようにBCを設定する正当な理由はありますか。

2
Androidではどのスパースマトリックスソルバーライブラリを実行できますか?
タイトルはそれのほとんどを言います。 Android(NDK)プロジェクトに使用できる軽量で使いやすいライブラリを探しています。 密度の高いものについては、Eigenを使用するのが好きですが、プロジェクトで「正常に動作する」スパースなもののための包括的な(そして文書化された)ライブラリは多くありません。 PETScはこれらすべてのMPIのことで少し重いようですが、それは私の第一印象にすぎません。助言がありますか?

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