数値計算(例えば, 線形計画法に対するシンプレックス法や, ニュートン法, また, 常微分方程式に対するルンゲクッタ法やオイラー法など, また, 線形方程式に対する直接法や, LU分解)のアルゴリズムをプログラムしようと思っています.


できるだけ高速かつ精度の良い結果を返すようにしたいのですが, どのようなプログラミング言語を利用するとよいでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2008/03/16 20:53:18
  • 終了:2008/03/23 20:55:02

回答(7件)

id:Baku7770 No.1

Baku7770回答回数2831ベストアンサー獲得回数1812008/03/16 21:44:05

ポイント14pt

 速度面の保証はできませんが、精度面ではやはりFortranでしょう。

 

 連続系の数値計算を離散系のコンピュータ上で行なって行く場合、誤差が累積していきます。その誤差の累積を抑えるためのライブラリやテクニック集が揃っています。

 

 逆に計算手法そのもののであれば、Algol系の言語もどきで記述されている論文が多く、そういった論文から記述していく方法はありますが、そういった論文はプログラムの提供ではなくロジックの説明に終始していますのでデバック作業が大変なことのほうが多いと考えます。

id:Q-tarou

ありがとうございます. Fortranですか.

2008/03/16 23:08:56
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912008/03/16 21:51:34

ポイント14pt

計算のプログラミング化は、自分でいろいろ工夫してみるのもよいですが、

先達の足跡をたどるのもまた大きな勉強です。


C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

のような本もありますので、一度目を通してみてはどうでしょうか。


今回質問に挙げられた内容は、掲載されていたように思います。

id:Q-tarou

ありがとうございます. 質問が不正確でしたが, 上げた例をくみあわせ, さらに別のアルゴリズムを追加するつもりです.

2008/03/16 23:13:59
id:ita No.3

ita回答回数203ベストアンサー獲得回数472008/03/16 21:52:07

ポイント14pt

諸々のことを考えると Numerical Recipieを使うのが一番

安心で簡単だと思いますが

http://www.nr.com/

昔はFortranだったようですが第二版ではFortranとC,

第三版ではC++になったようです。したがってNRを使うなら

C++ということになりそうですね。

これは過去のソフトウェア資産という観点での回答ですが、

言語自体の数値計算の性能はどれも基本的に同じだと思います。

とはいえ実際の現場で使われているのはFortran,C,C++に限られると

思います。

id:Q-tarou

ありがとうございます. いろいろ調べてみると, ruby, perlや, pythonなどもあるのですが, これらはどうなのでしょうか. やはりC++が良いのでしょうか?

2008/03/16 23:14:59
id:pahoo No.4

pahoo回答回数5960ベストアンサー獲得回数6332008/03/16 22:35:42

ポイント26pt

アルゴリズムそのものを学びたいのでしょうか? それとも、知られているアルゴリズムを使い、高速・正確に結果を得る方法を学びたいのでしょうか?

前者であれば、私も#2の書籍をお勧めします。C言語で書かれていますが、手続き型言語であれば移植は簡単です。

後者であれば、市販製品ならMathmaticaを、フリーソフトならMaximaをお勧めします。高級言語より専用言語を用いた方が、演算誤差をコントロールしやすいです。

id:Q-tarou

ありがとうございます. 質問が不正確でしたが, 目的は後者です.

2008/03/16 23:15:41
id:murakami_tak No.5

murakami_tak回答回数9ベストアンサー獲得回数02008/03/17 04:05:45

ポイント26pt

よく知られた言語なら基本的にはどれを使っても学習できます。Ruby,Perl,Pythonでも可能は可能ですが,数値計算には速度や情報量の観点から不利です。

今後も数値計算を継続しておこなわれるのであればFortran,C/C++のいずれかが良いと思います。高速・正確の条件も満たしています。また,近くに詳しい人がいる方の言語にした方が習得が早いと思います。アルゴリズムそのものはどの言語で学んでも同じですが,大体はプログラムにする段階で苦労しますので。

1つだけ選べと言われれば,プログラミング環境の構築しやすさ,サンプルプログラムなど情報量の多さ,より高度な処理(並列計算など)への発展性,そして速度・正確性からC言語をオススメします。

id:Q-tarou

ありがとうございます.

2008/03/18 18:18:32
id:ita No.6

ita回答回数203ベストアンサー獲得回数472008/03/17 08:40:13

ポイント13pt

コメント欄に書き込めないのでここで補足です(ポイント不要)

前の解答で挙げたNumerical Recipes には批判的異見もあるようです。

http://nakano.webmasters.gr.jp/nr.html

ところでなぜ数値計算の現場で Fortran & C/C++ が主流かといえば

やはり「言語の」というより「コンパイラの」性能でしょう。

前の質問で上げられた Ruby, perl などはプログラムを実行するときに読んで解釈し

実行するスクリプト言語です。一方 FortranやCなどはプログラムを読んで

あらかじめ実行ファイルを作成しておくコンパイラです。この作成段階でプログラマ

に代わってプログラムをよく解析し、高速化のテクニックが使える部分では勝手に

高速化してくれます。

FortranもCも無料で入手できる性能のよいものがありますが、例えばインテル社がインテルマシン専用に開発して販売しているCやFortranは1割程度速い、という話も聞きます。

id:Q-tarou

ありがとうございます. 非常に有用な情報でした. 特にNRに関する批判については.

2008/03/18 18:18:35
id:ttakao No.7

RON回答回数276ベストアンサー獲得回数312008/03/18 10:59:14

ポイント13pt

そういう目的にFortranを使います。

Fortranはコンピュータの世界で初の本格的コンパイラーとして誕生しました。

初代なだけに、マシンコードにかなり都合のいい言語体系なのです。Fortranコンパイラーの吐き出すマシンコードは普通の人がアセンブラで書いても追いつかないほどの最適化がなされます。例えば、並列計算などはFotranにインプリされることが多いです。

また、桁落ちなどについての情報や先人のライブラリーが豊富にそろっているのも見逃せません。

古い言語だからとバカにしてはいけません。お考えの分野ではバランスのいい言語だと思いますよ。

id:Q-tarou

ありがとうございました. やはりFortranですか.

2008/03/18 18:18:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません