Matlab vs. Julia vs. Python

Saya telah menggunakan MATLAB selama lebih dari 25 tahun. (Dan sebelum itu saya bahkan menggunakan MATRIXx , ia tidak bisa beristirahat dengan tenang.) Ini bukan bahasa pertama yang saya pelajari untuk diprogram , tetapi ini adalah bahasa yang saya gunakan untuk mencapai usia matematika. Mengetahui MATLAB telah memberikan penghargaan untuk karir saya.

Namun, tidak mungkin untuk mengabaikan pertumbuhan Python dalam komputasi ilmiah. MathWorks harus merasakan hal yang sama: mereka tidak hanya menambahkan kemampuan untuk memanggil Python langsung dari MATLAB , tetapi juga meminjam beberapa fitur bahasanya, seperti transfer yang lebih agresif untuk komponen operator biner.

Momen datang ketika saya mempertanyakan saya terus menggunakan MATLAB dalam penelitian dan pengajaran. Namun demikian, saya berinvestasi sangat banyak dalam materi sehingga sulit untuk menemukan motivasi untuk belajar sesuatu yang baru.

Perangkat Lunak EDISON - pengembangan web
Artikel ini diterjemahkan dengan dukungan Perangkat Lunak EDISON, yang menjaga kesehatan programmer dan sarapan mereka , dan juga mengembangkan perangkat lunak khusus .

Tutorial pengantar MATLAB, yang saya tulis bersama untuk matematika komputasi. Buku ini berisi lebih dari 40 fungsi dan 160 contoh komputasi, dan itu mencakup apa, saya pikir, yang mendasar dalam menggunakan MATLAB untuk perhitungan ilmiah numerik. Sebagian untuk perbaikan diri, dan sebagian untuk meningkatkan kegunaan buku ini tahun ini, saya memutuskan untuk menerjemahkan kode ke dalam Julia dan Python . Pengalaman ini membawa saya ke pandangan khusus dalam tiga bahasa sehubungan dengan komputasi ilmiah, yang saya coba uraikan di bawah ini.

Saya akan menunda masalah biaya dan keterbukaan. MATLAB, tidak seperti Python dan Julia, bukan produk freeware. Ini adalah perbedaan besar - bagi sebagian orang, tetapi saya ingin mempertimbangkan manfaat teknisnya. Selama bertahun-tahun, MATLAB jauh melampaui produk gratis dalam sejumlah cara yang sangat berguna, dan jika Anda ingin menjadi produktif, maka biayanya akan sangat besar. Ini adalah diskusi terpisah tentang daya tarik platonis bahasa dan ekosistem.

Jika kita menghilangkan masalah terkait biaya, alasan banyak perbedaan dalam bahasa ini terkait dengan asal mereka. MATLAB pertama menempatkan prioritas pada aspek matematika, yaitu, matematika komputasi. Python, yang muncul pada 1980-an, menempatkan ilmu komputer di garis depan. Didirikan pada tahun 2009, Julia telah menetapkan tujuan untuk mencapai keseimbangan antara dua bahasa sebelumnya.

MATLAB


Awalnya, setiap nilai dalam MATLAB adalah array angka floating-point presisi ganda. Kedua aspek pilihan ini, array dan angka floating-point, terinspirasi oleh keputusan desain.

Standar IEEE 754 untuk angka floating point tidak diadopsi sampai 1985, dan memori diukur dalam kilobyte, bukan gigabyte. Angka floating point ganda bukan cara yang paling efisien untuk menampilkan karakter atau bilangan bulat, tetapi mereka adalah apa yang para ilmuwan, insinyur, dan semua ahli matematika ingin gunakan sebagian besar waktu. Selain itu, variabel tidak boleh dideklarasikan dan memori tidak boleh dialokasikan. Dengan membiarkan komputer Anda menangani tugas-tugas ini dan menyingkirkan tipe data, Anda membebaskan otak Anda untuk memikirkan algoritma yang akan bekerja dengan data.

Array penting karena algoritma numerik dalam aljabar linier mengambil bentuknya sendiri LINPACK dan EISPACK . Tetapi mengaksesnya dengan media standar dalam komputasi ilmiah, FORTRAN 77, adalah proses multi-langkah yang melibatkan mendeklarasikan variabel, memanggil nama-nama rutin yang tersembunyi, menyusun kode, dan kemudian menganalisis data dan file output. Merekam perkalian matriks dalam bentuk A * B dan daftar tanggapan segera menyebabkan perubahan dalam perjalanan permainan.

