計算科学

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

8
Cでのタンパク質構造データの解析
私のバックグラウンドはゲノミクスですが、最近、タンパク質構造に関連する問題に取り組んでいます。Cでいくつかの関連プログラムを作成し、プロセスの最初から独自のPDBファイルパーサーを作成しました。本当に堅牢なパーサーを作成することを心配していませんでした。自分で1つ作成することが、PDBフォーマットを本当に理解するように強制する最良の方法であると思いました。 このプロセスを完了したので、もう少し堅牢で成熟したものを探しています。Cで実装されているオープンソースのタンパク質構造ライブラリはありますか?私はGoogleでいくつかを見つけることができましたが、それらのどれも聞いたことがなく、それらはあまり成熟していないか安定しているようには見えません。少し関連する質問:誰もが実際にPythonを使用してこれらすべてのタイプの計算を行っていますか?または自作コード? PS。私は基本的に、PDBファイルパーサー、結合角、結合長、ねじれ角、表面アクセス可能表面積などを計算するための関数を含むライブラリを探しています。

1
数値解析におけるニッチェの方法の一般的な考え方は何ですか?
ニッチェの方法は、ラグランジュ乗数を使用せずにディリクレ型境界条件または摩擦境界条件との接触を弱い方法で考慮することができるため、非常に魅力的な方法であることを知っています。また、その利点は、ディリクレ境界条件をノイマン境界条件と同様に弱い項に変換することですが、実装がモデルに依存しているという事実によって支払われます。 しかし、私には一般的すぎるようです。この方法のより具体的なアイデアを教えていただけますか?簡単な例をいただければ幸いです。

