できるだけ高速かつ精度の良い結果を返すようにしたいのですが, どのようなプログラミング言語を利用するとよいでしょうか?
速度面の保証はできませんが、精度面ではやはりFortranでしょう。
連続系の数値計算を離散系のコンピュータ上で行なって行く場合、誤差が累積していきます。その誤差の累積を抑えるためのライブラリやテクニック集が揃っています。
逆に計算手法そのもののであれば、Algol系の言語もどきで記述されている論文が多く、そういった論文から記述していく方法はありますが、そういった論文はプログラムの提供ではなくロジックの説明に終始していますのでデバック作業が大変なことのほうが多いと考えます。
諸々のことを考えると Numerical Recipieを使うのが一番
安心で簡単だと思いますが
昔はFortranだったようですが第二版ではFortranとC,
第三版ではC++になったようです。したがってNRを使うなら
C++ということになりそうですね。
これは過去のソフトウェア資産という観点での回答ですが、
言語自体の数値計算の性能はどれも基本的に同じだと思います。
とはいえ実際の現場で使われているのはFortran,C,C++に限られると
思います。
ありがとうございます. いろいろ調べてみると, ruby, perlや, pythonなどもあるのですが, これらはどうなのでしょうか. やはりC++が良いのでしょうか?
アルゴリズムそのものを学びたいのでしょうか? それとも、知られているアルゴリズムを使い、高速・正確に結果を得る方法を学びたいのでしょうか?
前者であれば、私も#2の書籍をお勧めします。C言語で書かれていますが、手続き型言語であれば移植は簡単です。
後者であれば、市販製品ならMathmaticaを、フリーソフトならMaximaをお勧めします。高級言語より専用言語を用いた方が、演算誤差をコントロールしやすいです。
ありがとうございます. 質問が不正確でしたが, 目的は後者です.
よく知られた言語なら基本的にはどれを使っても学習できます。Ruby,Perl,Pythonでも可能は可能ですが,数値計算には速度や情報量の観点から不利です。
今後も数値計算を継続しておこなわれるのであればFortran,C/C++のいずれかが良いと思います。高速・正確の条件も満たしています。また,近くに詳しい人がいる方の言語にした方が習得が早いと思います。アルゴリズムそのものはどの言語で学んでも同じですが,大体はプログラムにする段階で苦労しますので。
1つだけ選べと言われれば,プログラミング環境の構築しやすさ,サンプルプログラムなど情報量の多さ,より高度な処理(並列計算など)への発展性,そして速度・正確性からC言語をオススメします。
ありがとうございます.
コメント欄に書き込めないのでここで補足です(ポイント不要)
前の解答で挙げたNumerical Recipes には批判的異見もあるようです。
http://nakano.webmasters.gr.jp/nr.html
ところでなぜ数値計算の現場で Fortran & C/C++ が主流かといえば
やはり「言語の」というより「コンパイラの」性能でしょう。
前の質問で上げられた Ruby, perl などはプログラムを実行するときに読んで解釈し
実行するスクリプト言語です。一方 FortranやCなどはプログラムを読んで
あらかじめ実行ファイルを作成しておくコンパイラです。この作成段階でプログラマ
に代わってプログラムをよく解析し、高速化のテクニックが使える部分では勝手に
高速化してくれます。
FortranもCも無料で入手できる性能のよいものがありますが、例えばインテル社がインテルマシン専用に開発して販売しているCやFortranは1割程度速い、という話も聞きます。
ありがとうございます. 非常に有用な情報でした. 特にNRに関する批判については.
そういう目的にFortranを使います。
Fortranはコンピュータの世界で初の本格的コンパイラーとして誕生しました。
初代なだけに、マシンコードにかなり都合のいい言語体系なのです。Fortranコンパイラーの吐き出すマシンコードは普通の人がアセンブラで書いても追いつかないほどの最適化がなされます。例えば、並列計算などはFotranにインプリされることが多いです。
また、桁落ちなどについての情報や先人のライブラリーが豊富にそろっているのも見逃せません。
古い言語だからとバカにしてはいけません。お考えの分野ではバランスのいい言語だと思いますよ。
ありがとうございました. やはりFortranですか.
ありがとうございます. Fortranですか.