計算科学

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

3
時間ディメンションが特別なのはなぜですか?
一般的に言えば、数値アナリストは、 「もちろん、数学的に言えば、時間は単なる別の次元ですが、それでも時間は特別です」 これを正当化する方法は?計算科学にとって特別な時間とはどのような意味ですか? さらに、なぜ私たちは時間次元に対して有限差分を使用することを好むのですか?考えられる理由の1つは、時間ディメンションにIVPがあり、空間ディメンションにBVPがある傾向があることです。しかし、これで完全に正当化されるとは思わない。

4
計算科学でC ++式テンプレートを使用する必要があるのはいつですか。また、使用しない*場合はありますか?
私がC ++で科学的なコードに取り組んでいるとします。同僚との最近の議論では、式テンプレートは本当に悪いことであり、gccの特定のバージョンでのみソフトウェアをコンパイルできる可能性があると主張されました。おそらく、この問題は、このDownfallのパロディの字幕で言及されているように、いくつかの科学的コードに影響を与えています。(これらは私が知っている唯一の例なので、リンクです。) ただし、SIAM Journal of Scientific Computingのこのペーパーのように、一時変数への中間結果の保存を回避することにより、パフォーマンスの向上をもたらすことができるため、式テンプレートが有用であると主張する人もいます。 C ++でのテンプレートメタプログラミングについてはあまり知りませんが、それが自動微分および区間演算で使用される1つのアプローチであることは知っています。それが式テンプレートについての議論になりました。パフォーマンスの潜在的な利点とメンテナンスの潜在的な欠点の両方(それが正しい言葉である場合)を考えると、計算科学でC ++式テンプレートをいつ使用し、いつ避けるべきですか?

5
等間隔のポイントの動作が悪いのはなぜですか?
実験の説明: ラグランジュ補間では、正確な方程式がNNNポイント(多項式次数N− 1N−1N - 1)でサンプリングされ、101ポイントで補間されます。ここでNNN各時刻2から64まで変化させL1L1L_1、L2L2L_2及びL∞L∞L_\inftyエラープロットを用意します。関数が等間隔の点でサンプリングされると、エラーが最初に低下し(NNNが約15未満になるまで発生します)、その後がさらに増加するとエラーが増加することがわかりNNNます。 一方、初期サンプリングがルジャンドルガウス(LG)ポイント(ルジャンドル多項式の根)、またはルジャンドルガウスロバット(LGL)点(ロバート多項式の根)で行われた場合、エラーはマシンレベルに低下し、とき増やすNNNさらに増加します。 私の質問は、 等間隔のポイントの場合、正確にはどうなりますか? 多項式の次数を増やすと、特定のポイントの後にエラーが発生するのはなぜですか? これはまた、WENO / ENO再構築にラグランジュ多項式を使用して等間隔の点を使用すると、滑らかな領域でエラーが発生することを意味しますか?(まあ、これらは(私の理解のために)架空の質問にすぎません。WENOスキームに対して15以上の次数の多項式を再構築することは実際には合理的ではありません) さらなる詳細: 近似関数: f(x )= cos(π2 x )f(x)=cos⁡(π2 x)f(x) = \cos(\frac{\pi}{2}~x)、X ∈ [ - 1 、1 ]x∈[−1,1]x \in [-1, 1] N個の等間隔(および以降のLG)ポイントにバツxx分割されます。関数は毎回101ポイントで補間されます。NNN 結果: a)等間隔の点(補間N= 65N=65N = 65): b)等間隔のポイント(エラープロット、ログスケール): a)LGポイント(補間N= 65N=65N = 65): b)LGポイント(エラープロット、ログスケール):

4
オーバーフローエラーなしで大きな指数項を確実に追加する方法は?
マルコフ連鎖モンテカルロ法の非常に一般的な問題には、大きな指数項の合計である確率の計算、 ea1+ea2+...ea1+ea2+... e^{a_1} + e^{a_2} + ... のコンポーネントは非常に小さいものから非常に大きいものまであります。私のアプローチは、最大指数項た。aaaK:=maxi(ai)K:=maxi(ai)K := \max_{i}(a_{i}) a′=K+log(ea1−K+ea2−K+...)a′=K+log(ea1−K+ea2−K+...)a' =K + log\left( e^{a_1 - K} + e^{a_2 - K } + ... \right) ea′≡ea1+ea2+...ea′≡ea1+ea2+...e^{a'} \equiv e^{a_1} + e^{a_2} + ... このアプローチは、aのすべての要素aaaが大きい場合は妥当ですが、そうでない場合はそれほど良い考えではありません。もちろん、小さな要素は浮動小数点の合計に寄与しませんが、それらを確実に処理する方法はわかりません。Rコードでは、私のアプローチは次のようになります。 if ( max(abs(a)) > max(a) ) K <- min(a) else K <- max(a) ans <- log(sum(exp(a-K))) + …