2
マトリックスを反転することが良くない理由の実際的な例
行列を反転して線形システムを解くことは、システムを直接解くか、LU、Cholesky、またはQR分解を使用するほど正確で効率的ではないため、お勧めできません。 しかし、実際の例ではこれを確認できませんでした。このコードを試しました(MATLABで) M = 500; A = rand(M,M); A = real(expm(1i*(A+A.'))); b = rand(M,1); x1 = A\b; x2 = inv(A)*b; disp(norm(b-A*x1)) disp(norm(b-A*x2)) 残差は常に同じ次数(10 ^ -13)です。 inv(A)* bがA \ bよりもはるかに不正確ではない実用的な例を提供できますか? ------質問の更新------ ご回答ありがとうございます。ただし、システム倍を解く必要があるとします。ここで、は常に同じ行列です。それを考慮してくださいnnnA x = bAバツ=bAx = bAAA -満杯であるため、と同じメモリ・ストレージが必要。AAAA− 1A−1A^{-1}AAA 条件数が小さいため、を正確に計算できます。AAAA− 1A−1A^{-1} その場合、LU分解を使用するよりもを計算する方が効率的ではないでしょうか?たとえば、私はこのMatlabコードを試しました:A− 1A−1A^{-1} %Set A and b: M = 1000; A …


1
Newton-Krylovが適切なソルバーではないのはいつですか?
最近、私はscipyのさまざまな非線形ソルバーを比較しており、Scipy CookbookのNewton-Krylovの例に特に感銘を受けました。約20行のコードで非線形反応項を持つ2階微分方程式方程式を解きます。 半導体ヘテロ構造の非線形ポアソン方程式(ポアソン-ボルツマン方程式とも呼ばれ、これらのノートの17ページを参照)を解くためにサンプルコードを修正しました。 d2ϕdバツ2− k (x )( p (x 、ϕ )− n (x 、ϕ )+ N+(x )) = 0d2ϕdバツ2−k(バツ)(p(バツ、ϕ)−n(バツ、ϕ)+N+(バツ))=0 \frac{d^2\phi}{dx^2} - k(x) \left(p(x,\phi) - n(x,\phi) + N^{+}(x)\right) = 0 (これはソルバーに渡される残差関数です。) これは、静電気の問題である及びP (X 、φは)フォームの非線形関数であり、N I(X )E - (E I(X 、φ )- E 、F)。ここでの詳細は重要ではありませんが、ポイントは非線形関数がϕで指数関数的に変化するため、残差関数は巨大な範囲(10 − 6 − 10 16)にわたって変化する可能性があることです。n (x 、ϕ )n(バツ、ϕ)n(x,\phi)p …

6
多項式で近似するのが難しい連続関数の例
教育目的のために、多項式で近似するのが「難しい」単一変数の連続関数が必要です。つまり、この関数をうまくフィットさせるには、べき級数の非常に高いべき乗が必要です。私は、学生にべき級数で達成できることの「限界」を示すつもりです。 私は「うるさい」と何かを紡ぎ上げについて考えたが、代わりに自分を転がり、私はちょうど人々がそれらに多少同様に、近似/補間アルゴリズムをテストするために使用することを標準「難しい機能」のようなものがあるかどうかを疑問に思って最適化テスト機能数多く持っています素朴なアルゴリズムが簡単にスタックするローカルミニマム。 この質問の形式が適切でない場合はおApびします。非数学者に慈悲を与えてください。

4
コンピューティングリソースをレンタルするか、自分のコンピューターを購入する必要がありますか
この質問は計算に関連しているため、ここに投稿することにしました。うまくいけば、それが適切とみなされるでしょう。 大気モデルと海洋モデルを実行し始めたばかりですが、現在のデスクトップよりも多くのコア、メモリ、ディスクスペースが必要であることに気付きました。私の教育機関には高性能コンピューティングサービスがあり、研究者はコアあたり月額固定価格でコアをレンタルできます。私の研究グループでは誰もこのサービスを使用していませんが、代わりに強化されたマシンでジョブを実行しています。ただし、部門内の他のいくつかの研究グループは資金をプールし、コンピューティングサービスを利用しています。 次に、60 GBのRAMを搭載した新しいマシンを購入するか、コンピューティングサービスからコアをレンタルするかを決定する必要があります。この決定を行う際に考慮すべき要素は何ですか?専用のマシンを購入するよりも、コンピューティングサービスを使用する利点は何ですか?
16 hpc 

3

3
ユニットテストとテスト駆動開発の戦略
私は、科学コンピューティングのテスト駆動開発の大擁護者です。実際のところ、このユーティリティは驚異的であり、コード開発者が知っている古典的な問題を本当に軽減します。ただし、一般的なプログラミングでは発生しない科学的コードのテストには固有の困難があるため、TDDテキストはチュートリアルとしてそれほど有用ではありません。例えば: 一般に、与えられた複雑な問題に対する正確な答えはアプリオリにわからないので、どのようにテストを書くことができますか? 並列度が変化します。最近、MPIタスクを3の倍数で使用すると失敗するが、2の倍数で動作するというバグに遭遇しました。さらに、一般的なテストフレームワークは、MPIの性質上、MPIにあまり適していません。タスクの数を変更するには、テストバイナリを再実行する必要があります。 科学コードには、多くの場合、密結合され、相互に依存し、交換可能なパーツが多数あります。私たちは皆、レガシーコードを見てきましたが、良いデザインを放棄してグローバル変数を使用することがどれほど魅力的かを知っています。 多くの場合、数値的手法は「実験」であるか、コーダーがその方法を完全に理解しておらず、理解しようとしているため、結果を予測することは不可能です。 科学コード用に書いたテストの例: 時間積分器については、正確な解をもつ簡単なODEを使用し、積分器が所定の精度内でそれを解くかどうかをテストします。さまざまなステップサイズでテストすることにより、精度の順序が正しいです。 ゼロ安定性テスト:境界/初期条件が0のメソッドが0のままであることを確認します。 補間テスト:線形関数が与えられた場合、補間が正しいことを確認します。 レガシー検証:正しいことがわかっているレガシーアプリケーションのコードのチャンクを分離し、テストに使用するためにいくつかの離散値を引き出します。 手動での試行錯誤は別として、特定のコードチャンクを適切にテストする方法がわからないことがよくあります。数値コード用に記述するテストの例や、科学ソフトウェアをテストするための一般的な戦略を提供できますか?
16 testing 

1
どのように数値コードをデバッグしますか、この振動エラーの原因は何ですか?
静かに多くの洞察を経験から得ることができます。これと似たようなものを以前に見たことがある人はいないかと思っていました。このプロットは、移流拡散方程式の初期条件(緑)、反復200(青)、反復400(赤)での解を示しています。 移流拡散方程式の解は、数回の反復後に爆発します。ペクレ数、およびCFL条件が満たされ、、方程式はそうする必要があり安定しています。数値コードにバグがあると予想しています。μ ≈ 0.07μ≈0.07\mu\approx0.07C≈ 0.0015C≈0.0015C\approx 0.0015 バックグラウンド。離散化は、移流と拡散の両方の用語の中心的な違いです。これは移流の1次であり、拡散の2次であると思います。これを有限体積アプローチ(初めて)を使用して実装しました。この方法では、セルの平均値からの線形補間によってセル面の係数(速度と拡散係数)の値が求められます。左右の表面にロビン境界条件を適用し、境界のフラックスをゼロに設定します。 数値コードをどのようにデバッグしますか?これまでにこのようなシーンはありますか?どこから探し始めるのが良いでしょうか? 更新 これは、移流拡散方程式の有限体積法の実装に関する個人的な「ラボブック」スタイルのメモです。http://danieljfarrell.github.io/FVM/ Pythonソースコードは、http://github.com/danieljfarrell/FVM.gitから入手できます。 更新 解決策はこれ以上簡単ではありません!私はちょうど拡散項でサインエラーを犯しました。それは奇妙です、私はこれを投稿していなかったと確信しています、私はエラーを見つけなかっただろう!数値コードをデバッグする方法についてのヒントを共有したい場合は、まだ興味があります。私には方法がありません、それは少しヒットとミスです、私は手がかりを得るために何かを試し続けますが、このプロセスには数週間かかる場合があります。 ××\times

3
Matlab Neural Network ToolboxのPython OSSの代替。相互比較はありますか?
私は科学研究のために商用ソフトウェアから独立したいと思います。将来的にMatlabにアクセスできるかどうかわからないし、言語が気に入らないので、Matlabやそのツールボックスなどの商用パッケージへの依存が不十分であることがわかりました。したがって、私は代替手段を探しています。 幸いなことに、私はPythonに非常に堪能であり(そしてこの言語が大好きです)、NumPy、SciPy、Matplotlib、Basemap、およびNetCDFの読み取りおよび書き込みルーチンで、ほとんどのニーズを満たします。ほとんど—フィードフォワード多層パーセプトロンを使用して衛星検索をトレーニングする必要がある場合、Matlabに戻ります。たとえば、人工ニューラルネットワークを使用します。 オープンソースソフトウェアでは珍しくありませんが、ニューラルネットワークを実行するパッケージは複数あります。かなり複数: しばらく前に、「ニューラルネットワーキング用のスイスアーミーナイフ」であるPyBrainを試しましたが、短期間(開発時と実行時の両方)で満足のいく結果を得ることができませんでした。おそらく、私は十分に一生懸命に努力しなかったか、おそらくそれは私の正確な必要性に本当に向いていません。 たった今、私は有望に見えるニューロラボと呼ばれるパッケージがあることを発見しました。これは、MATLABのNeural Network Toolbox(NNT)のようなAPIを備えたPython用のシンプルで強力なニューラルネットワークライブラリです。 ありFFnet、迅速かつpythonのための使いやすいフィードフォワードニューラルネットワークトレーニングソリューションは、 simplennがあります 計算インテリジェンスと機械学習のためのライブラリであるPeachがあります このStackOverflow投稿で事実上の標準として記述されているFANN(高速人工ニューラルネットワークライブラリ)へのPythonバインディングがあります。 おそらく他にもあります。 使いやすさ、速度などの基準に基づいて、さまざまなオプションを相互比較する努力をした人はいますか?私自身の使用例は、衛星検索です。たとえば、多くの変数の強く非線形な関数を適合させます。私はニューラルネットのユーザーです。私は彼らの内部の仕組みを研究することに興味はありません。 Stats.SEに関するこの質問は関連していますが、焦点が異なります。

4
行列の行優先レイアウトと列優先レイアウト
密行列計算のプログラミングで、列優先レイアウトより行優先レイアウトを選択する理由はありますか? 選択したマトリックスのレイアウトに応じて、速度を上げるためにキャッシュメモリを効果的に使用するために適切なコードを記述する必要があります。 行優先レイアウトは、より自然でシンプルに見えます(少なくとも私には)。しかし、Fortranで書かれたLAPACKのような主要なライブラリは列の主要なレイアウトを使用するため、この選択をした理由がいくつかあるに違いありません。
16 matrix  fortran 

4
均一グリッドと非均一グリッド
おそらく学生レベルの質問ですが、私はそれを自分自身にはっきりさせることはできません。数値的手法で不均一なグリッドを使用する方が正確なのはなぜですか?の形式のPDEに対する有限差分法のコンテキストで考えています。そして、ポイントソリューションに興味があると仮定します。そのため、たとえば3点近似を使用して均一なグリッドで2次導関数を近似すると、誤差は2次になることがわかります。その後、マッピングを使用して不均一なグリッドを構築し、導関数を近似するために使用される3つのポイントの係数を見つけることができます。テイラー展開を行い、2次になる導関数の境界を再度取得できます。ここで、x ∗ O (h 2)O (h 2)hあなたはt(x 、t )= ux x(x 、t )あなたはt(バツ、t)=あなたはバツバツ(バツ、t)u_t(x,t)=u_{xx}(x,t)バツ∗バツ∗x^{\ast}O (h2)O(h2)O(h^2)O (h2)O(h2)O(h^2)hhhは、不均一グリッドへのマッピングを取得した均一グリッド上の距離です。どちらの推定値にも導関数が含まれており、誤差推定の対応する導関数の大きさに依存するため、解が不均一グリッドでより正確になる理由は明らかではありませんか?

2
Boost :: mpiまたは高性能科学アプリケーション向けのC MPI?
私がMPIで最も嫌いなのは、データ型(データマップ/マスク)を扱うことです。なぜなら、それらはオブジェクト指向のC ++にうまく適合しないからです。boost::mpiただし、WebサイトからはMPI 1.1のみをサポートしています。 boost :: mpiは、標準のメッセージパッシングインターフェイスに対するC ++フレンドリーなインターフェイスです。Boost.MPIは、Boost.Serializationライブラリを使用して、ユーザー定義型のMPIデータ型を構築できます。 boost::mpi本格的な科学コンピューティングの経験はありますか?お勧めしますか?問題(スケーリングの問題、コンパイラの問題、エラー、実装されていない機能、いくつかのmpi 2.2機能の必要性)がありましたか? boost::mpiC ++のMPI C実装を使用する代わりに使用についてコメントできますか?両方を組み合わせることができます(可能な場合はboost :: mpiを使用し、他の場所ではC-MPIを使用します)。 を使用して大きな科学的コードを知っていboost::mpiますか?
16 hpc  c++  mpi 

7
計算科学にはプログラミングが含まれますか?
ウィキペディアで計算科学について読みましたが、私の理解はあまり明確ではありません。 計算科学にはプログラミングが含まれますか?計算科学は、ブランクが任意の学問分野(材料科学、工学、化学、生物学など)になる可能性のある計算_ ____とどの程度違いますか?(私は計算材料科学をやっています。)

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