Mana yang lebih baik: FORTRAN atau Python? Dan saya kira dalam kedua kasus Anda membutuhkan Gnuplot, apakah saya benar?
Saya sedang mengerjakan mesin Windows saat ini.
Saya ingin menggunakannya untuk mendapatkan solusi numerik untuk masalah fisika, termasuk simulasi Monte-Carlo, integrasi dan diferensiasi numerik, dinamika molekuler, dll.
Saya melihat kursus fisika komputasi yang memperkenalkan FORTRAN (77 saya percaya) dan Python. Saya berencana memulai dengan yang satu dan kemudian belajar yang lain, tetapi saya tidak tahu transisi mana yang paling mudah.
Juga kompiler mana yang akan Anda rekomendasikan?
Pertanyaan dasar bagi saya datang ke: mana yang paling mudah dipelajari, mana yang tercepat, mana yang paling ramah pengguna dan di atas semua mana yang paling banyak digunakan (jadi perbandingan 4 ini)? Dan di samping itu, apa kompiler (gratis atau berbayar) yang paling umum digunakan? Saat ini saya sedang mempertimbangkan untuk mengubah laptop lama (Intel awal dual core) ke Linux; semoga cukup cepat.
Terima kasih banyak atas jawabannya sejauh ini! Jawaban yang sesuai dengan apa yang saya cari adalah dari LKlevin dan SAAD.
Saya tahu dasar-dasar C ++, Maple dan saya menguasai MATLAB dan Mathematica9 hampir sepenuhnya jika itu bisa membantu.
Jawaban:
Kemudahan belajar
Python dan Fortran keduanya bahasa yang relatif mudah dipelajari. Mungkin lebih mudah untuk menemukan materi pembelajaran Python yang baik daripada materi pembelajaran Fortran yang baik karena Python digunakan lebih luas, dan Fortran saat ini dianggap sebagai bahasa "khusus" untuk komputasi numerik.
Saya percaya transisi dari Python ke Fortran akan lebih mudah. Python adalah bahasa yang ditafsirkan, jadi jumlah langkah yang diperlukan untuk menjalankan program pertama Anda lebih kecil (buka penerjemah, ketik
print("Hello, world!")
di prompt) daripada Fortran (tulis program "Hello world", kompilasi, jalankan). Saya juga berpikir bahwa ada bahan yang lebih baik untuk mengajarkan gaya berorientasi objek dalam Python daripada di Fortran, dan ada lebih banyak kode Python yang tersedia di GitHub daripada kode Fortran.Bangun dan berjalan di Windows
Menginstal Python seharusnya tidak terlalu menyakitkan; ada distribusi Windows yang tersedia. Saya sarankan menggunakan distribusi ilmiah seperti Anaconda atau Enthought Canopy. Sebenarnya tidak ada kompiler, per se; penerjemah mengambil peran itu. Anda akan ingin menggunakan juru bahasa berbasis CPython, karena ada lebih banyak perpustakaan numerik yang tersedia dan dapat beroperasi dengan baik dengan C, C ++, dan Fortran. Implementasi juru bahasa lainnya termasuk Jython dan PyPy.
Pada mesin Windows, menginstal kompiler Fortran akan mengganggu. Kompiler baris perintah yang umum adalah program-program seperti gfortran, ifort (dari Intel; gratis untuk penggunaan pribadi, jika tidak memerlukan biaya), dan pgfortran (dari PGI; versi uji coba gratis, jika tidak perlu biaya). Untuk menginstal kompiler ini, Anda mungkin perlu menginstal semacam lapisan kompatibilitas tipe UNIX / POSIX, seperti Cygwin atau MinGW. Saya merasa sulit untuk bekerja dengannya, tetapi beberapa orang menyukai alur kerja itu. Anda juga dapat menginstal kompiler dengan GUI, seperti Visual Fortran (sekali lagi, Anda harus membayar lisensi).
Di Linux, akan lebih mudah untuk menginstal Python dan kompiler; Saya masih akan menginstal Anaconda atau Enthought Canopy sebagai distribusi Python.
Kecepatan: tradeoff produktivitas vs kinerja
Dalam menggunakan Python (atau MATLAB, Mathematica, Maple, atau bahasa apa pun yang ditafsirkan), Anda menyerahkan kinerja untuk produktivitas. Dibandingkan dengan Fortran (atau C ++, C, atau bahasa kompilasi lainnya), Anda akan menulis lebih sedikit baris kode untuk menyelesaikan tugas yang sama, yang secara umum berarti Anda membutuhkan waktu lebih sedikit untuk mendapatkan solusi yang berfungsi.
Denda kinerja yang efektif untuk menggunakan Python bervariasi, dan dikurangi dengan mendelegasikan tugas intensif komputasi ke bahasa yang dikompilasi. MATLAB melakukan hal serupa. Ketika Anda melakukan perkalian matriks dalam MATLAB, ia memanggil BLAS; penalti kinerja hampir nol, dan Anda tidak perlu menulis Fortran, C, atau C ++ apa pun untuk mendapatkan kinerja tinggi. Situasi serupa ada di Python. Jika Anda dapat menggunakan perpustakaan (misalnya, NumPy, SciPy, petsc4py, dolfin dari FEniCS, PyClaw), Anda dapat menulis semua kode Anda dengan Python dan mendapatkan kinerja yang baik (penalti mungkin 10-40%) karena semua komputasi bagian intensif adalah panggilan ke perpustakaan bahasa yang dikompilasi dengan cepat. Namun, jika Anda menulis semuanya dengan Python murni, hukuman kinerja akan menjadi faktor 100-1000x. Jadi jika Anda ingin menggunakan Python dan harus memasukkan kebiasaan, Komputasional intensif rutin, Anda akan lebih baik menulis bagian itu dalam bahasa yang dikompilasi seperti C, C ++, atau Fortran, kemudian membungkusnya dengan antarmuka Python. Ada perpustakaan yang memfasilitasi proses ini (seperti Cython dan f2py), dan tutorial untuk membantu Anda; umumnya tidak memberatkan.
Lingkup penggunaan
Python digunakan secara lebih luas secara keseluruhan sebagai bahasa tujuan umum. Fortran sebagian besar terbatas pada komputasi numerik dan ilmiah, dan terutama bersaing dengan C dan C ++ untuk pengguna di domain itu.
Dalam ilmu komputasi, Python biasanya tidak bersaing secara langsung dengan bahasa yang dikompilasi karena hukuman kinerja yang saya sebutkan. Anda akan menggunakan Python untuk kasus-kasus di mana Anda menginginkan produktivitas dan kinerja tinggi adalah pertimbangan sekunder, seperti dalam membuat prototipe algoritma numerik intensif, pemrosesan data, dan visualisasi. Anda akan menggunakan Fortran (atau bahasa kompilasi lain) ketika Anda memiliki ide yang bagus tentang apa yang harus menjadi algoritma dan desain aplikasi Anda, Anda bersedia menghabiskan lebih banyak waktu menulis dan men-debug kode Anda, dan kinerja sangat penting. (Misalnya, kinerja adalah langkah pembatas dalam proses simulasi Anda, atau itu adalah kunci yang diberikan dalam penelitian Anda.) Strategi yang umum adalah mencampur Python dan bahasa yang dikompilasi (biasanya C atau C ++, tetapi Fortran telah digunakan juga), dan hanya menggunakan bahasa yang dikompilasi untuk bagian kode yang paling sensitif terhadap kinerja; biaya pengembangan, tentu saja, lebih sulit untuk menulis dan men-debug suatu program dalam dua bahasa daripada program dalam satu bahasa.
Dalam hal paralelisme, standar MPI saat ini (MPI-3) memiliki ikatan Fortran dan C asli. Standar MPI-2 memiliki binding C ++ asli, tetapi MPI-3 tidak, dan Anda harus menggunakan binding C. Binding MPI pihak ketiga ada, seperti mpi4py. Saya telah menggunakan mpi4py; ini bekerja dengan baik, dan mudah digunakan. Untuk paralelisme skala besar (puluhan ribu inti), Anda mungkin ingin menggunakan bahasa yang dikompilasi karena hal-hal seperti memuat modul Python secara dinamis akan menggigit Anda di pantat pada skala jika Anda melakukannya dengan cara yang naif. Ada beberapa cara untuk mengatasi hambatan itu, seperti yang ditunjukkan oleh pengembang PyClaw, tetapi lebih mudah untuk menghindarinya.
Pendapat pribadi
Saya memiliki sekitar satu dekade pengalaman di Fortran 90/95, dan saya juga memprogram di Fortran 2003. Saya memiliki sekitar lima tahun pengalaman pemrograman dengan Python. Saya menggunakan Python lebih dari saya menggunakan Fortran karena, terus terang, saya mendapatkan lebih banyak dilakukan dengan Python. Mayoritas pekerjaan yang perlu saya lakukan tidak memerlukan sumber daya superkomputer utama dan umumnya tidak layak dikembangkan kembali dalam bahasa lain, jadi Python tidak masalah untuk menyelesaikan ODE dan PDE. Jika saya perlu menggunakan bahasa yang dikompilasi, saya akan menggunakan C, C ++, atau Fortran, dalam urutan itu.
Sebagian besar kode Fortran yang saya lihat jelek, terutama karena sebagian besar komunitas sains komputasi tampaknya tidak mengetahui atau menolak praktik terbaik apa pun yang ditemukan oleh insinyur perangkat lunak dalam 30 tahun terakhir. Intinya: tidak ada kerangka pengujian unit yang baik di Fortran. (Yang terbaik yang saya temui adalah FUnit, oleh NASA, dan itu tidak dipertahankan lagi.) Ada beberapa kerangka kerja pengujian unit Python yang baik, generator dokumentasi Python yang baik, dan umumnya banyak contoh yang lebih baik dari praktik pemrograman yang baik.
sumber
Saya akan tinggal jauh dari Fortan, atau jika Anda harus, menggunakan versi yang cukup baru (2003 daripada 77). Banyak perangkat lunak fisika (simulasi Monte Carlo khususnya) ditulis dalam Fortran, hanya karena proyek awalnya dimulai pada tahun 80-an.
Yang sedang berkata, python dan Fortran adalah dua bahasa yang sangat berbeda, dan apa yang harus mereka gunakan sangat berbeda. Python adalah level tinggi dan secara umum tidak secepat itu (dibandingkan dengan Fortran & C ++). Alasan mengapa ini digunakan begitu banyak adalah karena itu cukup cepat untuk sebagian besar hal dan memiliki perpustakaan (Fortran powered) yang sangat baik untuk banyak (tetapi tidak semua) dari hal-hal yang ingin Anda lakukan. Ini juga memiliki Matplotlib yang sangat baik untuk merencanakan (jadi tidak perlu untuk GNUplot) dan Anda bisa mendapatkan kinerja yang cukup baik dengan menggunakan hal-hal seperti Cython untuk menulis bit mahal. Ini tidak akan secepat Fortran atau C ++, dan parallelisation cukup mengerikan, membuatnya tidak memadai untuk komputasi numerik berkinerja tinggi. Jika apa yang Anda inginkan dapat ditangani dengan memanggil perpustakaan Fortran atau C,
Fortran adalah bahasa tingkat agak rendah. Untuk numerik, dukungan pustaka sangat bagus, tetapi levelnya masih sangat rendah sehingga Anda memiliki banyak bug yang bisa Anda hindari, seperti tidak sengaja memberikan ukuran array yang salah ke suatu metode. Bug ini sulit ditemukan dan Anda mungkin tidak melihatnya sama sekali. Percayalah, saya menghabiskan cukup banyak waktu menulis Fortran 77.
C ++ adalah (menurut pendapat saya yang sederhana) media yang bahagia. Dengan perpustakaan seperti Armadillo atau Eigen, Anda bisa lolos dengan gaya pengkodean tingkat yang cukup tinggi sambil mendapatkan gaya kinerja tingkat rendah.
Berbicara tentang kinerja, satu-satunya pilihan nyata untuk python numerik sekarang adalah CPython. Jika Anda mengunduh sesuatu seperti WinPython, Anda juga akan mendapatkan sebagian besar perpustakaan yang Anda butuhkan.
Untuk Fortran di windows, segalanya menjadi sedikit lebih sulit. Saya akan merekomendasikan beralih ke linux dan menggunakan kompiler ifort gfortran atau Intels. Ifort cenderung lebih cepat untuk kode numerik dalam pengalaman saya, tetapi hanya gratis untuk penggunaan non-komersial, non-akademik.
Singkatnya: Kecuali jika Anda ingin menjalankan simulasi yang sangat berat, python adalah pilihan yang jauh lebih mudah dan jauh lebih menyenangkan untuk dikerjakan. Ini juga harus cukup cepat untuk sebagian besar proyek tingkat siswa. Jika Anda membutuhkan kinerja yang lebih baik, mulailah dengan melihat jumlah limbah perpustakaan yang sudah ditulis dan biarkan yang memutuskan bahasa Anda. Jika Anda harus menulis sesuatu dari awal, gunakan C ++.
Juga peringatan: sebagian besar kode yang ditulis oleh fisikawan cukup mengerikan, mungkin karena fisikawan cenderung menganggap pemrograman itu mudah dan tidak memerlukan ketelitian yang sama yang mungkin mereka gunakan dalam matematika. Pertimbangkan mengambil kelas atau membeli buku yang mengajarkan pemrograman.
Penafian: Saya seorang ahli fisika yang telah menghabiskan cukup banyak waktu dengan kode Monte Carlo berbasis Fortran 77 dan saat ini melakukan semua pemrosesan datanya dengan Python.
sumber
Python adalah bahasa tingkat tinggi yang sangat lambat. Untuk penghitungan angka cepat Anda harus menulis kernel penghitungan utama dalam bahasa tingkat rendah seperti C / C ++ yang artinya sekarang Anda harus belajar bukan hanya satu tetapi setidaknya dua bahasa. Anda juga harus berurusan dengan sakit kepala tambahan yang terkait dengan debugging / instalasi / pemeliharaan dll. Kebanyakan orang menggunakan Python sebagai gula sintaksis untuk menyembunyikan kedatangan singkat C / C ++.
Modern Fortran (90 dan yang lebih baru) memiliki level yang cepat dan tinggi dengan sintaks yang hampir mirip MATLAB. Jadi Anda dapat melakukan hal-hal seperti:
atau
atau bahkan lebih sederhana
dll.
Di Linux ada sejumlah kompiler Fortran gratis. saya menggunakan
Saya tidak menggunakan Mac / OSX tetapi ada PGI gratis.
Dan tolong jangan gunakan FORTRAN 77. Tidak ada yang menggunakannya untuk menulis kode baru.
Penafian: Saya pribadi melihat Python untuk menulis kode FE kecil yang tidak terstruktur (dibangun di atas PETSc) tetapi jumlah pekerjaan / pengkodean yang terlibat lebih dari sekadar menulisnya Fortran 95.
sumber
Python sangat praktis untuk analisis simulasi penuh dengan paket serbaguna yang terdokumentasi dengan baik: pembuatan grid, komputasi array, dan penanganan struktur data ( numpy dan panda ) serta visualisasi data dengan matplotlib. Untuk simulasi kompleks dengan file hasil besar, bahkan lebih baik untuk bekerja dengan paket VTK yang memungkinkan mengekspor data untuk dibaca oleh aplikasi open-source canggih (seperti Paraview atau Visit)
Fortran selama beberapa waktu merupakan bahasa yang disukai untuk domain yang berbeda dalam simulasi. Ini mudah dibaca (kurang dibaca daripada kode Python). Penanganan array adalah salah satu kelebihan bahasa, cukup mudah untuk didefinisikan dan digunakan dalam menggunakan semua jenis operasi array. Ini berguna saat debugging juga.
Perbandingan turun ke kinerja : Saya hanya melakukan perhitungan skala besar menggunakan bahasa yang dikompilasi (C ++ dan Fortran 90) tetapi tidak pernah dengan Python. Utas lain memberikan lebih banyak informasi kinerja tentang bahasa yang ditafsirkan dan dikompilasi: Bahasa apa yang harus saya gunakan saat mengajar kursus sarjana dalam pemrograman komputer?
Secara pribadi, saya suka bekerja dengan Python secara umum, terutama untuk post-processing. Pemrograman python menyenangkan!
sumber
Dengan Python Anda tidak perlu Gnuplot, Anda dapat menggunakan, misalnya, matplotlib dan / atau menggunakan shell IPython. IPython adalah shell Python interaktif yang, dalam mode% pylab, menyediakan cukup banyak perintah memplot yang Anda miliki di MATLAB.
Sangat mungkin bahwa perhitungan ilmiah akan sangat memperluas pergeseran dari MATLAB ke Python dalam 5+ tahun ke depan.
sumber
Saya akan tetap menggunakan MATLAB, ini memanggil perpustakaan matematika cepat, dan Anda tidak akan melihat banyak perbedaan dalam kinerja dengan beralih ke FORTRAN di Windows. Pada saat yang sama Anda akan memiliki infrastruktur yang lebih baik di MATLAB untuk melaporkan hasil dan menjalankan kode Anda. Kelemahan dari MATLAB adalah biayanya. FORTRAN pada dasarnya gratis, dan ada banyak perpustakaan gratis di luar sana.
FORTRAN sangat mudah dipelajari dan mulai pemrograman. Ini pada dasarnya melakukan apa yang disarankan namanya: menerjemahkan formula Anda ke dalam kode, yang mudah dibaca dan dipahami. Itu sebabnya fisikawan banyak menggunakannya di masa lalu. Selama sebagian besar kode Anda adalah tentang menyelesaikan masalah fisika (bukan membangun GUI atau melakukan hal-hal keren lainnya), kode FORTRAN akan mudah dipelihara.
Saya akan merekomendasikan Python hanya jika Anda menikmati pemrograman. Pikirkan ini: ketika Anda membuat kode solusi untuk masalah fisika, apakah Anda menikmati pemrograman bagian dari solusi? Jika Anda melakukannya, maka Python adalah sebuah pilihan, karena bahasanya jauh lebih baik daripada MATLAB.
sumber