8
並列デバッグにはどのソフトウェアが適していますか?
現在、並列コードを実行していませんが、将来OpenMPとMPIのハイブリッドを使用して並列コードを実行する予定です。デバッガーは、シリアルプロジェクトを実行するときに非常に貴重なツールでした。 並列ソフトウェアのデバッグに使用する並列デバッガー(または複数のデバッガー)をお勧めできますか?フリーソフトウェアが望ましいが、効果的な商用ソフトウェアについて言及することをheしないでください。

3
線形連立方程式を解くためのクリロフ部分空間法の収束の背後にある原理は何ですか?
私が理解しているように、線形連立方程式を解くための反復法には2つの主要なカテゴリがあります。 定常法(Jacobi、Gauss-Seidel、SOR、Multigrid) クリロフ部分空間法(共役勾配法、GMRESなど) ほとんどの定常手法は、エラーのフーリエモードを繰り返し緩和(平滑化)することで機能することを理解しています。私が理解しているように、共役勾配法(クリロフ部分空間法)は、番目の残差に適用される行列のべきから最適な探索方向のセットを「ステップ実行」することによって機能します。この原理は、すべてのクリロフ部分空間法に共通ですか?そうでない場合、クリロフ部分空間法の収束の背後にある原則を一般的にどのように特徴付けますか?nnn

5
計算研究を再現可能にするために、雑誌記事にどの資料を含める必要がありますか(またはオンラインで投稿する必要がありますか)?
計算科学の研究では、再現性がますます重要になっています。(たとえば、科学の Roger Pengによるこの記事を参照してください。他のそのような記事やWebサイトも知っています。)しかし、どの程度の情報をジャーナル記事(またはオンライン)に含めるべきかはわかりません。私の計算研究は再現可能です(知的財産契約のような他の障害がないと仮定)。ガイドラインはありますか?もしそうでなければ、計算科学研究を再現可能にするために研究者がとるべきステップを提案できますか? 回答で特に使用されるのは、これらの提案を実装するための可能な方法、つまりワークフローです。システムに依存しない、またはLinuxベースのワークフローが望ましいです。また、関連する個人的な経験について話し合うことも役立ちます。 私の特定のケースでは、MATLABで実行できるほど単純な2つの計算例を含む理論的な論文を書いています。この場合、MATLABスクリプトを含め、マシン上の特定のバージョンのMATLABを記録するだけで、再現性を確保できます。ただし、もっと複雑なシナリオが存在することは確かです。再現可能な研究を実行する方法についてのアドバイスは、将来のプロジェクトについて知るのに非常に役立ちます。

