計算科学のためにどの言語を学ぶべきですか?


11

私は計算科学の概念にまったく慣れていないので、良い出発点を探しています。

客観的に最良の言語はないことは理解していますが、計算科学に関しては間違いなく強力で目立つ存在を持つ言語を学びたいと思っています。

まず、グラフィカルな表現/シミュレーションが必要な原子結合と相互作用に関連するモデリングに傾倒していました。

一部の言語は他の分野よりも優れている傾向がありますか(つまり、物理学と純粋数学)。または、他の要因に基づいて言語を選択していますか?

Fortranという名前がたくさん出回っているのを聞きました。

提案?


1
C ++とFortranは、コミュニティでよく知られている言語です。最近、動的言語の使用が増加していることがわかります。多くの場合、言語ではなくライブラリを選択します。
vanCompute

9
本物のプログラマはどの言語でもFortranを書くことができるというを思い出します。
ハードマス

1
ここでは答えの多くと非常によく似た質問は次のとおりです。scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
オンドレジ・セティク

1
「客観的に最高の言語がないことを理解しています」-正確に、言語にとらわれないことを学んで、あなたに投げられたどんな言語でも書けるようにしましょう。
JM

2
英語をマスターする必要があります。それなしでは、計算科学のどこにも行きません。
ヨハネス

回答:


15

ほとんどの場合、タスクを達成するのに役立つ数値ライブラリーが利用可能です。C / C ++には多数の数値ライブラリが実装されていますが、低レベルの言語であることは、何かをすばやくプロトタイプ化するのに最適ではありません。

解決策にすぐに取り掛かるには、MatlabやMathematicaなどを使用することをお勧めします。これらには大きなツールセットがあり、非常に高レベルです。ほとんどの場合、そこでの実装は実稼働での使用には対応していませんが、さまざまな方法を試すのに適した遊び場になる可能性があります。実行するパスがわかれば、C / C ++でいつでもより効率的に実装できます。


4
学界の内外を問わず、多くの人々は、少なくとも最小限の自動化されたテストスイートがない限り、実際にコードを信頼しません。matlabやmathematicaでこのようなツールがどのようなものかはわかりませんが、PythonやC ++などの主流言語向けの優れたパッケージがいくつかあります。
cjordan1

3
MATLABにはMATLAB xUnitがありますが、PythonおよびC ++にはより多くの(そして、私の意見ではより良い)テストスイートがあります。
ジェフオックスベリー

24

Python!

  1. numpyライブラリ、小さなスクリプト、およびipythonインタラクティブシェルを使用して直接開始します。
  2. 多数の無料の本やチュートリアルの助けを借りて、さらに高度になります。
  3. scipyをパフォーマンスの高い数値ルーチンと視覚化のためのmatplotlibのフロントエンドとして使用して生産性を向上
  4. KrypyFeNiCSその他多数の科学コンピューティング用に開発された強力なモジュールを活用してください
  5. フラットプログラミングとオブジェクト指向プログラミングの間のスムーズな移行と、Python固有のモジュール性により、大規模プロジェクトの取り扱いが容易になることに注意してください。
  6. cythonで重要な部分を書き換えるだけで、CまたはFortranと同じくらい速くコードを作成できます。FortranまたはCで作成されたルーチンを簡単に含めることもできます

これは、科学コンピューティングの問題に取り組むための最良の方法であると私が考えることを言い換えています。小さなスクリプトでおもちゃの例を試して、問題を理解することから始めます。より体系的になり、一連のコードをセットアップします。次に、コードを機能させます!!! 最後に、必要に応じて、コードの最適化を行います。車輪を再発明したり、時期尚早な最適化を行ったりしないでください。

(追加のプラス:Pythonは無料で提供されます-ライセンスの問題はありません。スタックオーバーフローなどの大規模なコミュニティ、単体テストやロギングとして優れたプログラミング用のモジュール...)




5

Fortran:Matlabに似ており、学習と使用が簡単で、すぐに生産性が向上しますが、数値計算にのみ適しています

C ++:マスターするのは難しい(数年かかります)が、数値計算(ジョブセキュリティ)以外で多く使用した

Python:最近はたくさん推奨されていますが、自明でない作業には遅すぎます。基礎となる計算コストの高いカーネルをすべてCで記述してからPythonから呼び出す必要があるため、(少なくとも)2つの言語を学ぶ必要があります。


1
FortranとC ++の学習曲線はいくぶん似ていると思います。私は両方で十分なスキルを身につけ、それぞれがjava、matlab、c#のバックグラウンドから来た数ヶ月の間に問題のより簡単な終わりを解決しました。誰かが知っている言語にもよりますが、そこにあるほとんどの大きなコードは古いバージョンで書かれているので、c ++はfortranよりもはるかに簡単に学ぶことができます。
ゴドリックシーア

@Godric:〜600ページで、Fortran 2008規格はC ++ 11の半分(
〜1300

1
@stali、はい。しかし、たとえば、Fortran77で書かれた約25万行のレガシーコードを使用しています。だから私は77のスタイルを習得し、それを使って保守可能な変更を加えるために90-95を習得しなければならなかった(一般的なブロックは凶暴だから)、そして10年以上前に行き詰まらないために'08を学ばなければならなかった。Fortranは古い言語ですが、過去数十年にわたって大きな変化を遂げており、ゼロから始めない限り、その遺産を学ぶことは簡単ではありません。
ゴドリックシーア

2
Pythonは「自明でない作業には遅すぎる」という声明には同意しません。実際、純粋にPythonで行列とベクトルの乗算(など)を記述すると、苦労することになります。ただし、いくつかのより効率的な言語への抽象化はすでに行われています。NumPy、Scipyには、おそらく必要なものがすべて揃っています。または、他の50,000パッケージの1つ。
ニコ・シュレーマー

1
@NicoSchlömer「自明でない作業には遅すぎる」と同意します。Python(Numpy / Scipy)でのシミュレーションは、Fortran90バージョンの同じコードよりも約10倍遅いです。Fortran90またはC ++をお勧めします。
フロントヘム

4

短い答え
pythonを介してオブジェクト指向コードの基礎について学び、Cを介してコンピューターサイエンスの基礎について学びます。C++でほとんど何でもできるので、他の両方の言語で少なくともかなり大丈夫なら、C ++を学びます。すばやく実行します(ただし、書き込みには永遠に時間がかかります)。

より長い答え
だから、ここにあります。最初のプロジェクトでは、誰かの研究室で誰かのコードに取り組んでいます。その場合、彼らはプログラミング言語を選択する人になります。私は個人的には素晴らしいと思います!

つまり、初心者としては、しばらくの間肘から自分のお尻を実際に知ることはないでしょう。特に、自分が何をしているかわからないときは、プログラミングを学ぶのは面倒です。したがって、他の誰かのコードに取り組むことから生じる構造と制限を持つことは良いことであり、実際のプロジェクトに取り組むことからしか得られない動機と興奮を持つことは良いことです。

それでも、ラボで使用する言語に関係なく(特にMatlabの場合)、おそらくpython、C、およびC ++を学習する必要があります。特に、もしあなたがコンピューターサイエンスのバックグラウンドから来ていないなら、カーニハンとリッチーの「Cプログラミング言語」を読まなければなりません。それは35歳であり、その作者がパンチカードでプログラミングをしているという明確な印象を与えますが、それは鳥の中で最も珍しいことです:時代を超越したコンピューターサイエンスの本。これにより、多くのことがより明確になります。

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