物理学で自然現象をパソコンでシミュレーションするとき、プログラム言語はどのようなものを使うのでしょうか?よく知られたC言語やJava等は使わないのでしょうか?専門的なプログラム言語がいろいろあるのでしょうか?
今後パソコンで物理シミュレーションを行うことになったとき、プログラムに関してはどのくらいの知識があればいいのでしょうか?
基本的な本を見るとBasicやFortranを使ってシミュレーションの説明をしているものがありますが、このような基本的な言語も使えるようになったほうがよいのでしょうか?
C言語やJava、VBなど一般的によく知られたプログラミング言語も覚えたほうがよいのでしょうか?
No.1
- 回答日時:
大学の卒業研究で物理シミュレーションを行っていました。
物理シミュレーションには大量の数値演算を行う必要があります。これを高速にかつ簡単に行うのにはやはりFORTRANが最適です。Basicや(特にインタプリタ)Javaなどでは膨大な演算処理をするのには遅すぎますし、Cでは複雑な演算処理を行うのは難しいです。
ちなみにプログラミングの能力はそれほど問われないはずです。それよりも数学や物理学に対する知識が必要でしょう。
この回答への補足
回答ありがとうございます。
数学や物理に関する知識のほうが大事なのですね。
勉強します。
C言語とFortran、両方覚えることに越したことはないと思うのですが、やはりFortranを優先的に覚えたほうが良いでしょうか?
No.2
- 回答日時:
・数値の表現形式や桁落ちとか丸め誤差
・Newton法やRunge-Kutta法など、効率的な計算法
――といった数値計算の基礎が、まず必要だと思います。
上記が既に習得済みだとした上で、プログラミング言語について言えば、加減乗除の計算と基本的な入出力ができれば、何でも良いです。結果を可視化(visualize)したり、グリッドで並列計算させたいと言った場合は、別種のプログラミング知識が必要となりますが。
回答ありがとうございました。
数値計算の基礎がまず必要なんですね。
本を買ったり、図書館に行ったりして勉強します!
ありがとうございました。
No.3
- 回答日時:
自然現象のシミュレーションはいわゆる技術計算と可視化の2つの組み合わせで構成されていると考えていいと思います。
前者には、数値計算と数値解析の基本的知識が必要となります。具体的には、No.2の方が最初に書かれている事柄です。常微分方程式だけでなく、積分や変微分も扱う可能性がありますから、その場合は、それらに対応する計算法も必要です。他には乱数に関する知識が要求される可能性が大きいです。言語は何でもいいのですが、やはりFORTRANが最適です。ただし、もし演算速度をあまり問わない程度の規模の問題で、普通のパソコンレベルで処理するのであれば、CかC++かJavaで書けばいいでしょう。可視化の部分は、おそらくJavaを使うのが楽です。
もし、質問者さんがプログラミングの初学者で、手始めに何かひとつ言語を選んで、物理シミュレーションを学ぶのであれば、個人的にはJavaで取り掛かることをお勧めします。
回答ありがとうございます。
私は技術計算のほうに興味があるので、数学の知識がまず必要なんですね。
勉強します。ありがとうございました。
No.4
- 回答日時:
その出力結果も考慮するといいかもしれません。
出力結果が数値の表であったり、単純なグラフでいいならあまり言語は問わないと思います。
(問題となるのは数値精度でしょうか。小数点を含む最大桁数をチェックしてください)
しかし、その出力をアニメーションやCGで出力したいとなると、そちらの知識が必要になるかもしれません。
Fortranはグラフィカルな表現には弱いので、それだけで全てを行おうとすると不利です。
手法としては
・Fortranなどで出力データ(数値のみ)を作成し、グラフィック出力を別言語やツールで行う
・最初からグラフィック出力も出来る言語で行う
(ただ、シミュレーション計算と画像処理で倍の勉強必要な事は変わらない)
こんな感じになると思います。
あとはサンプルとなる資料にも左右されます。
物理シミュレーションと言っても、全ての計算を自分で考えるんではなく、部分的に他の専門書のプログラムを借りる事も多いと思います。
そういう資料が多い言語を選ぶと言うのも手です。
実際はその研究室等にある機材で何の言語を使っているか?という方が重要だったりしますが^^
回答ありがとうございます。
僕が興味があるのは、アニメーションやCGというより技術計算のほうなので、Fortanあたりを覚えるのがよさそうですね。
ありがとうございました。
No.5
- 回答日時:
覚えて損はない言語はFortranとC/C++)です。
最近ではC/C++の演算ライブラリも充実してきているので、これで書くとWindowsのグラフィカルも利用しやすいです。C++であれば複素数演算なども行えますから。
ただ膨大な計算を行おうとするとFortranを使いたくなります。特に処理量が多いことが予想されて、パソコンでは手に余る計算になりそうな場合ははじめからFortranで記述して、高速なコンピュータ(スパコンとか大型計算機)で計算させるようなこともしたりします。
ただ最近はグリッドコンピューティングとか出てきているので、これ以外にもPerl, JAVA などは覚えた方がよいかもしれません。OSはWindowsだげてなくLinuxも忘れずに。
この回答への補足
回答ありがとうございます。
Fortranは古い言語というイメージがありますが、いまだに現役なんですね。
みなさんのコメントを総合しますと、Fortran、C、Javaをまず覚えたほうがいいようですね。
Linuxは、使えるようになるとどんなメリットがあるのでしょうか?
いずれにしても、覚える言語はかなりありますね。
かなり気合を入れて勉強するとして、ひととおり使えるようになるには時間がかかるでしょうか?1年くらいかかるのでしょうか?
No.6
- 回答日時:
>Linuxは、使えるようになるとどんなメリットがあるのでしょうか?
グリッドコンピューティングなどをするときには使うことがあるし、何よりOSが軽く、安定していて、FortranもC/C++等の言語も簡単に手に入るため、安価(というよりほとんどフリー)に環境を整えられます。
更に言うとLinux上で開発されたさまざまなツールが手に入るので、自分で一から開発しなくてもよく効率がよいです。
>ひととおり使えるようになるには時間がかかるでしょうか?1年くらいかかるのでしょうか?
基本を覚えるのはそんなに難しくありません。どちらかというと数値演算に必要な数学を覚える/理解する方が大変です。より早く計算するために数学の知恵を沢山盛り込んでいるのが数値演算ですから。
なので、言語は必要に応じて覚えればよい程度です。
それ以上に数学ですね。
一度 Numerical Recipes In C という本を読んでみて下さい。数値演算の基礎が詰まった本です。
丁寧な回答ありがとうございます。
Linuxは使えるようになるには大変そうですが、是非とも覚えたいものです。
数値演算の知識を覚えるのが大切ということが良く分かりました。文献も紹介してくださってありがとうございました。さっそく勉強してみます。
No.7
- 回答日時:
他のかたとは違う答えになりますが。
まずは、自然現象をシミュレーションと言ってもいろいろですから、答えもいろいろになります。あと、radioswimmerさんがどのような環境にいるのかでも変わります。
私の場合を申します。殆どのシミュレーションは、mathematicaという数式処理ソフトを使って行っています。これはグラフィクス出力もできます。FortranやCなら何日も要するプログラミングもこれなら数時間とか数10分でできます。自分で買うには高いのがつらいですが、大学等であれば使える環境ではないでしょうか。他にも数式処理ソフトは例えばMATLABとかいくつかあります。詳しい先達が居るか居ないかとかで選べば良いと思います。
mathematicaでは間に合わない巨大な数値計算を要するシミュレーションの場合は、やむなくC言語でプログラミングしています。でも苦痛です。特に結果をグラフィクス等でビジュアルに出す場合はつらいですので、これまたしょうがないから、Cプログラムで処理して得た結果の数値ファイルをmathematicaにimportしてグラフィクスにしています。
目的によっては専用のシミュレータが既に用意されています。例えば電子回路ならSPICEがあります。パソコン用のpSPICEは無償のものもあります。私はそれを使っています。数式とかプログラムとか全く要りません。
電子回路ではなくても、自然現象の微分方程式表現は電気回路と同じ微分方程式になるということで、自然現象を電気現象に置き換えてSPICEでシミュレーションしている人もいると聞いています。
私はFortranは使いません。プログラミングとしてはCで間に合うと思っています。Fortranも使えた方が良いに決まっていますが、道具をいろいろ学習する時間が惜しいのです。
ただし、特定用途に開発されたシミュレータにはFortranの知識を要するものもあります。その種のシミュレータが存在する分野のシミュレーションを行うなら、そして自分で一からシミュレータを開発するのでないのなら、Fortranは必須となるわけです。
さまざまなアドバイスありがとうございます。
非常に参考になりました。
今後、どのようなシミュレーションを行うか、自分なりに明確にして、勉強していきたいと思っています。
ありがとうございました。
No.8ベストアンサー
- 回答日時:
いくつかのケースがあります.
どなたかもすでにご回答のとおり,
「シミュレーション記述言語」というようなものが
いくつかありまして,
mathematica
freefem
その他,有料のfemソフトとか
流体解析ソフト
に入力するデータを作って入れる
ということになります.
それを一種の言語を用いたプログラミングだといえばそうでしょう.
別のケースとして,Cなどのプログラム言語で,
femソフトを作る場合もあります.
そのときに,どういう手順をたどるかというと,
物理現象を,マトリックス形式にする式展開の載っている本を購入します.
その本は,ハンドブックだったりしますが,
そこに載っているマトリックス形式の式を
プログラムします.
そのときには,プログラム言語は何でもいいと思います.
一部で,Fortranや,BASICというのがありますが,
これらは,Fortranについて言えば,昔ながらのものであり,これを用いたプログラムがたくさんあるという理由です.BASICも同様です.
もしも新たに,プログラムについて覚えるのならば,
CかC++でしょうね.
これからは,プログラマーは,適当に書いて,
最適化コンパイラが汗をしぼって「高速で効率的な実行形式を生成する」時代です.
私も,言語はBASICから入り,大学時代はFortran
を主に使ってました.シミュレーションをプログラムするレベルなら,どれも大差ありません.
Cが一番小回りが利いていいと思いますね.
アドバイスありがとうございます。
大変参考になりました。
これからは、自分がどういう研究をするのか明確にして、しっかり勉強していきたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- 日本語 「~人」と「~名」の使い分け 2 2022/06/02 11:59
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- その他(プログラミング・Web制作) ロボットの作り方を教えて下さい! なにも知らない素人です。 全て自作する場合、どうすればよいでしょう 6 2022/12/18 01:25
- 物理学 【 理系科目の選択 】 現在、高一の者です。 文系に興味がなく理系に進もうと思うのですが、物理と生物 7 2022/10/06 22:53
- IT・エンジニアリング バックエンドエンジニアに転職 2 2022/04/07 00:51
- IT・エンジニアリング FORTRAN、COBOL、C、Java、C++とか誰が作ったのですか?言語習い使いまた出て、キリが 4 2023/05/06 23:11
- Windows 8 win8 "ベータ ワールドワイド言語サポートで Unicode UTF-8 を使用"を出したい 2 2023/05/23 19:57
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
楽しくて最高のプログラミング...
-
rpa化する言語としてら何があり...
-
Pythonって何を意識した言語な...
-
最新のプログラム言語を学ぶに...
-
Int('1234') で、strをかんたん...
-
質問失礼します。 プログラム言...
-
プログラミング言語の制作方法...
-
C言語とhtmlの違いを どな...
-
C++における継続行
-
UNITY Float型の接尾辞fって
-
Delphiに詳しい方助けてくださ...
-
プログラミング言語について
-
CとC++は別物なんですか?
-
VBSでDim、Private、Publicの違い
-
F#って何??
-
チューリング完全とは何か?
-
accessという言語らしいのですが
-
引用符と二重引用符
-
初めてのプログラミング言語は...
-
今後必要とされる開発言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
楽しくて最高のプログラミング...
-
Pythonって何を意識した言語な...
-
C言語とhtmlの違いを どな...
-
プログラムに書かれる"%"記号の...
-
COBOLでのNOT = の AND条件
-
C++ ってなんて読む?
-
質問失礼します。 プログラム言...
-
プログラミング言語の制作方法...
-
UNITY Float型の接尾辞fって
-
C言語って古いですか?
-
Int('1234') で、strをかんたん...
-
COBOLで文字タイプを数字...
-
TO_CHARで小数点以下がある場合...
-
最新のプログラム言語を学ぶに...
-
C++における継続行
-
vbaとc言語の関連性について
-
VBScriptで引数を省略したい場合
-
VBSでDim、Private、Publicの違い
-
HTMLとC++で、どんなホームペー...
おすすめ情報