数値計算の勉強をはじめるなら、MATLABに頼るべきか自分でプログラムを書くべきか悩んでいます

このQ&Aのポイント
  • 現在大学院修士課程1年の私は、将来アカデミックな研究者を目指しています。研究で非線形方程式(多変数)の解を数値計算で求めたいと考えているのですが、数値計算は初めてで迷っています。
  • MATLABなどの市販ソフトを使えば短時間で数値計算を行うことができますが、研究者としては自らプログラムを書くことが望ましいのか悩んでいます。数値計算の理論をしっかりと理解した上でFORTRANなどでプログラムを作成する方が良いのでしょうか。
  • 数値計算の勉強を始める際に、MATLABに頼るか自分でプログラムを書くか迷っている私に対して、アドバイスをいただけると助かります。研究者を目指すならどちらが望ましいのか教えてください。
回答を見る
  • ベストアンサー

数値計算ができるようになりたいのですが…

現在、大学院修士課程1年です。 将来はアカデミックな研究者を目指しています。 今行っている研究で、非線形方程式(多変数)の解を数値計算を用いて得たいと考えています。 今まで数値計算はやったことがないのでこれから勉強をはじめるところなのですが、少し悩んでいます。 今は数値計算に便利なMATLABのような市販ソフトがあることが分かっており、勉強すれば短時間で実際に研究につかうことができそうです。 しかし、やはり研究者を目指すなら、そのようなソフトに頼らず、しっかりと数値計算の理論を理解したうえで、FORTRANなどで自らプログラムを書くべきなのでしょうか。 良いアドバイスがありましたらよろしくお願いします。

noname#81447
noname#81447

質問者が選んだベストアンサー

  • ベストアンサー
  • gn_drive
  • ベストアンサー率22% (175/789)
回答No.4

プログラム言語なんて、一つマスターすれば何でも一緒ですよ。 英語や中国語をマスターするより、全然易しい。 フリーソフトでFortrunコンパイラが入手できる時代ですので、 Fortrunに興味ありそうなのだから、書いてみれば良い。 あなたの場合、まさしく遅功より拙速です。悩むよりやってみることです。1日あればFortrunって何って判ると思いますよ。Matlabだって同じこと。 目的や環境で選んだ方が良いです。 僕は、自分の狙いの特性のアンテナが欲しかったので、理論式から解いて楕円関数が入ったからMathematicaで理論解を求め、CでFDTD法の伝搬解析プログラムを書いたことありますが、Cで書いたのは一番慣れているからで、「科学技術計算ライブラリ」の本を買ってきて複素数の取り扱いを参考にしてかいた。同じような内容がネットでもあったのでご参考。 http://www5.airnet.ne.jp/tomy/cpro/science.htm Fortrunの資産があればFortrunでも良いのでは。FortrunよりCが良いのは型の宣言が自由度あり変換も簡単だし、ポインタが使えるところかな。僕にとってはかゆところに手が届くのがCの方です。 まだ若そうな研究者のようなので、いろいろ経験してみることです。

noname#81447
質問者

お礼

お礼が遅くなってすみません。 そうですねいろいろやってみようかと思います。 ありがとうございました。

その他の回答 (4)

回答No.5

私が使ったFortranの"文法の"参考書です。 入門Fortran90 Larry Nyhoff,Sanfort Leestma プログラミングの手順や注意点が書いてあり参考になりました。 電気回路の電流値や仕事量の計算等の例題があります。 "数値計算法"の参考書ではありません。 web上では、京大の富田博之先生のHPが参考になります。 他の方も言われているように、簡単な言語なので webの情報を参考に一度プログラムを作ってみると良いと思います。 フリーで手に入るコンパイラには、GNUやIntelの評価版などがあります。 ちなみに、Fortranは現在Fortra2003まで策定されており、古い言語ではありません。 ただ、個人的には研究者は市販ソフトに頼るべきだと思います。 数値計算の理論を理解した上で、便利ツールを活用したほうが研究がはかどります。 矛盾したように聞こえるかもしれませんが、 プログラミングの技術を身につけた後、市販ソフトを使うのをおすすめします。

noname#81447
質問者

お礼

お礼が遅くなってすみません。 理論をしっかりと把握した上で市販ソフトを使ってみようとおもいます。ありがとうございました。

  • gn_drive
  • ベストアンサー率22% (175/789)
回答No.3

自分で解いた微分方程式や解析式を計算したいんですよね? MATLABやMathematicaで計算できることなら自分でコーディングするのは不要でしょう。 金の問題なら、フリーソフトのScilabとかもあります。 それらでは計算できないから、研究者だから市販のコードがないので自分でコーディングするのは分かります。その際は、Fortrunより、CとかC++の方が良いと思いますよ。趣味の問題ですが。 複素数の取り扱いも簡単にできるし。 SnやCnでもMathematicaで計算できるので、先ずが市販ソフトを使ってみるべきです。

