計算科学

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


5
数値積分用のC ++ライブラリ(求積法)
私は数値積分(求積)のための独自の小さなサブルーチンを持っています。これは、Bulirsch&Stoerによって1967年に公開されたALGOLプログラムのC ++適応です(Numerische Mathematik、9、271-278)。 より近代的な(アダプティブ)アルゴリズムにアップグレードし、そのような(無料の)C ++ライブラリが提供されているかどうか疑問に思います。私はGSL(Cです)のように見えましたが、恐ろしいAPIが付属しています(数値は良いかもしれませんが)。他に何かありますか? 便利なAPIは次のようになります。 double quadrature(double lower_integration_limit, double upper_integration_limit, std::function<double(double)> const&func, double desired_error_bound_relative=1.e-12, double desired_error_bound_absolute=0, double*error_estimate=nullptr);
10 c++  quadrature 

3
CFDシミュレーションと現実的な海洋/大気モデルシミュレーションの違いは何ですか?
計算流体力学(CFD)の分野は、ナビエストークス方程式(またはそれらのいくつかの簡略化)を解くことに専念しています。CFD、海洋および大気モデルのサブセットは、現実的なアプリケーションのために同じ方程式を数値的に解きます。一般的なCFDアプローチと適用された現実的なケースの違いとトレードオフは何ですか?

3
5つを超える次元を処理する有限要素ソフトウェアはありますか?
私はFEの初心者です。私のアプリケーションは、スペースが5次元である金融デリバティブの価格設定です。したがって、時間を追加すると、問題には6つの側面があります。 私は周りを見回そうとしましたが(Fenics、escript、deal.II、...)、私の理解では、これらのソフトウェアは3 + 1(3dスペース+ 1d時間)に制限されています。これは正しいです? 私のターゲット言語はPythonまたはC ++です。 私の問題の説明 毎月、投資家が再投資する自由があるかどうかにかかわらず、投資商品の価格を設定したいと思います。確率論的ボラティリティ、確率論的金利、確率論的死亡率について、そうしたいと思います。 確率的PDEは次のようになります ここで、は株価関連付けられた時間依存定数であり、 μ S T SB S TdStdσtdrtdqt= μStdt+ σt−−√dBSt=μσtdt + νσtdBσt= μrtdt + νrtdBrt= μqtdt + νqtdBqt(株式)(ボラティリティ)(金利)(死亡)dSt=μtSdt+σtdBtS(株式)dσt=μtσdt+νtσdBtσ(ボラティリティ)drt=μtrdt+νtrdBtr(金利)dqt=μtqdt+νtqdBtq(死亡)\begin{align} dS_t &= \mu^S_t d_t + \sqrt{\sigma_t} dB^S_t &\text{(stock)}\\ d\sigma_t &= \mu^\sigma_t dt + \nu^\sigma_t dB^\sigma_t & \text{(volatility)} \\ dr_t &= \mu^r_t dt + …

4
部分特異値分解(SVD)のメモリー効率の高い実装
モデルの縮小のために、行列の最大20の特異値に関連付けられた左特異ベクトルを計算したい A ∈ RN、kあ∈RN、kA \in \mathbb R^{N,k}、 どこ N≈ 106N≈106N\approx 10^6 そして K ≈ 103k≈103k\approx 10^3。残念ながら、私のマトリックスああA どんな構造もなしで密になります。 このサイズのランダムマトリックスに対してPython svdのnumpy.linalgモジュールからルーチンを呼び出すだけの場合、メモリエラーが発生します。これは、V∈ RN、NV∈RN、NV\in \mathbb R^{N,N} 分解のために A = VSUあ=VSUA = VSU。 この落とし穴を回避するアルゴリズムが周りにありますか?たとえば、非ゼロの特異値に関連付けられた特異ベクトルのみを設定します。 計算時間と精度をトレードする準備ができています。

5
大規模なスパース対称(正定ではない)システムのソルバーの最良の選択
私は現在、いくつかの特定のアルゴリズムによって生成された非常に大規模な対称(ただし、正定値ではない)システムの解決に取り組んでいます。これらの行列には、並列解法に使用できる素晴らしいブロックスパース性があります。しかし、直接アプローチ(Multi-frontalなど)と反復アプローチ(前処理されたGMRESまたはMINRES)のどちらを使用するべきかを判断できません。私のすべての研究は、反復ソルバー(7つの内部反復のかなり高速な収束でさえ)が、MATLABの直接の '\'演算子に勝てないことを示しています。しかし、理論的には、直接法の方がコストがかかると考えられています。これはどうですか?そのような場合の最新の文書や紙はありますか?GMRESのような柔軟な反復ソルバーと同じくらい効率的な直接法を使用して、並列システムでブロックスパース性を使用できますか?

3
四次方程式の解
四次方程式の解のためのオープンなC実装はありますか? ax⁴+bx³+cx²+dx+e=0ax⁴+bx³+cx²+dx+e=0ax⁴+bx³+cx²+dx+e=0 フェラーリのソリューションの実装を考えています。ウィキペディアで、係数の可能​​な符号の組み合わせの一部に対してのみ、解が計算的に安定していることを読みました。しかし、私は幸運かもしれません...コンピュータ代数システムを使用して分析的に解決し、Cにエクスポートすることによって実用的な解決策を得ました。しかし、テスト済みの実装がある場合、これを使用したいと思います。私は高速な方法を検索し、一般的なルートファインダーを使用しないことを好みます。 本当の解決策だけが必要です。

1
求積規則、方法、および参照
直近に更新されていないようで、アクセスが制限されている直交規則の非常に包括的な百科事典が少なくとも1つあります。この情報源は、いくつかの古典的情報源と現代的情報源を参照しており、一般によくまとめられています。しかし、それは純粋に理論的なアプローチから求積法則の構築に近づくため、たとえば有限要素計算のためのより実用的な方法を見逃しています。 求積ルールのより学際的な概要は存在しますか、または単純なドメイン(有限要素に使用されるものなど)にそのようなメソッドの幅広い範囲を実装するオープンソースライブラリを知っている人はいますか?

3
モンテカルロのための並列メルセンヌツイスター
最近、モンテカルロ法を行うほとんどすべての研究者が間違っていると主張するコメントに出くわしました。Mersenne TwisterなどのPRNGのインスタンスごとに異なるシードを選択するだけでは、悪い衝突が発生する可能性があるため、公平な結果を保証するには不十分であるとさらに説明しました。メルセンヌツイスター上のWikipediaの記事を裏付けるようです: 複数のパラメーター値のセットを選択する方法はありますが、シード値のみが異なる(他のパラメーターは異なる)複数のMersenne Twisterインスタンスは、独立した乱数ジェネレーターを必要とするモンテカルロシミュレーションには一般的に適していません。 私は認めなければならない、私は起訴されたように有罪です。しかし、これまでに見てきた他のすべての並列モンテカルロライブラリの実装、特にALPSも同様です。 ウィキペディアの記事では、救済策を提供する2つの論文も参照しています。 動的な作成(DC)制度(1998)は、対応する固有多項式が互いに素であれば、彼らは独立しているという仮説に基づいて、MTのためのパラメータセットを選びます。 控えのためにジャンプ -linearのRNGF2F2\mathbb F_2(2008)。LCGのリープフロッグ法に似ていると思います。 どちらの方法も、メルセンヌツイスターアルゴリズムの原作者である松本と西村によって共同開発されました。 私は、数論や代数についてあまり知識がなく、上記のスキームやメルセンヌツイスターの背後にある数学を完全には理解していません。私の質問は主に実用的な性質のものです: そのようなスキームを採用していない場合、実際に(少なくとも私のコミュニティでは)誰もそれを気にしない場合、シミュレーションにバイアスを導入することについて本当に心配する必要がありますか? これらの対策の1つを実装した場合、Jump-Aheadは確固たる理論に基づいており、より近代的な方法であるため、Jump-Aheadの方が適していると思いますか?

3
ラグランジュ多項式と多くのノードの統合、丸め
一連の点して、を計算し 正確に。は、をノードとする点に関するラグランジュ多項式です。つまり、 これは次数多項式なので、十分な次数の古いガウス求積法を使用できます。これがあればうまく動作あまり大きくないが、大きなための丸め誤差により損なわれた結果につながる。 [ - 1 、1 ] ∫ 1 - 1 L I(X ){xj}nj=1{xj}j=1n\{x_j\}_{j=1}^n[−1,1][−1,1][-1, 1]L i x j x i L i(x )= ∏ j ≠ i x − x j∫1−1Li(x)dx∫−11Li(x)dx \int_{-1}^{1} L_i(x)\,\text{d} x LiLiL_ixjxjx_jxixix_innnLi(x)=∏j≠ix−xjxi−xj.Li(x)=∏j≠ix−xjxi−xj. L_i(x) = \prod_{j\neq i} \frac{x - x_j}{x_i - x_j}. nnnnnnnnn それらを回避する方法はありますか?