MATLAB juga membuat grafiknya sederhana dan terbuka. Tidak ada pustaka yang bergantung pada mesin yang kompleks dengan panggilan tingkat rendah, cukup plot (x, y), dan Anda melihat apa yang dilihat orang lain dengan MATLAB. Bahkan ada lebih banyak inovasi, seperti bilangan kompleks yang rumit, matriks jarang, alat untuk membuat antarmuka pengguna grafis lintas platform dan seperangkat pemecah ODE canggih yang menjadikan MATLAB tempat untuk komputasi ilmiah dengan kecepatan pemikiran.

Namun, desain yang ideal untuk komputasi interaktif, bahkan yang panjang, tidak selalu berkontribusi untuk menulis program yang baik dan produktif. Memindahkan data antara banyak fungsi diperlukan memanipulasi berbagai variabel dan sering mengakses dokumentasi argumen input dan output. Satu fungsi per file pada disk dalam namespace datar sangat sederhana untuk proyek kecil, tetapi sakit kepala untuk yang besar. Pola pemrograman tertentu (vektorisasi, pra-alokasi memori) harus diterapkan jika Anda ingin menghindari masalah dengan kecepatan komputasi. Komputasi ilmiah saat ini diterapkan ke sejumlah besar area dengan sejumlah besar tipe data yang berbeda. Dll

Sebagai tanggapan, MathWorks terus berinovasi di MATLAB: fungsi bawaan, fungsi bersarang, variabel trailing, berbagai tipe data, fungsi berorientasi objek, infrastruktur pengujian unit, dan sebagainya. Setiap inovasi mungkin merupakan solusi untuk masalah penting. Tetapi akumulasi 40 tahun dari perubahan ini memiliki efek samping mengaburkan kesederhanaan dan kesatuan konsep. Pada 2009, saya menulis sebuah buku yang membahas dasar-dasar MATLAB dengan cukup baik pada kurang dari 100 halaman. Sejauh yang saya tahu, semua hal ini masih tersedia. Tetapi Anda perlu tahu lebih banyak sekarang untuk menyebut diri Anda seorang profesional.

Python