noname#81447
質問者

補足

自分の研究でモデルを構築しており、実際のデータを用いてモデルのパラメータを推計するために、非線形最適化問題を解きたいのです。 市販ソフトでできないからというよりは、自分でプログラムを組んだほうが今後研究を発展させる上でも役立つのではないかと考えています。 科学計算にはFORTRANがいいと聞いた事があるのですが、C++の方が良いという点が具体的にありましたら教えていただけないでしょうか? また、非線形最適化の本などは読んでるのですが、そこには実際にどうプログラムするのかについてはあまり書いてなく、自分の中でなかなかプログラムと結びつきません。もし良い本がありましたら教えてください。C++でもFORTRANでも結構です。 よろしくお願いします。

回答No.2

今でも数値計算・科学技術分野ではフォートランは現役です。 特に並列処理プログラミングでフォートランの右に出る言語は無いでしょう。 今後パソコンでもマルチコア化が進めばさらに有用になると私は考えてます。 修士課程は研究は新規性が問われますからMATLABなどの先人の業績に上にフォートランであなたの実績を積み上げてください。

参考URL:
http://suchix.kek.jp/~matufuru/Note/CN/Prog/MPI/mpi_tutorial.html
noname#81447
質問者

補足

ありがとうございます。 科学計算にはFORTRANがいいと聞いた事があるのですが、もう古い言語というも聞きます。 もしこれから数値計算を学ぶならfortranとC++ではどっちが良いのでしょうか(参考書の量や質も含めて)。また、それ以外でいい言語などがありましたら教えていただけるとありがたいです。

  • bodyshot
  • ベストアンサー率14% (46/326)
回答No.1

今時フォートランという選択肢はありえないです。 まずはエクセル等で計算してみてはどうでしょうか。

noname#81447
質問者

お礼

ありがとうございます。 研究室でメインにつかっているものがFORTRANだったり、 数値計算にはFORTRANがいいというのを聞いたことがあったので…。 そうですね、他の言語、C++なども考えてみようと思います。

