##知りたいこと
流体計算(有限差分法、有限要素法、有限体積法)を行う上で、C言語を基礎にした上で「C++言語」も知っておいたほうが良いのでしょうか。
また、流体計算におけるC++のメリット(c言語には出来ないこと)なども教えて頂けると幸いです。
もしくはアルゴリズムなどを勉強することを優先すべきでしょうか。
##自己紹介
大学院で流体計算をc言語で行っている者です。
c言語と流体計算はまだ始めたばかりで、どちらも初心者です。
流体計算の学習に関しては、「有限差分法」を用いて偏微分方程式の計算をしています。
(今後、有限要素法や有限体積法を学習するかは分かりません。)
c言語学習に関しては、書籍「苦しんで覚えるc言語」を2周ほどやりこみ、書籍の内容は理解しました。
今、少し時間があるので、もしc言語よりも記述が簡単で計算速度が速くなるなどのメリットがあれば、c++言語の学習を始めようと思っています。
今後c言語以外の言語(python,R,MATLABなど)でプログラムを組むかは未定です。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答7件
0
ベストアンサー
こんにちは。
超高速な流体計算アルゴリズムの研究をされている場合はC言語の方が向いていると思います。
C++は実行速度をほとんど落とさずに生産性を上げる言語です。その代償は学習コストです。
ですので、僅かな速度低下が許せないような分野ではC言語の方が言語の学習に時間をさかないで良い分、向いていると思います。
とはいえ、C++はC言語のほぼアッパーコンパチですから、ギチギチに最適化が必要な僅かな部分だけピュアなC言語やアセンブラで記述し、僅かな速度低下が許せる部分(恐らく大半の部分)はC++で書くとメンテナンスしやすく、かつ、高速なプログラムを書けると思います。
その分、学習はたいへんですが、何も全てのC++の機能を使う必要はないです。例えば、文字列を使うケースは意外に多いと思いますが、そこにギチギチの高速化は通常は不要でしょう。そのような部分にstd::stringを使うと開発時間を結構短縮できます。その短縮できた時間を高速化のために用いると良いと思います。
投稿2019/01/13 15:09
総合スコア23274
0
遥か昔のことを思い出します.
学生のころ,流体じゃなくて剛体の物理シミュでしたが
まさにCしか知らない状態でC++の要素をつまみ食いしながら実装しました.
(「Better C」って呼ばれる状態かな?)
で,「あえてCという枠組みの中で書く」必要がないならば,「まずはCだけで実装…」みたいなステップは不要に思います.
実装に先立って,とりあえずちょっとだけC++のさわりを学んでみればよいかと.
「C++の学習コスト」的な話が問題にならない程度に覗き見するだけでも
使える要素がいくつか見つかると思います.
例えば,構造体にコンストラクタ書けるだけでも便利.
std::vectorやらlistやらの恩恵を受けるだけでも「全部C」とは比較にならないほど便利.
投稿2019/01/14 02:44
総合スコア12151
0
今、少し時間があるので、もしc言語よりも記述が簡単で計算速度が速くなるなどのメリットがあれば、c++言語の学習を始めようと思っています。
数値計算という条件では、C++にするメリットは「演算子オーバーロード」(たとえば、複素数どうしの演算も+
など演算子を使える)が可能なことぐらいではないかと思います。
そして、本格的に演算を行うとなれば専門のライブラリの出番ですので、自分が書くコードは入出力の調整と、ライブラリの演算ルーチンを呼び出しての組み合わせ、という感じとなって、演算速度や使用する言語はライブラリ次第、ということになります(CPUやGPUのメーカーなどが、極限までチューニングしたライブラリを用意していますので、一般人には太刀打ちできない性能が出ます)。「Pythonで機械学習」が成り立つのも、コア部分のライブラリが超高速に動いてこそです。
投稿2019/01/13 14:49
総合スコア146536
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
あえてC++にしないでCにする理由は、よほど特殊なケースを除いてないでしょう。
でも、CにしろC++にしろそれなりに大変です。
とにかく計算を速くしたい、という要望があればコンパイル言語(C, C++, あと一応Fortranも選択肢に入るか……)でゴリゴリ書いていくしかありません。
それより1桁くらいは遅くて良いのでさっさと実装して肝心の研究にリソースを割きたい、という事情であればpythonもおすすめです。numpyなどのライブラリを使えば相応に高速に実行されます。なんならcupyを使うとほぼ同じ記述でGPGPUもいけます(使うところをよく考えないと速くならないかもしれませんが)。
コンパイル言語で書いて10秒で回るプログラムはスクリプトで書けば100秒くらいで回るはずで、それくらいなら待てば良いでしょう。でも1時間が10時間になっちゃったら、ちょっと困る訳で(寝てる間に回すという手もなくはないが)、そのへんをよく考えて選ぶ必要があります。
RとMATLABも原理的にはpythonと同等のことができますが、言語やライブラリの出来不出来と流行り具合(情報の多さに影響する)を考えると、Rは微妙、MATLABはいろいろ厳しいというポジションになります。昨今は科学技術計算をスクリプトから叩こうと思ったら、たいていはpython使うことになると思います。
投稿2019/01/14 12:03
総合スコア30939
0
高度な科学技術計算ではC言語は厳しいと思います。
というのも、C言語には大量のデータを安全に取り扱う仕組みがありません。メモリの取り扱いをちょっと誤ると簡単に暴走したりフリーズしたりします。なんかよく判らないけど結果がおかしい、なんてことも起こり得ます。
メモリの取り扱いの不備による不具合は、原因究明がとても困難なケースが多いです。そんなことに無駄に時間を使ってしまっては、研究の妨げになるのではないでしょうか。
PythonはC言語に比べると処理速度は桁違いに遅いですが、それでも研究分野で広く使われている要因の一つは、大量のデータを安全に(しかも直感的に)扱う仕組みが提供されているところにあると思います。いくら処理速度が速くても余計なところに時間を取られては意味ないですからね。
C++はどうかというと、C言語の弱点を見事に克服しています。大量のデータを安全かつ直感的に扱う仕組みが提供されていますし、例外処理により障害耐性を向上させることもできます。しかも処理速度はほぼC言語並みです。場合によってはC言語を上回ることもあります。
その代わり、習得難易度はとても高いです。
投稿2019/01/14 01:41
総合スコア5944
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
話が漠然としており、適切な回答は得られないと思います。
流体解析に詳しくありませんが、一般論的にアプリケートの観点から言語を選ぶならば、その分野で有効なライブラリやAPIを持った言語が有力です。要するに**「周りの人に合わせることが無難」**程度の回答しかできません。
投稿2019/01/13 14:51
総合スコア4853
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/14 01:25
2019/01/14 07:45
2019/01/14 11:44