- ベストアンサー
物理シミュレーションをする時、どのくらいプログラミングの知識があればいいのか?
物理学で自然現象をパソコンでシミュレーションするとき、プログラム言語はどのようなものを使うのでしょうか?よく知られたC言語やJava等は使わないのでしょうか?専門的なプログラム言語がいろいろあるのでしょうか? 今後パソコンで物理シミュレーションを行うことになったとき、プログラムに関してはどのくらいの知識があればいいのでしょうか? 基本的な本を見るとBasicやFortranを使ってシミュレーションの説明をしているものがありますが、このような基本的な言語も使えるようになったほうがよいのでしょうか? C言語やJava、VBなど一般的によく知られたプログラミング言語も覚えたほうがよいのでしょうか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
いくつかのケースがあります. どなたかもすでにご回答のとおり, 「シミュレーション記述言語」というようなものが いくつかありまして, mathematica freefem その他,有料のfemソフトとか 流体解析ソフト に入力するデータを作って入れる ということになります. それを一種の言語を用いたプログラミングだといえばそうでしょう. 別のケースとして,Cなどのプログラム言語で, femソフトを作る場合もあります. そのときに,どういう手順をたどるかというと, 物理現象を,マトリックス形式にする式展開の載っている本を購入します. その本は,ハンドブックだったりしますが, そこに載っているマトリックス形式の式を プログラムします. そのときには,プログラム言語は何でもいいと思います. 一部で,Fortranや,BASICというのがありますが, これらは,Fortranについて言えば,昔ながらのものであり,これを用いたプログラムがたくさんあるという理由です.BASICも同様です. もしも新たに,プログラムについて覚えるのならば, CかC++でしょうね. これからは,プログラマーは,適当に書いて, 最適化コンパイラが汗をしぼって「高速で効率的な実行形式を生成する」時代です. 私も,言語はBASICから入り,大学時代はFortran を主に使ってました.シミュレーションをプログラムするレベルなら,どれも大差ありません. Cが一番小回りが利いていいと思いますね.
その他の回答 (7)
- imoriimori
- ベストアンサー率54% (309/570)
他のかたとは違う答えになりますが。 まずは、自然現象をシミュレーションと言ってもいろいろですから、答えもいろいろになります。あと、radioswimmerさんがどのような環境にいるのかでも変わります。 私の場合を申します。殆どのシミュレーションは、mathematicaという数式処理ソフトを使って行っています。これはグラフィクス出力もできます。FortranやCなら何日も要するプログラミングもこれなら数時間とか数10分でできます。自分で買うには高いのがつらいですが、大学等であれば使える環境ではないでしょうか。他にも数式処理ソフトは例えばMATLABとかいくつかあります。詳しい先達が居るか居ないかとかで選べば良いと思います。 mathematicaでは間に合わない巨大な数値計算を要するシミュレーションの場合は、やむなくC言語でプログラミングしています。でも苦痛です。特に結果をグラフィクス等でビジュアルに出す場合はつらいですので、これまたしょうがないから、Cプログラムで処理して得た結果の数値ファイルをmathematicaにimportしてグラフィクスにしています。 目的によっては専用のシミュレータが既に用意されています。例えば電子回路ならSPICEがあります。パソコン用のpSPICEは無償のものもあります。私はそれを使っています。数式とかプログラムとか全く要りません。 電子回路ではなくても、自然現象の微分方程式表現は電気回路と同じ微分方程式になるということで、自然現象を電気現象に置き換えてSPICEでシミュレーションしている人もいると聞いています。 私はFortranは使いません。プログラミングとしてはCで間に合うと思っています。Fortranも使えた方が良いに決まっていますが、道具をいろいろ学習する時間が惜しいのです。 ただし、特定用途に開発されたシミュレータにはFortranの知識を要するものもあります。その種のシミュレータが存在する分野のシミュレーションを行うなら、そして自分で一からシミュレータを開発するのでないのなら、Fortranは必須となるわけです。
お礼
さまざまなアドバイスありがとうございます。 非常に参考になりました。 今後、どのようなシミュレーションを行うか、自分なりに明確にして、勉強していきたいと思っています。 ありがとうございました。
>Linuxは、使えるようになるとどんなメリットがあるのでしょうか? グリッドコンピューティングなどをするときには使うことがあるし、何よりOSが軽く、安定していて、FortranもC/C++等の言語も簡単に手に入るため、安価(というよりほとんどフリー)に環境を整えられます。 更に言うとLinux上で開発されたさまざまなツールが手に入るので、自分で一から開発しなくてもよく効率がよいです。 >ひととおり使えるようになるには時間がかかるでしょうか?1年くらいかかるのでしょうか? 基本を覚えるのはそんなに難しくありません。どちらかというと数値演算に必要な数学を覚える/理解する方が大変です。より早く計算するために数学の知恵を沢山盛り込んでいるのが数値演算ですから。 なので、言語は必要に応じて覚えればよい程度です。 それ以上に数学ですね。 一度 Numerical Recipes In C という本を読んでみて下さい。数値演算の基礎が詰まった本です。
お礼
丁寧な回答ありがとうございます。 Linuxは使えるようになるには大変そうですが、是非とも覚えたいものです。 数値演算の知識を覚えるのが大切ということが良く分かりました。文献も紹介してくださってありがとうございました。さっそく勉強してみます。
覚えて損はない言語はFortranとC/C++)です。 最近ではC/C++の演算ライブラリも充実してきているので、これで書くとWindowsのグラフィカルも利用しやすいです。C++であれば複素数演算なども行えますから。 ただ膨大な計算を行おうとするとFortranを使いたくなります。特に処理量が多いことが予想されて、パソコンでは手に余る計算になりそうな場合ははじめからFortranで記述して、高速なコンピュータ(スパコンとか大型計算機)で計算させるようなこともしたりします。 ただ最近はグリッドコンピューティングとか出てきているので、これ以外にもPerl, JAVA などは覚えた方がよいかもしれません。OSはWindowsだげてなくLinuxも忘れずに。
補足
回答ありがとうございます。 Fortranは古い言語というイメージがありますが、いまだに現役なんですね。 みなさんのコメントを総合しますと、Fortran、C、Javaをまず覚えたほうがいいようですね。 Linuxは、使えるようになるとどんなメリットがあるのでしょうか? いずれにしても、覚える言語はかなりありますね。 かなり気合を入れて勉強するとして、ひととおり使えるようになるには時間がかかるでしょうか?1年くらいかかるのでしょうか?
- heinell
- ベストアンサー率35% (420/1172)
その出力結果も考慮するといいかもしれません。 出力結果が数値の表であったり、単純なグラフでいいならあまり言語は問わないと思います。 (問題となるのは数値精度でしょうか。小数点を含む最大桁数をチェックしてください) しかし、その出力をアニメーションやCGで出力したいとなると、そちらの知識が必要になるかもしれません。 Fortranはグラフィカルな表現には弱いので、それだけで全てを行おうとすると不利です。 手法としては ・Fortranなどで出力データ(数値のみ)を作成し、グラフィック出力を別言語やツールで行う ・最初からグラフィック出力も出来る言語で行う (ただ、シミュレーション計算と画像処理で倍の勉強必要な事は変わらない) こんな感じになると思います。 あとはサンプルとなる資料にも左右されます。 物理シミュレーションと言っても、全ての計算を自分で考えるんではなく、部分的に他の専門書のプログラムを借りる事も多いと思います。 そういう資料が多い言語を選ぶと言うのも手です。 実際はその研究室等にある機材で何の言語を使っているか?という方が重要だったりしますが^^
お礼
回答ありがとうございます。 僕が興味があるのは、アニメーションやCGというより技術計算のほうなので、Fortanあたりを覚えるのがよさそうですね。 ありがとうございました。
- Ideasforlife
- ベストアンサー率40% (63/155)
自然現象のシミュレーションはいわゆる技術計算と可視化の2つの組み合わせで構成されていると考えていいと思います。前者には、数値計算と数値解析の基本的知識が必要となります。具体的には、No.2の方が最初に書かれている事柄です。常微分方程式だけでなく、積分や変微分も扱う可能性がありますから、その場合は、それらに対応する計算法も必要です。他には乱数に関する知識が要求される可能性が大きいです。 言語は何でもいいのですが、やはりFORTRANが最適です。ただし、もし演算速度をあまり問わない程度の規模の問題で、普通のパソコンレベルで処理するのであれば、CかC++かJavaで書けばいいでしょう。可視化の部分は、おそらくJavaを使うのが楽です。 もし、質問者さんがプログラミングの初学者で、手始めに何かひとつ言語を選んで、物理シミュレーションを学ぶのであれば、個人的にはJavaで取り掛かることをお勧めします。
お礼
回答ありがとうございます。 私は技術計算のほうに興味があるので、数学の知識がまず必要なんですね。 勉強します。ありがとうございました。
- osamuy
- ベストアンサー率42% (1231/2878)
・数値の表現形式や桁落ちとか丸め誤差 ・Newton法やRunge-Kutta法など、効率的な計算法 ――といった数値計算の基礎が、まず必要だと思います。 上記が既に習得済みだとした上で、プログラミング言語について言えば、加減乗除の計算と基本的な入出力ができれば、何でも良いです。結果を可視化(visualize)したり、グリッドで並列計算させたいと言った場合は、別種のプログラミング知識が必要となりますが。
お礼
回答ありがとうございました。 数値計算の基礎がまず必要なんですね。 本を買ったり、図書館に行ったりして勉強します! ありがとうございました。
- yosi_yosi
- ベストアンサー率35% (165/468)
大学の卒業研究で物理シミュレーションを行っていました。 物理シミュレーションには大量の数値演算を行う必要があります。これを高速にかつ簡単に行うのにはやはりFORTRANが最適です。Basicや(特にインタプリタ)Javaなどでは膨大な演算処理をするのには遅すぎますし、Cでは複雑な演算処理を行うのは難しいです。 ちなみにプログラミングの能力はそれほど問われないはずです。それよりも数学や物理学に対する知識が必要でしょう。
補足
回答ありがとうございます。 数学や物理に関する知識のほうが大事なのですね。 勉強します。 C言語とFortran、両方覚えることに越したことはないと思うのですが、やはりFortranを優先的に覚えたほうが良いでしょうか?
お礼
アドバイスありがとうございます。 大変参考になりました。 これからは、自分がどういう研究をするのか明確にして、しっかり勉強していきたいと思います。 ありがとうございました。