47

私は科学プログラマーになるために働いています。私は数学と統計の十分なバックグラウンドを持っていますが、プログラミングのバックグラウンドが不足しています。SP のリファレンスのほとんどは取るに足らないものに近いため、科学的プログラミングに言語を使用する方法を学ぶのは非常に困難であることがわかりました。

私の仕事は統計/財務モデリングに関係し、物理モデルには関係ありません。現在、私は numpy と scipy で Python を広く使用しています。R/Mathematica を完了しました。コードを読むのに十分な C/C++ の知識があります。Fortran の経験はありません。

これが科学プログラマーにとって適切な言語リストであるかどうかはわかりません。もしそうなら、科学的な設定でこれらの言語の構文設計パターンを学ぶための良い読書リストは何ですか.

4

17 に答える 17

38

ある段階で、浮動小数点演算が必要になります。それを上手に行うのは難しく、有能に行うのは難しくなく、下手に行うのは簡単です。このペーパーは必読です。

すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

于 2009-11-04T08:24:03.310 に答える
25

私は徹底的にお勧めします

Scientific and Engineering C++: バートンとナックマンによる高度なテクニックと例の紹介

その年齢を延期しないでください、それは優れています。お気に入りの言語 (C、C++、または Fortran である限り) の Numerical Recipes は豊富で、学習には優れていますが、各問題に対して常に最適なアルゴリズムとは限りません。

私も好き

C++ と MPI による並列科学計算: Karniadakis による並列アルゴリズムとその実装へのシームレスなアプローチ

並列計算を始めるのは早ければ早いほどよい。

于 2009-11-04T08:58:13.867 に答える
10

言語に関しては、あなたは良いカバレッジを持っていると思います。Python は実験やプロトタイピングに最適で、Mathematica は理論的な作業を支援するのに適しています。C/C++ は、本格的な計算が必要な場合に役立ちます。

また、アセンブリ言語と関数型言語 (Haskell など) の理解を深めることをお勧めします。これは、実際には使用するためではなく、プログラミングのスキルとスタイルに与える影響、およびそれらがもたらす概念のためです。あなたへ。また、いつか役に立つかもしれません。

また、並列プログラミング (並行/分散) について学ぶことも重要だと考えています。これは、科学的な問題に必要な場合がある計算能力にアクセスする唯一の方法だからです。問題を解決するために実際に関数型言語を使用するかどうかに関係なく、関数型プログラミングに触れることは、この点で非常に役立ちます。

残念ながら、読み方で提案することはあまりありませんが、The Scientist and Engineer's Guide to Digital Signal Processing が役立つかもしれません。

于 2009-11-04T04:59:02.623 に答える
7

私は過去2年間でこの分野に参入したばかりの科学プログラマーです。私はもっ​​と生物学と物理のモデリングに興味がありますが、あなたが探しているものはかなり似ているに違いありません。仕事やインターンシップに応募しているときに、知っておくことがそれほど重要だとは思わなかったことが2つありましたが、機会を逃してしまいました。1つはMATLABで、これについてはすでに説明しました。もう1つはデータベースの設計でした。SPのどの領域にいても、何らかの方法で管理する必要のあるデータが大量にある可能性があります。

マイケル・ヘルナンデスの著書 『データベース・デザイン・フォー・メア・モータルズ』は、良いスタートであり、準備に大いに役立ったと私に勧められました。また、まだ理解していない場合は、少なくともいくつかの基本的なSQLを理解していることを確認します。

于 2009-12-17T23:48:44.160 に答える
6

数値レシピの本 (言語を選択) が役に立つと思います。

使用する言語によって、または視覚化を行う場合は、他の提案がある場合があります。

私が本当に好きなもう 1 つの本は、Didier Besset によるObject-Oriented Implementation of Numerical Methodsです。彼は Java と smalltalk で多くの方程式を実行する方法を示していますが、さらに重要なことは、コンピューターで使用するために方程式を最適化する方法と、コンピューターの制限によるエラーに対処する方法を示すのに役立つ素晴らしい仕事をしていることです。

于 2009-11-04T05:06:29.583 に答える
4

MATLABは、設計、迅速な開発、さらには実稼働アプリケーションのエンジニアリングで広く使用されています(私の現在のプロジェクトには、ネイティブC ++よりも簡単に実行できる高度な数値処理を行うためのMATLAB生成DLLがあり、FPGAはMATLAB生成を使用しています信号処理用のコアもあります。これは、VHDLで手動でコーディングするよりもはるかに簡単です。興味があるかもしれないMATLAB用の財務ツールボックスもあります。

これは、MATLABがあなたの分野に最適であると言っているわけではありませんが、少なくともエンジニアリングでは、MATLABは広く使用されており、すぐにはどこにも行きません。

于 2009-11-04T19:42:41.393 に答える
4

科学プログラマーが直面する問題の 1 つは、他のユーザーが実験を再現するために使用できるコード (およびデータ) のリポジトリを維持することです。私の経験では、これは商用開発で​​は必要のないスキルです。

これに関するいくつかの読み物を次に示します。

これらは計算生物学の文脈にありますが、ほとんどの科学的プログラミングに当てはまると思います。

また、Python Scripting for Computational Science もご覧ください。

于 2009-12-10T14:20:57.243 に答える
4

Donald Knuth の半数値アルゴリズムに関する本。

于 2009-11-04T10:25:17.270 に答える
2

ソースコードを読むことも大いに役立ちます。この意味で Python は優れています。科学的な Python ツールのソース コードを掘り下げるだけで、多くの情報を得ることができました。これに加えて、お気に入りのツールのメーリング リストやフォーラムをフォローすることで、スキルをさらに高めることができます。

于 2009-12-27T04:48:15.070 に答える
2

起動して実行したら、このブログを読むことを強くお勧めします。

C++ テンプレートを使用してタイプ セーフなユニットを提供する方法について説明します。たとえば、速度に時間を掛けると、距離などが得られます。

于 2009-11-04T10:20:40.207 に答える
0

Writing Scientific Software: A Guide to Good Styleは、現代の科学プログラミングに関する全体的なアドバイスが記載された優れた本です。

于 2010-05-20T18:13:46.170 に答える
0

Donald Knuth: Seminumerical Algorithms 、 The Art of Computer Programming のVolume 2

Press、Teukolsky、Vetterling、Flannery: Numerical Recipes in C++ (本は素晴らしいですが、ライセンスに注意してください)

最新の C++ 設計

GNU Scientific Libraryのソース コードをざっと見てみましょう。

于 2009-12-10T14:23:58.650 に答える
-1

Java については、Unit-API
Implementations are Eclipse UOMo (http://www.eclipse.org/uomo) または JScience.org (Unit-API の作業が進行中で、JSR-275 の以前の実装が存在します) を参照することをお勧めします。

于 2011-01-23T12:09:37.687 に答える