5
MDシミュレーション用にラボでクラスターを構築するよりも、クラウドでクラスターを構築する方が安いのはいつですか?
およそアンAmazon EC2の計算クラスタ費$ 800- $ 3年にわたって物理CPUコアあたり(デューティ・サイクルに応じて)1000年。私たちの最後のハードウェア取得で、私のラボはAmazonのクラスターと非常によく似た48コア相当のハードウェアを1コアあたり約300ドルでピックアップしました。 ここに何かが足りませんか?分子動力学シミュレーションなどの高CPUタスクのためにクラウドにクラスターを構築することが経済的に意味のある状況はありますか?それとも、自分でダングマシンを構築してベビーシッターをするだけの方がいいのでしょうか。 (私の研究室では、サーバールームで電気料金を支払っていません(少なくとも直接ではありませんが、この利点があっても、Amazonは依然として非常に高価なようです)。


1
漸近勾配を見つけるための数値アルゴリズムはありますか?
一連のデータポイントありそれらは(ほぼ)大規模な行に漸近する関数従うと予想されます。基本的に、はとしてゼロに近づき、おそらくすべての微分、についても同じことが言えます、など。しかし、f(x)の関数形式が何であるかは、それが基本関数の観点から説明できるものを持っている場合でもわかりません。(xi,yi)(xi,yi)(x_i,y_i)y(x)y(x)y(x)xxxf(x)≡y(x)−(ax+b)f(x)≡y(x)−(ax+b)f(x) \equiv y(x) - (ax + b)x→∞x→∞x \to \inftyf′(x)f′(x)f'(x)f′′(x)f″(x)f''(x)f(x)f(x)f(x) 私の目標は、漸近勾配aの可能な限り最良の推定値を取得することaaaです。明らかな大雑把な方法は、最後のいくつかのデータポイントを選択して線形回帰を行うことですが、もちろん、データがあるxの範囲内でf(x)f(x)f(x)が「十分にフラット」にならない場合、これは不正確になります。明らかに粗雑な方法は、f(x)\ approx \ exp(-x)(または他の特定の関数形式)を想定し、すべてのデータを使用してそれに適合することですが、私が試した単純な関数は\ exp (-x)または\ dfrac1 {x}は、f(x)の下のxのデータと完全には一致しませんxxxf(x)≈exp(−x)f(x)≈exp⁡(−x)f(x) \approx \exp(-x)exp(−x)exp⁡(−x)\exp(-x)1x1x\dfrac1{x}xxxf(x)f(x)f(x)は大きい。漸近勾配を決定するための既知のアルゴリズムはありますか、データが漸近線にどのように近づくかについての知識が不足しているので、信頼区間とともに勾配の値を提供できますか? この種のタスクは、さまざまなデータセットを扱う作業で頻繁に発生する傾向があるため、主に一般的なソリューションに興味がありますが、リクエストにより、この質問を引き起こした特定のデータセットにリンクしています。コメントで説明されているように、Wynn ϵϵ\epsilonアルゴリズムは、私が知る限り、いくぶんオフの値を提供します。これがプロットです: (高いx値でわずかに下向きの曲線があるように見えますが、このデータの理論モデルでは、漸近的に線形になるはずです。)
23 algorithms 


12
Octaveを使用してMATLABプログラミングを学習することはできますか?
この質問は、Computational Science Stack Exchangeで回答できるため、Cross Validatedから移行されました。 7年前に移行され ました。 私は自分でいくつかの研究/分析を行うことができ、またオンラインで見つけたMATLABスクリプトなどを研究/修正できるようにMATLABプログラミングを学びたいです。 ただし、問題は、MATLABを購入する余裕がないことです。私が聞いたところによると、GNU OctaveはまったくMATLAB互換です。しかし、Octaveの課題は、ドキュメントが非常に少ないことです。 そのため、MATLABは非常に高価です(-ve)が、多くの優れたドキュメント、チュートリアル、およびオンラインスクリプト(+)があり、Octaveは(理解できるように)包括的なドキュメントなどがなくても(ビールのように)無料です。 Octaveをダウンロードしてインストールすることを考えていますが、MATLABドキュメント(およびスクリプト)を使用して作業を進めています。OctaveとMATLABにはいくつかの違いがあることを認識しています-私が解決しようとしているのは、その違いが(Octaveを使用してMATLABを学習する)努力を妨げるほど大きいかどうかです。 建設的なフィードバックを歓迎します。

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 …

3
科学的計算のための型破りなプログラミング言語の使用[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 注:次の投稿には物議を醸す意見が含まれている可能性があります。そのため、これらは私の意見に過ぎず、誰かを怒らせる意図はないことに注意してください。 私は1999年頃から何らかの形でプログラミングを行っています。最初はRを使用し、その後2004年頃に主にPythonに切り替えました。 MCMCなどを含む多くの科学アプリケーション、たとえばシミュレーションでは、RとPythonの両方が遅すぎるため、高速化する必要があります。これを行う通常の方法は、CまたはC ++で拡張することです。RとPythonの両方で、RのC APIをC ++で使用し、Boost PythonライブラリをPythonで使用して、これを行いました。 ただし、さまざまな理由から、この組み合わせは理想的なソリューションではありません。プログラミング、特にアルゴリズムで重要なことは何ですか?もちろん関連する表現力とスピード。言語の表現力が高ければ高いほど、より速く書くことができます。 1)表現力に関する限り、RもPythonも科学的なアルゴリズムを書くのに理想的ではありません。それらは、基礎となるアルゴリズムに密接にマッピングしません。ただし、どちらもC ++よりもかなり優れています。 2)Pythonで書くのが好きです。Pythonは快適な言語ですが、上記のようにアルゴリズム作業には理想的ではありません。ただし、速度の問題のためにPython / C ++の組み合わせで作業しなければならない場合、このミックスを使用するのはかなり快適ではなくなります。通常起こることは、私が最初にPythonで書くことです。そして、うまく機能しているものを見つけたら、それが遅すぎることをしばしば発見します(主観的な価値が遅すぎるため)。それから、C ++での書き換えに不合理な時間を費やすか、遅さに我慢するかの決定に直面します。後知恵では、特に得られるスピードアップが予測不可能であるので、私はしばしばスローネスに我慢した方が良いかもしれないと感じます。また、2つの間のBoost Pythonインターフェースはメンテナンスの大きな頭痛の種です。そして、このように2つの非常に異なる言語のコードを接着すると、気が散ります。Boost Pythonへの批判は意図されておらず、想像できるほど強力なインターフェースであり、ほとんどの場合に機能します。 今、時間とリソースが無制限の理想的な世界では、これらの問題はどちらも大きな問題ではありません。しかし、私が取り組んだ科学プロジェクトでは、次のような経験をしました。 プロジェクトに協力者がいるかどうかにかかわらず、私は常にコンピューティングの大部分を行うようになります。合計5つの重要なプロジェクトでは、1つのプロジェクトに1人の参加者しかいませんでした。その一人は体重を増やす以上のことをしました。彼は私と同じかそれ以上をしました。ただし、複数のコラボレーターを含むプロジェクトを含む他のすべてのケースでは、すべての計算作業を(実質的に)行いました。私は最高の協力者に恵まれていないと言うことができますが(怠mixtureと無能の混合物のようです)、この状況が将来変わる可能性があるかどうかは私には明らかではありません。 計算科学の仕事は多大な労力を要するものであり、共同研究者の行動を変えることができなければ、仕事のやり方を変えることができます。最も重要な改善は、より迅速に物事を成し遂げることです。ここで私は主な考慮事項に至ります。つまり、言語を正統性の低いものに切り替えることが役立つかもしれないということです。過去の研究に基づいて、可能性の順に最も可能性の高い候補は、Common LispとOcamlです。私はこれについて何年も考えてきましたが、最近はもっと真剣に考えています。 私の知る限り、科学計算にCLまたはOcamlを使用している人はほとんどいません。このサイトを検索すると、CL(私は私のもの)とOcaml(私のもの)の2つの参照が見つかりました。私は長年にわたり、フリンジに取り組んでいる冒険心のある人々といくつかの励ましの連絡を取り合ってきました。2008年に、Tamas K. PappによるPeter Seibelの「Practical Common Lisp」(私が所有)の書評に出会いました。これは、私がネット上で出会ったLispの科学的コンピューティングに関する数少ない言及の1つであったため、私の注意を引きました。私はタマスに手紙を書きました。タマスはすぐに助けと励ましで答えました。彼を引用する 私のプログラミングの生産性は、おそらくLispで10倍に増加しましたが、それは起こるのに約1年かかり、まだ学んでいます(しかし、2か月後にはかなりうまくいきました)。したがって、タイムクリティカルな作業をしている場合は、切り替えを延期してください。 これらのことを知っているのは私だけではなく、Lispで科学計算を行う人もいます。 彼にはブログとGitHubページもあります。 (2006年12月)私が簡単に連絡を取った別の人は、放射線腫瘍学の文脈でCommon Lispを使用したIra Kaletでした。 おそらく、Lispで科学計算を行う他の人もいますが、私は誰も知りません。 人々がCLで言及する最も一般的な問題は、ライブラリーの欠如です。これは、汎用コンピューティングでは重大な問題ですが、特にアルゴリズムのゼロからの実装では、科学コンピューティングではそれほど問題にならない場合があります。具体的には、ほとんどの場合、確率分布関数、多次元配列ライブラリ、およびC ++およびPython標準ライブラリにあるマップ、セット、リストなどのコンテナの基本セットを含む基本的な数学ライブラリで取得できます。 私はCLについてよりもOcamlについてはあまり知りませんが、代わりにそれを捨てました。おそらく非常に高速で、フランスの研究者による無料の実装が1つあり、科学計算用のML言語ファミリーの中で最も実行可能なもののようです。 結論として、他の人がこれを経験したことがあるのか​​、もしあれば、どんな考えを持っているのか疑問に思っています。 編集:私は主に、私が上で議論した問題の文脈で、直接体験に興味があります。たとえば、以前にPythonとC ++(またはRとC ++)を使用していて、より曖昧な言語に移行した場合、私はあなたの経験について聞いてみたいと思います。
22 languages 

4
直交変換がガウス消去法よりも優れているのはいつですか?
知っているように、線形方程式のシステムの直交変換法(Givens回転とHousholder反射)は、ガウス消去法よりも高価ですが、理論的には、システムの条件数を変えないという意味で、より優れた安定性特性を持っています。ただし、部分的なピボットを伴うガウス消去法によって損なわれたマトリックスの学術的な例は1つだけ知っています。そして、実際にこの種の行動に出会う可能性は非常に低いという一般的な意見があります(この講義ノート[pdf]を参照)。 それでは、トピックに関する答えをどこで探しますか?並列実装?更新しますか?..

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