私は多くの異なるモデルとシミュレーションを扱っています。古いモデルとシミュレーションのいくつかはFORTRANで書かれています。これらのモデルの一部はC++に変換されていますが、現在の傾向は、MATLAB/SIMULINKを使用してこれらのモデルを作成することです。コンピューターサイエンスの観点から、MATLAB/SIMULINKは良い解決策ではないといつも感じていました。モデルとシミュレーションを作成するためにどの言語を使用しますか、またその理由は何ですか?
6 に答える
私は常に、最良のモデリングおよびシミュレーションツール(または必要に応じてライブラリ) によって提供される言語を使用して、自分の仕事をしようとします。
そして、この質問に答えるには、実装したいモデルの種類を考慮する必要があります。連続 (ODE など)、離散 (StateChart、Petri Net など)、または組み合わせ (Simulink + StateFlow で実装できるハイブリッド モデルなど)? モデルの種類ごとにさまざまなツールがあります。
もう 1 つの重要な側面は、作業しているドメインです。Simulink には、電気工学、金融、または計算生物学用の非常に広範なライブラリがあります (ただし、それらのほとんどは追加パッケージに含まれています)。これらの分野のいずれかで作業している場合、これより優れた (つまり、完全で有効な) コンポーネント ライブラリは存在しない可能性があります。 . 同じことは、AnyLogic、Arenaなどの他の商用シミュレーション パッケージにも当てはまります。モデリングの問題によっては、オープンソースのシミュレーション ツールがいくつかある場合もあります。
最後に、特定のプログラミング言語を別のプログラミング言語よりも好む場合があり、追加の要件がある場合があります。
- 最適化 (モデル パラメーターの)
- 検証
- 出力分析 (統計、プロット、統計検定)
- 並列および分散シミュレーションのサポート
- モデルチェック
- ...
そのため、私は現在、よく知られている利点を備えたJavaで作業しています-かなり高速、マルチスレッドの優れたサポート、比較的使いやすいなど. 1レベルの抽象化:-)
また、多くのレガシーコードを使用しており、そのほとんどはFortranで使用されています。私はFortranを使用してもかまいません。最新のコンパイラはすべて、古くてばかげた6文字の制限を超える変数名を許可しています。また、Fortran 95では、既存のコードベースへの変更が有益であると思われる場合は、OOPを実行することもできます。
また、Fortranには非常に優れたコードエディタがありますが、より特殊なスクリプト言語の場合は必ずしもそうとは限りません。
C ++には、メモリを考慮するという大きな欠点があります。私はC/C ++を20年以上プログラミングしていますが、オブジェクトを削除してデストラクタを適切に入力することをまだ忘れています。
最後に、Windowsを使用している場合、Fortranを管理対象環境に移動する場合は、Fortran.NETコンパイラー(Lahey-Fujitsuからだと思いますか?)があります。
幸運を!
もちろんSIMULA!! :-)
私が MATLAB から得たものは、アルゴリズムのプロトタイプをすばやく作成できることです。データをプロットし、組み込みの統計関数を使用することで、データの感触をつかむことができます。何か新しいことを試すとき、私は最初の結果を得るために手早く汚いことをしてから、戻ってクリーンアップして結果を改善することができます。コンパイル済み言語では、シミュレーションを実行するためだけにやらなければならないことがたくさんあります。MATLAB を使用すると、実際の問題について考える時間が増え、コンパイル、リンク、メモリ管理などについて考える時間が減ります。
ただし、MATLAB では解決できない問題が数多くあります。大規模なデータ セットの場合、ユーザー定義のデータ構造を持つコンパイル済み言語がほぼ確実に必要になります。
素粒子物理学は C++ と python に移行しています。これは普遍的なものではなく、 ROOTの遍在性がなければ、おそらく近いものではないでしょう。
Root が cint を使用するということは、新しいアイデアに取り掛かるときにメモリ管理に煩わされる必要があることを意味します。コンパイルを実行する能力により速度が向上し、モードを混在させる機能は非常に役立ちます。また、python およびその他のバインディングRAD 言語は優れた柔軟性を備えています。
非常に本当の意味で、これはrolandのポイントの支持に帰着します。
fortran(c、c ++)をmatlabとリンクするためにs-funcuinブロックを使用できます。