4
ルンゲクッタ法とオイラー法がなぜそれほど違うのですか?
私は連立一次方程式を解く午前、、数値的に。オイラー法とルンゲクッタ法(RK)の一般的な方法を使用してこれを行いました。この2つの分析ソリューションの精度にはかなりの違いがあることに気づきました。これの理由は何ですか?バツ˙––= A––⋅ X––バツ˙_=あ_⋅バツ_\underline {\dot x}=\underline A\cdot \underline x


3
LAPACKが(反射ベクトルを正規化する代わりに)QR分解でを使用する理由は何ですか?
LAPACKのQRルーチンは、Qをハウスホルダーリフレクターとして保存します。反射ベクトルをでスケーリングするため、結果の最初の要素はになるため、保存する必要はありません。そして、必要なスケールファクターを含む個別のベクトルを格納します。したがって、リフレクタマトリックスは次のようになりますvvv1/v11/v11/v_1111ττ\tauH=I−τvvT,H=I−τvvT,H=I-\tau v v^T, ここで、は正規化されていません。教科書では、反射板の行列はvvv H=I−2vvT,H=I−2vvT,H = I-2vv^T, ここで、は正規化されています。vvv LAPACKはを正規化する代わりに、でスケーリングするのはなぜですか?vvv1/v11/v11/v_1 必要なストレージは同じであり(代わりに、を格納する必要があります)、と乗算する必要がないため、適用をより高速に実行できます(教科書バージョンのとの乗算を最適化できます)。単純な正規化の代わりに、はによってスケーリングされます。ττ\tauv1v1v_1HHHττ\tau222vvv2–√/∥v∥2/‖v‖\sqrt 2/\|v\| (私の質問の理由は、QRおよびSVDルーチンを作成していることです。私がそれに従う必要があるかどうかにかかわらず、この決定の理由を知りたいのですが)

1
通常のルンゲクッタ法はSDEに一般化できないという理解しやすい議論はありますか?
確率微分方程式(SDE)を解く単純なアプローチは次のとおりです。 通常のマルチステップのルンゲクッタ法を採用し、 基礎となるウィーナープロセスの十分に細かい離散化を使用し、 ルンゲクッタ法の各ステップをオイラー丸山に類似させます。 今、これは複数のレベルで失敗し、私はその理由を理解しています。しかし、私は今、最初にルンゲクッタ法と確率微分方程式の知識がほとんどない人にこの事実を納得させるように命じられています。私が知っているすべての議論は、私が与えられた文脈でうまくコミュニケーションできるものではありません。したがって、私は上記のアプローチが破滅的であるという簡単に理解できる議論を探しています。

4
小さな正方行列(10x10)の最速線形システム解決
小さな行列(10x10)(小さな行列と呼ばれることもある)の線形システム解法の地獄を最適化することに非常に興味があります。これのための準備ができた解決策はありますか?行列は非特異と見なすことができます。 このソルバーは、Intel CPUでマイクロ秒単位で1 000 000回を超えて実行されます。コンピューターゲームで使用される最適化のレベルについて話しています。アセンブリやアーキテクチャ固有でコーディングしたり、精度や信頼性のトレードオフの削減を検討したり、浮動小数点ハックを使用したりしても(-ffast-mathコンパイルフラグを使用します。問題ありません)。ソルブは約20%の時間失敗することさえあります! EigenのpartialPivLuは私の現在のベンチマークで最速で、-O3と優れたコンパイラーで最適化するとLAPACKよりも優れています。しかし今、私はカスタム線形ソルバーを手作りする段階にあります。何かアドバイスをいただければ幸いです。私は自分のソリューションをオープンソースにし、出版物などで重要な洞察を認めます。 関連:ブロック対角行列を使用して線形システムを解く速度 何百万もの行列を反転する最も速い方法は何ですか? https://stackoverflow.com/q/50909385/1489510

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