Sebagian, sejarah Python adalah gambar cermin dari sejarah MATLAB. Kedua bahasa memiliki baris perintah interaktif (sekarang disebut REPL adalah singkatan untuk loop cetak baca-eval, yang diterjemahkan sebagai loop baca-evaluasi-cetak, serta kebebasan dari berbagai deklarasi dan kompilasi. Namun, MatLab dibuat terutama dengan mata pada komputasi analisis, sementara python dibuat untuk peretas. Kemudian, masing-masing bahasa dapat memperluas basis penggunanya dengan memperbarui dan memperluas fungsionalitas.

Menurut pendapat saya, Python masih menderita dari kemiskinan alat matematika. Ini berisi hal-hal kecil yang tidak nyaman seperti keberadaan ** bukannya ^, @ digunakan untuk melipatgandakan matriks (baru-baru ini ditambahkan!), Bukan ukuran, tetapi bentuk matriks, penyimpanan berorientasi baris, dll. Jika Anda berpikir bahwa V.conj (). T @ D ** 3 @ V lebih elegan daripada V βˆ— D 3 V, maka kemungkinan besar Anda tidak semua benar dengan kepala Anda. Juga, pengindeksan dimulai pada 0 (bukan 1). Saya memiliki kesempatan untuk berkenalan dengan pendapat yang berlawanan , namun, menurut pendapat saya, itu tidak begitu meyakinkan, Jelas, ini semua masalah preferensi pribadi, subjek perang suci di Internet, karena Anda selalu dapat memberikan contoh rumit untuk keuntungan Anda, Apa sebenarnya bagi saya tampaknya meyakinkan, karena selama beberapa dekade kami selalu memulai pengindeksan matematis vektor dan matriks dengan 1, dan banyak kode semu didasarkan pada asumsi ini.

Selain beberapa ketidaknyamanan, saya menemukan sistem Python + NumPy + SciPy rumit dan tidak konsisten, contoh yang baik adalah kenyataan bahwa meskipun fokus yang kuat pada objek, ada kelas matriks, dan penggunaannya tidak dianjurkan , Mungkin MatLab memanjakan saya seperti itu, tapi saya pikir matriks adalah objek penting untuk tetap berguna dan aktif digunakan. Bukankah kemampuan untuk menggunakan * untuk melakukan berbagai operasi dengan array dan matriks fitur utama OOP? Secara umum, ada banyak momen yang tidak menguntungkan dalam hal ini, (Mengapa saya membutuhkan perintah spsolve sama sekali ? Mengapa saya tidak bisa menerapkan perintah penyelesaian ke matriks jarang? Dan masih banyak hal seperti itu.)

Ada juga tempat di mana ekosistem numerik terlihat sedikit lebih buruk. Misalnya, pemecah persegi dan ODE terlihat minimalis pada tahun 2019. sejauh yang saya tahu tidak ada metode untuk DAE, DDE, pemecah symplectic atau implisit yang memungkinkan iterasi internal Krylov. Lihat, fungsi-fungsi ini sebagian besar 30 tahun atau lebih - mereka masih bagus, tetapi sangat jauh dari sempurna. Matplotlib adalah paket luar biasa untuk dikerjakan, dan dalam beberapa kasus terlihat lebih baik daripada MATLAB, tapi saya ketinggalan 3D.

Beberapa ahli berpendapat bahwa ada alasan mengapa kode Python mencoba untuk melawan kecepatan dengan bahasa yang dikompilasi. Saya terkejut dengan hasil pencarian " python terlalu lambat ." Juara Python mengutip banyak argumen / permintaan maaf yang dibuat orang untuk MATLAB saat itu. Ini tidak berarti bahwa mereka salah, tetapi itu lebih dari sekadar masalah persepsi .

Saya mengerti mengapa Python sangat menarik bagi banyak orang dalam komputasi ilmiah. Ini memiliki beberapa sintaks dan kekuatan MATLAB, tersedia dari REPL. Ini memiliki alat yang sangat baik dan bekerja dengan baik dengan bahasa lain dan bidang perhitungan. Dia menawarkannya secara gratis dan dengan reproduksibilitas jangka panjang yang jauh lebih baik. Jelas, ini bekerja dengan baik bagi banyak orang yang mungkin melihat sedikit alasan untuk perubahan.

Karena apa yang saya tahu bagaimana melakukannya dalam komputasi ilmiah, Python memaksa saya untuk melakukan lebih banyak pekerjaan rutin dalam belajar dan menggunakan daripada yang biasa saya lakukan. Untuk beberapa waktu kita tidak akan tahu apakah itu akan berlanjut di komunitas atau sudah mendekati puncaknya.

Julia


Julia memiliki kelebihan dan kekurangan sejak terlambat. Saya mengagumi pencipta Julia karena memahami bahwa mereka bisa berbuat lebih banyak

Kami ingin bahasa open source dengan lisensi perpustakaan. Kami ingin kecepatan C dengan dinamika Ruby. Kami ingin bahasa menjadi homoionik, dengan makro nyata seperti Lisp, tetapi dengan notasi matematika yang jelas dan familier seperti di Matlab. Kami ingin sesuatu yang dapat diprogram seperti Python, sesederhana statistik seperti R, alami untuk pemrosesan string seperti Perl, sama kuatnya dengan aljabar linier seperti Matlab, dan mampu merekatkan program bersama seperti shell . Sesuatu yang mudah dipelajari, tetapi pada saat yang sama menyenangkan peretas yang paling serius. Kami ingin interaktif, dan kami ingin dikompilasi.

Saya percaya bahwa sebagian besar mereka telah berhasil. Pada rilis versi 1.0, mereka tampak sedikit berbeda dari REPL, dan dari MATLAB. (Seberapa akurat LinRange lebih baik daripada linspace?) Meskipun ini nitpicking.

Ini adalah bahasa pertama yang saya gunakan, dengan kemampuan melampaui ASCII. Saya mendapatkan kepuasan yang berlebihan dari penggunaan variabel seperti Phi dan operator seperti β‰ˆ. Ini lebih dari bungkus yang indah; bisa lebih mirip ekspresi matematika yang kita tulis adalah nilai tambah yang sebenarnya, meskipun sedikit menyulitkan pembelajaran dan dokumentasi.

Pekerjaan di Julia menunjukkan kepada saya bahwa saya memperoleh beberapa keterampilan pemrograman karena pilihan MATLAB, dan bukan karena keunggulannya yang melekat. Vektorisasi tidak alami untuk banyak hal. Julia mengungkapkan bahwa Anda dapat membuat vektor fungsi apa pun hanya dengan menambahkan titik pada namanya. Membangun matriks menggunakan pemahaman membuat loop bersarang (atau trik grid grid) terlihat seperti cambuk yang salah dalam perbandingan, dan melewati matriks secara keseluruhan dengan generator untuk penjumlahan sederhana seperti mendapatkan sesuatu tanpa hasil. (Saya tahu bahwa Python memiliki fitur bahasa yang serupa.)

Fitur besar dari pengiriman ganda membuat beberapa hal lebih mudah dan lebih dimengerti daripada orientasi objek. Sebagai contoh, misalkan Anda memiliki kelas Dinding dan Bola dalam bahasa berorientasi objek tradisional. Kelas mana yang harus mendeteksi tabrakan bola dengan dinding? Atau apakah Anda memerlukan kelas kamar untuk bermain wasit? Pertanyaan seperti ini bisa mengalihkan perhatian saya. Dengan penjadwalan berganda, data dikemas ke dalam tipe objek, tetapi metode yang bekerja dengan data tidak terikat ke kelas. Jadi
function detect_collision (B :: Ball, W :: Wall)
tahu tentang jenis, tetapi ditentukan secara independen dari mereka. Saya butuh banyak pemrograman untuk memahami betapa menarik dan berpotensi pentingnya konsep pengiriman ganda untuk memperluas bahasa.

Ekosistem numerik berkembang pesat. Contoh nomor satu saya adalah DifrentialEquations.jl , ditulis oleh Chris Rakautskas yang luar biasa . Jika perangkat lunak ini tidak memenangkan Hadiah Wilkinson dalam waktu dekat, sistemnya rusak. Pergi saja ke situs dan bersiap-siap untuk naik banding.

Saya belum melihat peningkatan kecepatan yang besar atas MATLAB yang dijanjikan Julia. Ini adalah sebagian dari pengalaman relatif saya dan jenis tugas yang saya lakukan, tetapi sebagian karena MathWorks telah melakukan pekerjaan luar biasa secara otomatis mengoptimalkan kode. Bagaimanapun, ini bukan aspek pengkodean yang paling saya fokuskan.

Pemrograman di Julia membutuhkan waktu untuk merasa nyaman (mungkin saya hanya menjadi tua dan semakin mengkristal). Ini membuat saya berpikir tentang tipe data lebih dari yang saya inginkan, dan selalu ada kecurigaan bahwa saya melewatkan cara yang tepat untuk melakukan sesuatu. Tetapi untuk penggunaan sehari-hari, kemungkinan besar saya akan beralih ke Julia sebagai MATLAB.

Ringkasan


MATLAB adalah solusi perusahaan, terutama digunakan untuk memecahkan masalah teknik. Tetap menjadi alat paling sederhana untuk memecahkan masalah numerik. Dokumentasi yang sangat penting dan pengembangan perusahaan selama sepuluh tahun tidak diragukan lagi memainkan peran penting dalam hal ini.

MATLAB seperti sedan BMW dari dunia komputasi ilmiah. Itu mahal, bahkan sebelum Anda berbicara tentang aksesori. (Tool kit). Anda membayar operasi dan layanan tanpa cacat, tanpa gangguan. Tetapi itu juga menarik kebencian yang tidak proporsional.

Python adalah truk pickup Ford. Itu ada di mana-mana dan dicintai oleh banyak orang (di AS). Itu dapat melakukan apa pun yang Anda inginkan, dan dirancang untuk melakukan apa yang tidak bisa dilakukan oleh mobil lain. Kemungkinan besar, Anda akan menginginkannya sekarang dan kemudian. Tapi itu tidak memberi Anda banyak pengalaman berkendara.

Julia adalah Tesla. Itu dibangun dengan tujuan berani mengubah masa depan, dan itu mungkin. Tetapi bisa juga hanya menyebutkan. Pada saat yang sama, Anda akan mendapatkan gaya Anda saat ini, dan dengan kekuatan besar.


Baca juga blognya
Perusahaan EDISON:


20 perpustakaan untuk
aplikasi iOS yang spektakuler

Source: https://habr.com/ru/post/id480716/


All Articles