私はmatlabの熱心なユーザーです。これは主に、これが私が最初に学んだことであり、切り替えるのに十分な大きな違いがある問題に遭遇していないためです。私は数値最適化/線形代数から来ました。そこでは、数百万の自由度で最適化と固有値の計算を実行しました。最近、私はランダム性の領域に入りました。そこでは、私はもともと私が変えざるを得ないという印象を受けていました。しかし、コードを最適化し、乱数ジェネレーターへのシードを注意深く初期化した後、私はほぼ同時に同時代の人たちと同じモンテカルロタスクを実行することができます。私の理解では、基本レベルの「if」ステートメントなどは、matlabでは大幅に遅くなります。ただし、ベクトル化できる各ループ内に重要な計算がある場合、I ' m確信していないCの方が良いでしょう。そして、とにかく、私の上限は他のどの専門家よりも劣っていないという意味で、matlabはうまく機能しているようです(そして多くの場合、それ以上のようです)。ささいなおもちゃの言語としてずっと前にmatlabを書き留めてきた、ここのプロCの人々からたくさんの反応を得るだろうと私は感じています。私はプロの研究者であり、MATLABは最高レベルの計算集約型の数理計画法で競争力があると主張しています。私が間違っている ?C / FORTRANなどの低水準言語への変更を検討する必要がありますか?なぜまたはなぜそうではないのですか?私のような人はいますか?どうもありがとう!乾杯 ささいなおもちゃの言語としてずっと前にmatlabを書き留めてきた、ここのプロCの人々からたくさんの反応を得るだろうと私は感じています。私はプロの研究者であり、MATLABは最高レベルの計算集約型の数理計画法で競争力があると主張しています。私が間違っている ?C / FORTRANなどの低水準言語への変更を検討する必要がありますか?なぜまたはなぜそうではないのですか?私のような人はいますか?どうもありがとう!乾杯 ささいなおもちゃの言語としてずっと前にmatlabを書き留めてきた、ここのプロCの人々からたくさんの反応を得るだろうと私は感じています。私はプロの研究者であり、MATLABは最高レベルの計算集約型の数理計画法で競争力があると主張しています。私が間違っている ?C / FORTRANなどの低水準言語への変更を検討する必要がありますか?なぜまたはなぜそうではないのですか?私のような人はいますか?どうもありがとう!乾杯
8 に答える
私はプロの研究地球物理学者のチームと協力していますが、私自身は数値ソフトウェア エンジニアです。あなたの仕事が数値数学であれば、Matlab は非常に適していると思います。特に、すでにその使用に熟練しているためです。
C や Fortran を習得すれば、より高速なプログラムを作成できるかもしれませんが、Matlab では数値計算ルーチンの多くに同じ BLAS (など) ライブラリを使用しているため、期待するほど高速ではないかもしれません。 C または Fortran。しかし、私の仕事の経験から、私の同僚は、より速いプログラムを書くことよりも、より速くプログラムを書く能力がはるかに重要であることに気づきました. 彼らは多くのアイデアを生み出しますが、熟考すると後で拒否します。Matlab が C や Fortran に加えて提供する追加の開発速度は、サイクル全体 (通常は結果の視覚化を含む) をはるかに迅速に実行し、より頻繁に実行することを意味します。
(余談ですが、私が得る仕事の 1 つは、会社の大規模なクラスターで実行するために、拒否されていない Matlab コードの一部を Fortran プログラムに変換することです。しかし、最初の研究が完了し、それらを本番環境にデプロイしたいと考えています。)
また、Matlab には Parallel Compute Toolbox を介した優れた並列計算機能 (余裕があれば) があることも指摘しておきます。これは、問題が大きくなり、コアの一部を十分に活用していないことに気付いたときにおそらく興味深いものになるでしょう。最新のリリースでは、GPU コンピューティングとの統合さえあります。
一言で言えば、Matlab を使用し続けることで、新しいツールセットとの格闘に注意をそらすことなく、数学の研究に集中できるようになることをお勧めします。特に、Matlab が予想されるニーズに不十分であることを示唆していないためです。
工学分野で学界と産業界を行き来する者として言えば、私が Matlab を使わなくなった唯一の理由はコストです。あなたとあなたがコードを提供したいすべての人が Matlab ライセンスを持っている場合、切り替える理由はありません。
コードの一部を最適化する必要がある場合は、それらの部分だけを低レベル言語で書き直して、Matlab プログラムから呼び出すことができます。私の意見では、パフォーマンス上の理由で言語を切り替えることは、時期尚早の最適化のケースです。反復プロセスで計算集約型の問題を解決します。
- 最初に、最も迅速かつ簡単な方法でソリューションをまとめます。これは、あなたの場合、最もよく知っている言語を使用することを意味します。
- プロファイラーを使用して限られたデータ セットで実行し、ボトルネックがどこにあるかを把握します。
- 次のいずれかの方法を使用して、最悪のボトルネックを修正します。a) アルゴリズムを変更する、b) 現在の開発環境の機能を使用して最適化する、c) その特定の問題に対してより高速に実行されるコードにコードを書き直す。
- 実行時間/開発時間の方程式が快適なしきい値に達するまで (または、大学院生の場合は、スーパーバイザーが血まみれのものをいじるのをやめて、もう実行するように叫ぶまで) 2. に戻ります。 )。
言い換えれば、問題が発生するまでパフォーマンスについて強調しないでください。特に、自分で使用するコードを作成している場合はそうです。
私はMatlabよりもC++/ Javaプログラマーですが、Matlabを使用したことがありますが、数学の研究にはMatlabがかなり適していると思います。研究は多くの実験を伴うものであり、C++は実験を行うための悲惨な言語です。Matlabを使用すると、物事をすばやくテストし、機能するものと機能しないものを見つけて、先に進むことが非常に簡単になります。Matlabのバージョンが遅すぎると仮定して、何をしたいのかがわかったら、いつでも別の言語でソリューションをコーディングできます(私が見た限られた量から、そうである場合もあればそうでない場合もあります)。
結論:Matlabをすべてに使用したくない場合もありますが(「ハンマーだけの場合、すべてが釘のように見える」というフレーズが思い浮かびます)、数学研究の特定のタスクには確かに適した言語です。
数学者が持ついくつかのニーズに最適なソフトウェア Mathematica も検討します
c は汎用言語であり、matlab は数学用に設計されているため、matlab は問題ないと思います。
Matlab は次の点で優れています。
- 高レベルの行列演算 (A*B を計算するだけで、A.multiply(B) や C++/Java 型の構文を呼び出す必要はありません)
- データ分析
- データの視覚化
- Java とのインターフェース
また、使い始めたら MATLAB で作業を続けることができる簡単な (ただし、必ずしも最適化されているとは限りません) 方法で、他のほとんどすべてを行うのに十分なライブラリ/ツールがあります。
たとえば、行列演算に最適なソフトウェア パッケージを使用するのは嫌いですが、他のことをしようとすると、お粗末で、そのお粗末さを受け入れるか、自分の仕事を放棄して別のソフトウェアを使用するかの選択に直面します。
確かに、Matlab がいくつかの点で高速であることがわかりますが、Matlab が提供したいものを超えるベクトルを操作するための手動メモリ管理などの特殊なことが必要な場合は、いくつかのフープをジャンプする必要があります。
Matlab ではすべてを迅速かつ簡単に実行できると確信していますが、エレガントさと最適化後の読みやすさの点で非常に扱いにくいと考えるようになりました。ベクトル計算は確かに楽しくて速いですが、次元を見つけるのが難しい場合があります。
あなたが知っていることに固執し、Matlabではできないと確信したら切り替えてください。特に素早いコードや数値計算が必要な場合は、別の言語を学ぶのは困難です。
補足として、私はいくつかの素晴らしいライブラリ (GSL、Eigen など) と共に C++ を好みます。面白いことに、私はまだ Matlab でプロットを作成しています。なぜなら、Matlab のその部分をよく知っているからです :)