関連するQ&A

  • 数値計算のための勉強の仕方

    私は現在大学院修士課程1年です。 とある事情で、学部の時とは異なった分野で研究をすることになり、 研究テーマを模索していたのですが、現在は数値計算を用いて研究をするという形になっています。 現在使用しているソフトはCADMAS-SURFと呼ばれるものです。 このソフトに関する文献などを読みながら、少しソフトを動かしてみているのですが、正直なところわからない箇所が多く、 手探り状態で進めている状態です。 様々な人に聞いてみたりしたのですが、このソフトを使用したことのある人が周囲にはいません。 また、私自身、学部の時にこうしたソフトを使用したことがないばかりか、物理学にもあまり精通しておりません。 現在、流体力学の本を読んだりしながら勉強はしているのですが、難しい計算式などが出てくると それがどのような状態を示しているのか頭の中でイメージできないことが多く、 用語も知らないものばかりで時間がかかってしまいがちです。 ちなみに、数値計算を使用して研究されている数少ない先輩の話では、その方も手探り状態で進めているとのことです。 また、その方からは本に書かれている基本的な理論などは理解した上で計算しないとダメだというアドバイスをいただきました。 したがいまして、私としましては、やはり地道に勉強しながら進めていくしかないのでは、と考えております。 物理学や数値計算に詳しい方、勉強・研究の進め方、おすすめの参考書についてなど、ご教授いただければ幸いです。 また、大学院にて大学の専攻と異なる分野で研究をしたことがある方、体験談などをお聞かせください。 よろしくお願い致します。

  • fortranプログラミングでの数値計算と可視化環

    現在fortran77により数値計算し、可視化する環境を探しています。素人なので、アドバイス頂ければ幸いです。 背景:matlabで既にプログラム済みファイルを、fortranで書き直したい。プログラムは数値計算をしてその結果をグラフ(2D,3D)で可視化する物。matlab環境では計算時間がかかる為、fortranで時間短縮したい。 環境:Win XPへ所有しているマイクロソフトビジュアルFortran77(Ver調査中。7年くらい前の物)をインストールして、それを使おうと考えています。 疑問:どうやって計算結果を可視化するか?ポストプロセッサーとして、gnueplotやmatlabを使用するのは可能だと思うがそれが一番効率的なのでしょうか?ビジュアルFortranには可視化ライブラリみたいな物があるのでしょうか? 不足情報あればアップいたします。初心者ですが、アドバイスを宜しくお願いします。 追伸:研究室の過去の資産の関係でFortranを考えています。多言語でのメリットもあれば教えて頂たいですが、基本古い言語使用に対する中傷「のみ」はご遠慮下さい。

  • フリーの数値計算ライブラリ

    皆さん,こんにちは。 世の中には,MKL,IMSL 等,数値計算ライブラリがいろいろあるようです。でも,有料なので個人で使うにはちょっと敷居が高いです。そこで,フリーの数値計算ライブラリを探しています。 線形代数ライブラリとしては,MTL/ITL を見つけました。その他,特殊関数,非線形方程式等まで含めたものは,まだ見つけられていません。liboctave は Windows で使うのは面倒臭そうなので,却下したいです。また,言語は C++ が希望ですが,Fortran 以外なら何でも構いません。Excel でも,XNumber や MATRIX なんていうのがあるみたいですね。 ちなみに,僕自身はこのようなライブラリを使ったことがないのですが,今後はこういったものをどんどん利用して作業を楽にしたいと思っています。 皆さんが使われている,お勧めの数値計算ライブラリを教えて下さい。よろしくお願いします。

  • 偏微分方程式の数値計算について

    偏微分方程式の解の数値計算の仕方についての質問です。 例えば、偏微分方程式の解が以下のような形だったとします。 T(x,y)=Σ(A1n*x^n+A2n*x^(-n))*cos(ny) nは変数分離定数です。A1n,A2nが積分定数です。またn=1~∞とします。 今、あるxにおけるTとyの数値計算をするとします。 つまりxを定数として扱います。 そして、上式を条件に代入して解を求めるのですが、 n=3の場合の結果が欲しい場合は、 n=1,2,3のとき連立方程式をそれぞれで解いて、 数値結果は、 (n=1の結果)+(n=2の結果)+(n=3の結果) という考え方であってますか? アドバイスをお願いします。 プログラムで数値計算をするのですがなかなかうまくいかずこまっています。

  • 行列式の計算を、パソコンで変数を変数のままで計算するには?

    複雑な行列の計算をパソコン上で行いたいのですが、行列の要素を変数のまま計算してくれるソフトや方法はありませんでしょうか? ちょっと質問の内容がわかりにくいかもしれませんが、たとえば A =[cos(a)] B = [sin(b)] とあった場合 A+B=[cos(a)+sin(b)] のような解が欲しいのです。 MATLABで計算しようとしたのですが、計算結果が数値でしか得られなかったので困っています。 よろしくおねがいします。

  • 数値計算上での対数計算について

    大学で卒研課題としてMATLABというソフトを使った電磁波の数値計算を行っています。 いま問題となっているのは、解析値X(生データ)を[dB]にするため、log_10(X)をとるのですが、この際Xの値が1.0に極めて近いとき(例えば:X=0.9997)のときの誤差が、ほかのときの値の誤差にくらべ、3桁程度大きくなってしまいます。 数値計算において対数計算がマクローリン展開を用いていることまではわかったのですが、誤差の原因についてはまったく見当がつきません。 どなたか、参考になりそうな文献、サイト等をご存知でしたら教えてください。 宜しくお願いします。

  • matlabによる非線形方程式の解法

    matlabを使って非線形方程式の解を求めようとしています。 例えばx^2-e^x=1という式です。これを解くにはどういったスクリプトを書けばよいでしょうか。

  • 高階連立常微分方程式の数値計算

    4次のルンゲクッタ法を用いた数値計算を勉強しています. 1階連立常微分方程式と高階常微分方程式は理解でき,プログラムも作成することができました. 次に高階の連立常微分方程式を解こうと思ったら,頭が混乱してしまいました. 4次のルンゲクッタ法を用いて高解連立常微分方程式を解く考え方を教えて頂ければ嬉しいです. また何か良い参考書があれば教えて頂きたいと思います. よろしくお願いします.

  • 常微分方程式の数値計算

    実験で常微分方程式の数値計算をしました y'(x)=2xy,y(0)=1.0(解はy=ex2)←eのx二乗の微分方程式できざみ幅h=0.1、区間〔0,2〕の条件で オイラー法と改良オイラー法とルンゲクッタ法を使って 表計算ソフトを使って求めよとあるのですが、 表計算で近似値のy座標とか Δt後のxの変化分K1とか求めるのですが、全然意味がわからなくて、 何かいい方法はないでしょうか?

  • 数値計算ソフト「MATLAB」について

    私は今大学生で、つい先日数値計算ソフト「MATLAB(マトラボ)」をのライセンスを購入し、さまざまなプログラムを実行しています。 しかし、当然ですが大規模なプログラムになればなるほど計算の実行時間が長くなってしまいます。 プログラムのループ文の見直しなどを行って計算の高速化を図ってみたりしましたが差は微々たるものでした。 なので、PCのスペックのほうを上げていきたいと思いました。 そこでみなさんにお聞きしたいのですが、 (1)MATLABの計算はサーバーPCとクライアントPC、どちらのスペックに依存しているのでしょうか。 (2)計算速度を速めるとしたら、どの部分の性能を一番高めるべきでしょうか。(例:CPU、メモリなど) どなたかお分かりになる方がいましたら、(1)(2)どちらか片方だけでも良いですので回答宜しくお願い致します。