Kalkulus dengan Julia
(jverzani.github.io)- Catatan pembelajaran yang membantu memahami kalkulus dari berbagai sudut pandang, dengan memanfaatkan sintaks Julia yang mudah dan kemampuan komputasinya untuk grafik serta eksperimen numerik
- Mengikuti alur rule of four ala Harvard dengan membahas perspektif grafis, numerik, aljabar, dan verbal secara bersamaan, sementara Julia terutama digunakan untuk menunjukkan aspek grafis, numerik, dan sebagian aljabar
- Sementara sistem aljabar komputer seperti Mathematica, Maple, dan Sage kuat dalam pemrosesan simbolik, catatan ini menempatkan Julia sebagai alat yang berfokus pada komputasi numerik dan menambahkan pemrosesan aljabar yang diperlukan
- Pembelajar dapat menyiapkan lingkungan dengan mengikuti panduan instalasi dan antarmuka, serta menyederhanakan pekerjaan berulang dan fungsi umum dengan paket
CalculusWithJulia - Setiap halaman membahas konsep yang terfokus seperti satu bagian dalam buku, dan melalui soal penilaian mandiri di bagian akhir, pembelajar dapat memeriksa konsep komputasi yang diperlukan untuk menyelesaikan kalkulus pengantar
Pendekatan belajar kalkulus dengan Julia
- Calculus with Julia adalah kumpulan catatan untuk mempelajari calculus dengan bahasa
Julia - Julia adalah bahasa pemrograman open source, dan dalam catatan ini sintaks yang mudah dipelajari serta kemampuan komputasinya digunakan sebagai alat yang cocok untuk belajar kalkulus
- Dokumen untuk persiapan belajar juga disediakan
- Getting started with Julia: panduan instalasi dan pengaturan pengguna Julia
- Julia interfaces: panduan berbagai cara berinteraksi dengan instalasi Julia
- Sejak pertengahan 1990-an, pendidikan kalkulus memiliki kecenderungan untuk menggunakan beberapa perspektif sekaligus, dan “rule of four” ala Harvard berupaya memasukkan elemen grafis, numerik, aljabar, dan verbal sebisa mungkin
- Catatan ini disusun agar melalui Julia pembelajar dapat meninjau aspek grafis dan numerik kalkulus, dan terkadang hingga aspek aljabarnya
Perbedaan dengan sistem aljabar komputer
- Ada banyak contoh pengintegrasian sistem aljabar komputer seperti Mathematica, Maple, dan Sage ke dalam pembelajaran kalkulus
- WolframAlpha memanggil kemampuan Mathematica sambil mengizinkan sintaks informal yang fleksibel, dan juga dapat digunakan sebagai backend untuk fitur Apple Siri
- Sistem semacam ini memodelkan pemrosesan aljabar dan simbolik dengan baik dalam pembelajaran, sekaligus menyediakan sarana untuk menunjukkan aspek numerik
- Sebaliknya, catatan ini menggunakan Julia terutama sebagai alat komputasi numerik, lalu menambahkan pemrosesan aljabar dan simbolik di atasnya
- Proses melakukan pemrosesan simbolik secara langsung dengan tangan dapat bermanfaat untuk pembelajaran, tetapi sistem aljabar komputer dapat dengan mudah menghasilkan hasil akhir sehingga latihan tersebut tampak berulang
Cakupan pembelajaran dan susunan halaman
- Tujuannya adalah mendekati konsep kalkulus dengan memanfaatkan teknologi, tanpa terikat pada detail mekanis bahasa komputer
- Sintaks Julia diperlakukan sebagai bahasa yang tidak jauh lebih sulit untuk dimasuki pada tahap awal dibanding penggunaan kalkulator, tetapi memiliki potensi perluasan yang besar
- Catatan ini menangani konsep komputasi dengan mereduksinya menjadi kumpulan terbatas
- Dengan kumpulan ini saja, banyak soal kalkulus dapat diselesaikan
- Berbagai aspek pemrograman tidak dibahas secara menyeluruh
- Pembelajar yang lebih tertarik dapat mengeksplorasi lebih dalam melalui Julia
- Di dalam konsep komputasi yang terbatas itu terdapat operator yang mereduksi perhitungan kalkulus menjadi pemanggilan fungsi berbentuk
action(function, arguments...) - Dengan kumpulan kecil aksi (action) yang dapat dikombinasikan, banyak soal kalkulus pengantar dapat ditangani
- Setiap halaman disusun di sekitar satu konsep yang relatif terfokus, seperti satu bagian dalam buku
- Di akhir halaman terdapat soal untuk dikerjakan sendiri, dan semuanya memiliki jumlah jawaban penilaian mandiri yang terbatas
- Ide-idenya diambil dari Strang, Knill, Schey, Hass dan lainnya, Rogawski dan lainnya, Angenent, berbagai halaman Wikipedia, serta sumber lain
Materi yang disediakan dan cara menjalankan
- Catatan ini disertai paket Julia
CalculusWithJulia- Menyediakan fungsi-fungsi sederhana yang menyederhanakan pekerjaan umum
- Memuat paket-paket berguna yang akan digunakan berulang kali
- Catatan ini disediakan dalam format Quarto book, dan informasi tentang buku Quarto dapat dilihat di dokumentasi Quarto
- File PDF dapat dikompilasi dengan Quarto, tetapi ada banyak bagian yang harus diselaraskan, hasilnya tidak optimal, dan ukuran filenya juga cukup besar
- Tersedia unduhan versi PDF
- Kontribusi dapat dilakukan melalui tautan “Edit this page” dalam bentuk usulan topik tambahan, perbaikan kesalahan, atau perbaikan typo, dan kontributor dicatat di contributors
- Julia dapat diinstal dengan mudah menggunakan utilitas
juliaup - Tautan instance
binder.orguntuk menjalankan Julia di web juga disediakan, tetapi memiliki keterbatasan resource- Image tanpa SymPy
- Image dengan SymPy, waktu loading lebih lama
1 komentar
Pendapat di Hacker News
Anak saya akan naik ke kelas 2 SMA dan sedang mengambil SVC, jadi secara pribadi materi ini tampak sangat tepat
Jika penulis melihat thread ini, saya penasaran apakah ini juga cocok untuk siswa SMA yang baru sekadar pernah mencoba pengantar Python
Yang penting adalah mengerjakan soal sendiri dan memikirkan konsep dasar, bukan memusingkan sintaks kode; latihan dengan tangan membantu menginternalisasi materi dengan lebih baik
Bagian pemrogramannya baik-baik saja, tetapi dari pembacaan sekilas, penjelasan matematikanya ditulis dengan cara yang akan sangat membingungkan bagi orang yang belum memahami kalkulus, sehingga siswa bisa merasa dirinya buruk dalam matematika padahal sebenarnya penjelasannya saja yang kurang
Misalnya gambar di [1] menunjukkan sebuah kurva melewati kotak berarsir berbentuk L tanpa label sumbu, lalu dilanjutkan dengan persamaan parametrik dan beberapa substitusi untuk menurunkan rumus integrasi parsial
Bahkan dari sudut pandang orang yang paham integrasi parsial, itu hampir termasuk cara paling membingungkan untuk menurunkan atau menjelaskan rumusnya, dan gambarnya juga tidak banyak membantu kecuali bagi orang yang sudah memahami konsepnya
Jika pernah melihat ilustrasi yang sangat baik dan penjelasan yang jelas seperti dalam “Calculus” karya James Stewart, kontrasnya sangat mencolok
Biasanya penjelasan integrasi parsial memang dimulai dari aturan turunan hasil kali seperti penulisnya, tetapi pertama-tama mencoba menurunkan hasil kali dengan beberapa contoh untuk membangun intuisi tentang bentuk antiturunan dari hasilnya, lalu mengintegralkan kedua sisi dan memisahkan integral untuk menurunkan rumusnya[2]
Itu jauh lebih jelas dan mudah diikuti, dan jika benar-benar ingin membantu siswa, sebaiknya juga mengajarkan metode tabel/“DI” agar mereka tidak kesulitan dengan tanda saat melakukan integrasi parsial berkali-kali
[1] https://jverzani.github.io/CalculusWithJuliaNotes.jl/integra...
[2] Catatan penurunan yang saya buat saat belajar ada di sini. Ini bukan ditulis untuk menjelaskan kepada pemula, hanya catatan pribadi, tetapi tetap jauh lebih mudah diikuti daripada contoh di atas https://publish.obsidian.md/uncarved/3+Resources/Public/Inte...
Jadi kalau harus merekomendasikan, saya ingin menyarankan Quick Calculus karya Kleppner dan Ramsey
Untuk membangun intuisi atas konsep yang baru pertama kali ditemui, tidak ada buku yang pernah saya gunakan yang mendekati buku ini
Setelah itu dikuasai, buku bagus apa pun akan baik-baik saja; buku James Stewart juga sangat bagus, tetapi terlalu tebal, jadi lebih baik dipakai seperti buku referensi untuk memilih bacaan dan soal yang sesuai, bukan menyuruh mengerjakan semua soal dari halaman 1
Intinya adalah sejak awal benar-benar memahami dasar tentang apa itu turunan, integral, dan limit, dan dalam hal itu Quick Calculus sangat unggul
Jika siswa tertarik pada pemrograman, memilih latihan yang sesuai dari buku Julia ini atau buku serupa untuk melengkapi Stewart juga bagus, dan jika mau, mengerjakannya dengan Python pun sudah cukup
Saya juga, pada usia yang sama, mengimplementasikan integrator numerik dan diferensiator simbolik dengan Python sebagai cara memperkuat pengetahuan kalkulus, dan keduanya bermanfaat sekaligus menyenangkan
Khususnya diferensiasi simbolik terasa seperti sihir, tetapi pada akhirnya itu adalah melakukan parsing dan terus menambahkan setiap aturan yang dipelajari dalam matematika
Kalkulus yang saya pelajari selama 2 tahun terakhir di SMA mirip dengan kelas-kelas sebelumnya: mempelajari beberapa algoritma untuk memanipulasi simbol, tahap yang membutuhkan sedikit intuisi, serta beberapa fakta tentang kemiringan dan luas untuk menyelesaikan soal cerita
Hal pertama yang dipelajari adalah aturan bahwa turunan dari x^n adalah n x^(n-1), yang merupakan bagian dari algoritma diferensiasi
Di universitas, mata kuliah yang sama disebut analisis, dan isinya mendefinisikan berbagai konsep serta membuktikan sifat-sifatnya
Kelas seperti ini umumnya mengikuti struktur tiga bagian: barisan·deret dan konvergensi ke limit, kontinuitas fungsi dan limit fungsi, lalu diferensiasi dan integrasi serta mungkin sebagian teorema Taylor
Struktur ini tidak banyak berubah sejak Cauchy memperkenalkan banyak definisi “modern” dalam buku ajarnya, dengan pengecualian jelas berupa integral yang dikenal sebagai integral Riemann
Saya tidak tahu proses ini jenis yang mana, tetapi karena dimulai dari limit, mungkin lebih dekat ke yang kedua, dan dalam hal itu saya tidak yakin seberapa bergunanya Julia
Saat menilai kecocokannya, poin utamanya tampaknya bukan pemrograman, melainkan bahwa ini mungkin menuntut kematangan matematis
Yang saya maksud dengan kematangan matematis di sini adalah kemampuan menangani definisi yang presisi dan konsep abstrak tanpa menarik banyak kesimpulan keliru, serta mampu mengikuti argumen dalam bentuk pembuktian matematis
Saya sempat membaca sekilas beberapa bagian buku ini dan merasa tertarik; rasanya saya juga bisa menyarankan anak-anak untuk belajar kalkulus dengan cara seperti ini.
Namun saya penasaran dengan kalimat di paragraf pertama pengantar: “Julia adalah bahasa pemrograman open source dengan sintaks yang mudah dipelajari, dan cocok untuk pekerjaan ini.”
Mengapa Julia lebih cocok dibanding bahasa lain?
Seperti notasi matematika standar, jika skalar ditempelkan di depan variabel, itu secara implisit menjadi perkalian; misalnya jika x bernilai 2, maka 3x dievaluasi menjadi 6.
Dukungan Unicode-nya juga kaya, sehingga operator seperti ∈ dan ∉ mungkin terlihat agak berlebihan tetapi bekerja sesuai harapan; π sudah didefinisikan sebelumnya dan bahkan bertipe bilangan irasional, dan √ juga bisa dipakai sebagai operator sehingga √2 adalah ekspresi valid yang menghasilkan nilai floating-point.
Julia tidak hanya mendukung sintaks seperti ini, tetapi juga menyediakan cara mudah untuk mengetikkannya.
Meski sedikit kurang terkait dengan kalkulus, vektor dan matriks adalah tipe data kelas satu, sehingga jauh lebih mudah diketik dan dipahami sekilas dibanding Python.
Bedanya seperti
m = [1 2 3; 4 5 6; 7 8 9]versusm = [[1, 2, 3], [4, 5, 6], [7, 8, 9]].Transposisi dilakukan dengan operator satu karakter
', hasil kali dalam bisa memakai operator titikm ⋅ n, danA\bjuga bekerja seperti di Matlab.Selain itu, Julia mendukung broadcasting dan juga memiliki comprehension, tetapi secara pribadi saya merasa broadcasting membuat comprehension tidak terlalu sering diperlukan.
Bilangan rasional juga bawaan, dengan sintaks yang sangat sederhana seperti
1//2.“Pesaing” utamanya, Python, terkenal punya sintaks operasi matematika yang kurang bagus, dukungan matematika di standard library-nya kecil, sistem tipenya terbatas, dan performa eksekusinya sangat buruk.
Julia memecahkan masalah-masalah ini sambil menyediakan bahasa yang relatif mudah dibaca, sering kali mirip dengan notasi matematika, dan performanya juga cukup baik.
f’danf’’.Dari pengalaman pribadi, “buku kalkulus” terbaik menurut saya bukan memakai Julia, melainkan Haskell, yaitu Learn Physics with Functional Programming, yang hanya bergantung pada library untuk menggambar grafik.
https://www.lpfp.io/
Julia dikenal sebagai “bahasa pemrograman untuk matematika”, dan arah itu mendorong banyak bagian pengembangannya.
Secara eksplisit, Julia mendukung banyak notasi matematika yang cocok dengan tulisan tangan atau simbol LaTeX.
Secara implisit, sepertinya ini merujuk pada sintaks yang disederhanakan ala Python, interoperabilitas yang luas, penggunaan SymPy yang menangani banyak hal dalam tutorial ini, primitif komputasi paralel bawaan, serta kompilasi JIT yang memungkinkan iterasi dan eksplorasi cepat.
https://computationalthinking.mit.edu/Spring21/
Singkatnya, Julia cukup mirip dengan Python dan sama-sama mudah dipakai, tetapi punya sintaks yang jauh lebih kaya untuk mengekspresikan matematika secara langsung.
Notebook-nya juga lebih kaya.
Perbedaan utamanya adalah di notebook Python Anda menjalankan sel, sedangkan notebook Julia menangani hal-hal seperti dependensi.
Jika x diubah menjadi angka atau slider, semua hal yang bergantung padanya ikut diperbarui.
Definisikan grafik dan tambahkan slider, lalu semuanya langsung berjalan.
Saya juga bukan ahli Julia dan sebagian besar bekerja dengan Python dan JavaScript, tetapi dalam kelas serupa, dua hal di atas sangat terlihat jelas.
Di atas itu ada dukungan Unicode yang sangat sering digunakan, dan dalam banyak kasus sengaja bisa terlihat seperti pseudocode.
Menariknya, karena ingin belajar ML, belakangan ini saya mulai mempelajari kembali matematika, yaitu aljabar linear, kalkulus, dan statistik.
Sambil mempelajari berbagai materi, saya juga mencoba implementasi sederhana dengan Python; agak memalukan, tetapi sebelumnya saya belum pernah memakai Python.
Cukup menyenangkan bisa memutar vektor dan menggambar fungsi dengan matplotlib.
Memang bisa digambar dengan tangan, tetapi tidak akan seindah itu.
Saat merancang kursus seperti ini, perlu agak berhati-hati.
Umumnya ini kemungkinan paling menarik bagi orang yang sudah cukup memahami kalkulus dan pemrograman sekaligus, sementara target yang sebenarnya—orang yang sedang mempelajari salah satunya—mungkin belum cukup siap menerima kelas seperti ini.
Secara pribadi, ketika saya mencoba memasukkan sistem aljabar komputer yang agak eksotis seperti Maxima atau Sagemath ke kelas kalkulus, responsnya paling banter hanya biasa saja.
Menurut saya, sebagian masalahnya adalah mahasiswa tahun pertama tidak terlalu tertarik memasang perangkat lunak untuk mata kuliah yang bahkan bukan kelas ilmu komputer.
Namun di kelas yang sedikit lebih tinggi tingkatnya, ini bisa bekerja cukup baik sebagai elemen opsional, dan saya mendapat hasil yang sangat bagus dengan proyek Python di kelas persamaan diferensial biasa.
Fakta bahwa Python bukan bahasa niche jelas juga membantu.
Meski begitu, pada akhirnya tantangan itu layak diambil, dan menurut saya lebih baik daripada menyuruh mereka menghitung semuanya dengan tangan dan mencari nilai di tabel.
Akan bagus jika Anda bisa membagikan referensi apa pun yang digunakan, entah catatan kuliah, kode, slide, buku, atau lainnya.
Terkait hal ini, jika Anda memakai Emacs, ada paket Calc yang mendukung aljabar komputer.
Baru-baru ini saya merilis antarmuka yang membuat Calc jauh lebih mudah digunakan, dan menuliskannya di sini.
http://yummymelon.com/devnull/mathing-in-emacs-with-casual.h...
https://www.emacswiki.org/emacs/MaximaMode
Konsepnya saya suka
Namun, rasanya akan jauh lebih baik jika materi seperti ini dibuat di atas sesuatu seperti MOOCulus, atau setidaknya berangkat dari sana
https://ximera.osu.edu/mooculus/calculus1
Secara keseluruhan, saya lebih memilih MOOCulus
Meski begitu, nilai tambah yang diberikan Calculus with Julia tetap besar
Akan bagus jika keduanya bisa diintegrasikan dengan cara apa pun
Inti kekuatan MOOCulus adalah kualitas tulisannya lebih baik dan jauh lebih tidak bertele-tele, serta berkat latihan terintegrasinya, mahasiswa mengikuti materi dengan lebih cermat
Materi ini juga banyak dipakai di kelas dan sudah cukup matang
Jika di-fork lalu diperkuat dengan Julia, itu akan menjadi peningkatan yang sangat besar; menambahkan contoh aplikasi juga sepertinya demikian
Selain itu, bagian “Equal or Not?” yang pertama saya klik pun memiliki error
Kombinasi Maxima dan Gnuplot, beserta dokumentasi yang disertakan, juga cukup bagus
Seingat saya, dulu ada PDF pengantar/panduan untuk Maxima yang cukup matang
Apakah Julia bisa menjadi pengganti yang layak bagi orang yang biasa memakai Matlab?
Untuk perbedaan detailnya, lihat https://docs.julialang.org/en/v1/manual/noteworthy-differenc...
Rasanya seperti memberikan segelas air es kepada seseorang di neraka
Meminjam ucapan Steve Jobs tentang iTunes untuk Windows—tentu saja, saat itu iTunes belum menjadi kekacauan seperti kemudian
Saya sangat menghormati pencapaian Cleve Moler dan Matlab, terutama dalam membuat LINPACK, EISPACK, dan sebagainya mudah diakses
Mereka juga banyak berusaha mengatasi keterbatasan awal yang hanya memiliki satu tipe data, yaitu matriks
Namun sebagai bahasa serbaguna modern, Julia jauh lebih nyaman dipakai sambil tetap mempertahankan hampir seluruh kekuatan Matlab
Jauh lebih cepat, umumnya memiliki lebih banyak fitur yang lebih baik sebagai bahasa pemrograman, dan paralelisasi juga jauh lebih mudah
Sebagai orang yang pernah memakai keduanya secara profesional, saya akan mengatakan bahwa saat ini Julia umumnya pilihan yang lebih baik
Namun bahasa seperti Matlab atau Stata memiliki sangat banyak algoritma lama yang sudah diimplementasikan, dan bisa saja belum ada implementasi padanannya di Julia
Jika yang Anda butuhkan adalah salah satunya, sering kali sulit membenarkan penggunaan bahasa lain
Dalam praktiknya, memindahkan kode Matlab/Python/Stata ke Julia umumnya cukup mudah
Kode Julia bisa jauh lebih enak dibaca dan jauh lebih berkinerja dibanding kode Matlab
Jika tidak, Julia akan terasa nyaman dan menjadi pengganti yang memadai
Sintaksnya sampai batas tertentu mirip dan memiliki banyak kemudahan terkait array seperti MATLAB
Selain itu, Julia menyediakan sistem tipe yang bagus dan penanganan pemrograman serbaguna yang jauh lebih baik; misalnya hal-hal seperti lokasi fungsi tidak berperilaku aneh
Saya sarankan mencobanya langsung
Tautan PDF di header halaman menghasilkan 404
“Catatan ini dapat dikompilasi menjadi file PDF melalui Quarto. Karena hasilnya cukup besar, file untuk diunduh tidak disediakan. Pembaca yang berminat dapat mengunduh repositori, menginstansiasi environment, lalu menjalankan quarto dari subdirektori quarto untuk merendernya menjadi PDF; file itu akan dibuat. Prosesnya memakan waktu”
“Perhitungan adalah godaan yang harus ditahan selama mungkin”
— J.P. Boyd