Julia ile Kalkülüs
(jverzani.github.io)- Kalkülüsü farklı bakış açılarından anlamaya yardımcı olan öğrenme notları; Julia’nın kolay söz dizimi ve hesaplama gücünü grafikler ve sayısal deneyler için kullanır
- Harvard tarzı rule of four akışına uygun olarak grafiksel, sayısal, cebirsel ve sözel bakış açılarını birlikte ele alır; ancak Julia ile ağırlıklı olarak grafiksel, sayısal ve kısmen cebirsel yönleri gösterir
- Mathematica, Maple, Sage gibi bilgisayar cebiri sistemleri sembolik işlemede güçlüdür; bu notlar ise Julia’yı sayısal hesaplama odaklı bir araç olarak konumlandırır ve gerekli cebirsel işlemleri bunun üzerine ekler
- Öğrenciler kurulum ve arayüz yönergelerini izleyerek ortamı hazırlayabilir,
CalculusWithJuliapaketiyle tekrarlayan işleri ve ortak fonksiyonları basitleştirebilir - Her sayfa, bir kitabın bölümü gibi odaklanmış bir kavramı ele alır; sondaki otomatik değerlendirilen sorular ile giriş düzeyi kalkülüs problemlerini çözmek için gereken hesaplama kavramları kontrol edilebilir
Julia ile kalkülüs öğrenme yaklaşımı
- Calculus with Julia, calculus konusunu
Juliadiliyle öğrenmek için hazırlanmış bir not koleksiyonudur - Julia açık kaynaklı bir programlama dilidir; bu notlarda öğrenmesi kolay söz dizimi ve hesaplama özellikleri, kalkülüs öğrenimine uygun bir araç olarak kullanılır
- Öğrenmeye hazırlanmak için belgeler de birlikte sunulur
- Getting started with Julia: Julia kurulumu ve kullanıcı ayarları rehberi
- Julia interfaces: Kurulu Julia ile etkileşime geçmenin çeşitli yollarına dair rehber
- 1990’ların ortalarından bu yana kalkülüs eğitiminde birden fazla bakış açısını birlikte kullanma eğilimi vardır; Harvard tarzı “rule of four”, mümkün olduğunca grafiksel, sayısal, cebirsel ve sözel unsurları birlikte içermeyi amaçlar
- Bu notlar, Julia aracılığıyla kalkülüsün grafiksel ve sayısal yönlerini, zaman zaman da cebirsel yönlerini incelemeye imkân verecek şekilde düzenlenmiştir
Bilgisayar cebiri sistemlerinden farkı
- Mathematica, Maple, Sage gibi bilgisayar cebiri sistemlerini kalkülüs öğrenimine entegre eden birçok örnek vardır
- WolframAlpha, Mathematica’nın özelliklerini çağırırken esnek ve gayriresmî bir söz dizimine de izin verir; Apple Siri özelliklerinin arka ucu olarak da kullanılabilir
- Bu sistemler öğrenimde cebirsel ve sembolik işlemleri iyi modeller, sayısal yönleri göstermeye yarayan araçlar da sağlar
- Buna karşılık bu notlar Julia’yı esas olarak sayısal hesaplama aracı olarak kullanır; cebirsel ve sembolik işlemleri bunun üzerine ekleyen bir yaklaşımla ele alır
- Sembolik işlemleri elle yapma süreci öğrenme için yararlı olabilir; ancak bilgisayar cebiri sistemleri tamamlanmış sonuçları kolayca üreterek bu alıştırmayı gereksiz tekrar gibi gösterebilir
Öğrenme kapsamı ve sayfa yapısı
- Amaç, bir bilgisayar dilinin mekanik ayrıntılarına takılmadan teknolojiden yararlanarak kalkülüs kavramlarına yaklaşmaktır
- Julia söz dizimi, hesap makinesi kullanmaya kıyasla başlangıç eşiği çok yüksek olmayan, buna karşın genişleme potansiyeli büyük bir dil olarak ele alınır
- Notlar, hesaplama kavramlarını sınırlı bir kümeye indirerek işler
- Yalnızca bu kümeyle bile kalkülüsteki birçok problem çözülebilir
- Programlamanın çeşitli yönleri kapsamlı biçimde ele alınmaz
- Daha ilgili öğrenciler Julia aracılığıyla derinlemesine keşif yapabilir
- Sınırlı hesaplama kavramları içinde, kalkülüs hesaplarını
action(function, arguments...)biçimindeki fonksiyon çağrılarına indirgeyen operatörler yer alır - Birleştirilebilir küçük eylem (action) kümeleri sayesinde giriş düzeyi kalkülüsteki birçok problem ele alınabilir
- Her sayfa, bir kitabın bölümü gibi görece odaklanmış tek bir kavram etrafında düzenlenmiştir
- Sayfa sonunda doğrudan çözülebilecek problemler bulunur ve hepsinde sınırlı sayıda otomatik değerlendirilen yanıt vardır
- Fikirler Strang, Knill, Schey, Hass ve diğerleri, Rogawski ve diğerleri, Angenent, çeşitli Wikipedia sayfaları ve başka kaynaklardan alınmıştır
Sunulan materyaller ve çalıştırma yöntemi
- Notlarla birlikte
CalculusWithJuliaJulia paketi sunulur- Ortak işleri basitleştiren basit fonksiyonlar sağlar
- Tekrar tekrar kullanılacak yararlı paketleri yükler
- Notlar Quarto book biçiminde sunulur; Quarto kitaplarıyla ilgili bilgiler Quarto belgelerinde bulunabilir
- Quarto ile PDF dosyası derlenebilir; ancak birkaç parçanın uyumlu hâle getirilmesi gerekir, sonuç ideal değildir ve dosya boyutu da oldukça büyüktür
- PDF sürümünü indirme bağlantısı sunulur
- Katkılar “Edit this page” bağlantısı üzerinden ek konu önerileri, hata düzeltmeleri ve yazım hatası düzeltmeleri şeklinde yapılabilir; katkıda bulunanlar contributors sayfasında kaydedilir
- Julia,
juliauparacıyla kolayca kurulabilir - Web üzerinde Julia çalıştıran
binder.orgörneği bağlantıları da sunulur; ancak kaynak kısıtları vardır- SymPy içermeyen imaj
- SymPy içeren imaj, yükleme süresi daha uzundur
1 yorum
Hacker News yorumları
Çocuğum lise 2. sınıfa geçmek üzere ve SVC aldığı için kişisel olarak çok yerinde bir kaynak gibi görünüyor
Yazar bu başlığı görüyorsa, yalnızca Python’a giriş düzeyinde deneyimi olan bir lise öğrencisi için de uygun olup olmadığını merak ediyorum
Kod sözdizimini dert etmektense problemleri bizzat çözmek ve temel kavramlar üzerine düşünmek önemli; elle pratik yapmak konuyu daha iyi içselleştirmeyi sağlar
Programlama kısmı iyi, ama hızlıca bakınca matematik açıklamalarının, zaten kalkülüs bilen biri değilse son derece kafa karıştıracak şekilde yazıldığını görüyorum; öğrenci aslında açıklama yetersiz olduğu hâlde matematikte kötü olduğunu düşünebilir
Örneğin [1]’deki şekil, eksen etiketleri bile olmayan L biçimli gölgeli bir kutudan geçen bir eğri gösteriyor; ardından parametrik denklemler ve çeşitli yerine koymalarla kısmi integrasyon formülü türetiliyor
Kısmi integrasyonu iyi bilen biri açısından bile bu, formülü türetme ya da açıklama biçimi olarak neredeyse en kafa karıştırıcı olanlardan biri; kavramı zaten anlamış biri değilseniz şekil de pek yardımcı olmuyor
James Stewart’ın “Calculus”ı gibi çok iyi çizimler ve net açıklamalar gördüyseniz aradaki fark çok belirgin
Genelde kısmi integrasyon anlatımı, yazarın yaptığı gibi çarpımın türevinden başlar; ancak önce birkaç örnekle çarpım türevi yaptırıp sonucun ters türev biçimine dair sezgi oluşturur, sonra iki tarafı integral alıp integrali ayırarak formülü türetir[2]
Bu çok daha açık ve takip etmesi kolaydır; gerçekten öğrenciye yardımcı olmak istiyorsanız, birden fazla kez kısmi integrasyon yaparken işaretler yüzünden zorlanmasınlar diye tablo yöntemi/“DI” yöntemi gibi şeyleri de öğretmek iyi olur
[1] https://jverzani.github.io/CalculusWithJuliaNotes.jl/integra...
[2] Ben öğrenirken hazırladığım türetme notları burada. Yeni başlayanlara anlatmak için yazılmış değil, kişisel notlarım; yine de yukarıdaki örnekten çok daha kolay takip ediliyor https://publish.obsidian.md/uncarved/3+Resources/Public/Inte...
Bu yüzden öneri olarak Kleppner ve Ramsey’nin Quick Calculus kitabına bakmasını söylemek isterim
İlk kez karşılaşılan kavramlar için sezgi geliştirmede kullandığım hiçbir kitap buna yaklaşamadı
Onu kavradıktan sonra iyi herhangi bir kitap olur; James Stewart’ın kitabı da harika, ama çok kalın olduğu için 1. sayfadan itibaren tüm problemleri yaptırmaktansa uygun okumalar ve problemler seçilen bir başvuru kitabı gibi kullanmak daha iyi
Esas mesele en baştan türev, integral ve limitin ne olduğunu temelden doğru oturtmak; bu konuda Quick Calculus ezici biçimde iyiydi
Öğrenci programlamaya ilgi duyuyorsa, bu Julia kitabından ya da benzer kitaplardan uygun gördüğünüz alıştırmaları seçip Stewart’ı tamamlamak da iyi olur; isterse bunları Python’la çözmesi de gayet yeterli
Ben de aynı yaşta kalkülüs bilgimi pekiştirmek için Python’la sayısal integratör ve sembolik türevleyici yazmıştım; ikisi de faydalı ve eğlenceliydi
Özellikle sembolik türev sihir gibi gelmişti ama sonuçta yapılan şey parse etmek ve matematikte öğrendiğim her kuralı sürekli eklemekti
Lisede son iki yılda öğrendiğim kalkülüs, önceki sınıflara benzer şekilde; sembolleri dönüştürmeye yarayan çeşitli algoritmalar, biraz sezgi gerektiren adımlar ve eğim ile alan hakkında birkaç olgu öğrenip bunlarla sözel problemler çözmekten ibaretti
İlk öğrendiğim şey, türev algoritmalarından biri olan x^n’in türevinin n x^(n-1) olduğu kuralıydı
Üniversitede aynı derse analiz deniyordu; çeşitli kavramları tanımlamak ve özelliklerini kanıtlamak üzerineydi
Bu tür dersler genelde üç parçalı bir yapıyı izler: diziler/seriler ve limitlere yakınsama, fonksiyonların sürekliliği ve fonksiyon limitleri, türev ve integral ile muhtemelen Taylor teoreminin bir kısmı
Cauchy ders kitabında birçok “modern” tanımı tanıttığından beri bu yapı pek değişmedi; bariz istisna, Riemann integrali olarak bilinen integral konusu
Bu dersin hangi tür olduğunu bilmiyorum ama limitlerle başladığına göre ikincisine daha yakın olabilir; o durumda Julia’nın ne kadar faydalı olacağından pek emin değilim
Uygunluğu değerlendirirken asıl mesele, programlamadan çok matematiksel olgunluk gerektirebilmesi gibi görünüyor
Burada matematiksel olgunluk derken, kesin tanımlar ve soyut kavramlarla uğraşırken yığınla yanlış sonuç çıkarmadan ilerleyebilme ve matematiksel kanıt biçimindeki akıl yürütmeleri takip edebilme becerisine yakın bir şeyi kastediyorum
Kitaba biraz oradan buradan göz attım; ilginçti ve çocuklara kalkülüsü bu şekilde öğrenmelerini önerebileceğimi hissettim.
Ancak önsözün ilk paragrafındaki “Julia, öğrenmesi kolay sözdizimine sahip açık kaynaklı bir programlama dilidir ve bu iş için çok uygundur” ifadesi kafama takıldı.
Julia neden diğer dillerden daha uygun?
Standart matematik gösteriminde olduğu gibi bir değişkenin önüne skaler koyarsanız örtük olarak çarpma olur; örneğin x, 2 ise 3x, 6 olarak değerlendirilir.
Unicode desteği de zengin; ∈ ve ∉ gibi operatörler biraz fazla gelebilir ama beklendiği gibi çalışır, π önceden tanımlıdır ve hatta irrasyonel sayı türündedir, √ de operatör olarak kullanılabilir; bu yüzden √2 geçerli bir ifade olup kayan noktalı bir değere dönüşür.
Julia yalnızca bu sözdizimini desteklemekle kalmaz, bunları kolayca girmenin yollarını da sağlar.
Kalkülüsle biraz daha az ilgili ama vektörler ve matrisler birinci sınıf türler olduğu için Python’a göre yazması ve gözle anlaması çok daha kolaydır.
Fark
m = [1 2 3; 4 5 6; 7 8 9]ilem = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]arasındaki farktır.Transpoz tek karakterlik
'operatörüyle yapılır, iç çarpım nokta operatörüm ⋅ nile mümkündür,A\bde Matlab’daki gibi çalışır.Ayrıca broadcasting’i destekler; comprehension’lar da var ama kişisel olarak broadcasting sayesinde comprehension’lara daha az ihtiyaç duydum.
Rasyonel sayılar da yerleşik gelir ve
1//2gibi çok basit bir sözdizimi kullanır.Başlıca “rakibi” Python, matematiksel işlem sözdiziminin kötü olmasıyla bilinir; standart kütüphanesindeki matematik desteği de küçüktür, tür sistemi sınırlıdır ve çalışma performansı da çok kötüdür.
Julia bu sorunları çözerken nispeten okunması kolay bir dil sunar; matematiksel gösterime sık sık benzer ve performansı da oldukça iyidir.
f’vef’’gibi el yazısı gösterimleri mümkün kılan son ek gösterim özelliği gibi bazı Julia özellikleri ilginçti.Kişisel deneyimime göre en iyi “kalkülüs kitabı” Julia değil Haskell kullanıyor ve yalnızca grafik çizimi için bir kütüphaneye bağımlı: Learn Physics with Functional Programming.
https://www.lpfp.io/
Julia “matematik için programlama dili” olarak bilinir ve bu yönelim geliştirme sürecinin büyük bölümünü yönlendirmiştir.
Açıkça, el yazısı ya da LaTeX sembolleriyle eşleşen birçok matematiksel gösterimi destekler.
Örtük olarak ise Python tarzı sadeleştirilmiş sözdizimine, geniş birlikte çalışabilirliğe, bu öğreticide işin büyük kısmını üstlenen SymPy kullanımına, yerleşik paralel hesaplama temel öğelerine ve hızlı yineleme ile keşfi mümkün kılan JIT derlemeye işaret ediyor gibi.
https://computationalthinking.mit.edu/Spring21/
Çok kısaca söylemek gerekirse Python’a bir ölçüde benzer ve onun gibi yazması kolaydır, ama matematiği doğrudan ifade eden sözdizimi çok daha zengindir.
Notebook’ları da daha zengindir.
Temel fark şu: Python notebook’larında hücre çalıştırırsınız; Julia notebook’ları ise bağımlılık gibi şeyleri ele alır.
x’i bir sayı ya da slider olarak değiştirirseniz ona bağımlı olan her şey güncellenir.
Bir grafik tanımlayıp slider eklerseniz doğrudan çalışır.
Ben de Julia uzmanı değilim ve çoğunlukla Python ile JavaScript’te çalışıyorum, ama benzer derslerde yukarıdaki iki nokta çok belirgin biçimde öne çıkıyor.
Buna çok sık kullanılan Unicode desteği de ekleniyor; birçok durumda kasıtlı olarak sözde kod gibi görünebiliyor.
İlginç bir şekilde, ML öğrenmek istediğim için yakın zamanda matematiği, yani lineer cebir, kalkülüs ve istatistiği yeniden öğrenmeye başladım.
Çeşitli konuları öğrenirken basit Python uygulamaları da yapıyorum; utanarak söyleyeyim, daha önce Python kullanmışlığım yoktu.
Vektörleri döndürebilmek ve matplotlib ile fonksiyon çizebilmek oldukça güzel.
Elle de çizebilirim ama o kadar güzel çizemezdim.
Böyle bir dersi tasarlarken biraz dikkatli olmak gerekir.
Genel olarak, zaten hem kalkülüs hem de programlama konusunda bir miktar bilgi sahibi olan kişilere en ilginç gelme olasılığı yüksek; asıl hedeflenen, bu ikisinden birini öğrenen kişiler ise böyle bir dersi benimsemeye daha az hazır olabilir.
Kişisel olarak kalkülüs dersine Maxima veya Sagemath gibi biraz egzotik bilgisayar cebiri sistemleri katmaya çalıştığımda tepkiler en iyi ihtimalle ılıktı.
Sorunun bir kısmının, birinci sınıf öğrencilerinin bilgisayar bilimi dersi olmayan bir ders için yazılım kurmaya pek ilgi duymamaları olduğunu düşünüyorum.
Yine de biraz daha üst düzey derslerde seçmeli bir unsur olarak oldukça iyi işleyebilir; adi diferansiyel denklemler dersinde Python projesiyle çok iyi sonuçlar aldım.
Python’ın niş bir dil olmaması da kesinlikle yardımcı oldu.
Yine de sonunda bu zorluğa değdiğini ve her şeyi elle hesaplatıp tablolardan değer aratmaktan daha iyi olduğunu düşünüyorum.
Referans materyaliniz neydi; ders notları, kod, slaytlar, kitaplar, ne varsa paylaşabilirseniz iyi olur.
Bununla bağlantılı olarak Emacs kullanıyorsanız, bilgisayar cebirini destekleyen Calc paketi var.
Yakın zamanda Calc’ı çok daha kolay kullanılır hale getiren bir arayüz yayımladım ve bunu burada yazdım:
http://yummymelon.com/devnull/mathing-in-emacs-with-casual.h...
https://www.emacswiki.org/emacs/MaximaMode
Kavram hoşuma gitti
Ancak bu tür bir materyalin MOOCulus gibi bir şeyin üzerine kurulmuş olması ya da oradan yola çıkması çok daha iyi olurdu gibi geliyor
https://ximera.osu.edu/mooculus/calculus1
Genel olarak MOOCulus'u daha çok tercih ediyorum
Yine de Calculus with Julia'nın kattığı değer büyük
İkisinin bir şekilde entegre edilebilmesi iyi olurdu
MOOCulus'un özü, metin kalitesinin daha iyi ve çok daha az laf kalabalığı içermesi; ayrıca entegre alıştırmalar sayesinde öğrencilerin içeriği dikkatle takip etmesi
Derslerde çok kullanılıyor ve epey cilalanmış durumda
Fork'lanıp Julia ile güçlendirilirse çok büyük bir iyileştirme olur; uygulama örnekleri eklenirse de muhtemelen aynı şekilde
Üstelik ilk tıkladığım “Equal or Not?”ta da hata var
Maxima ve Gnuplot ile birlikte gelen dokümantasyon kombinasyonu da oldukça iyi
Maxima için epey tamamlanmış bir PDF giriş kitabı/kılavuzu da olduğunu hatırlıyorum
Matlab kullanan biri için Julia geçerli bir alternatif olabilir mi?
Ayrıntılı farklar için https://docs.julialang.org/en/v1/manual/noteworthy-differenc... adresine bakılabilir
Cehennemdeki birine bir bardak buzlu su uzatmaya benziyor
Steve Jobs'ın Windows için iTunes hakkında söylediği sözden ödünç alırsak böyle; tabii o zaman iTunes, sonradan dönüştüğü karmakarışık hâlde değildi
Cleve Moler ve Matlab'ın başardıklarına, özellikle LINPACK ve EISPACK gibi şeyleri kolay erişilebilir kılmasına büyük saygım var
Başlangıçta yalnızca matris olan tek bir veri tipi sınırlamasını aşmak için de çok uğraştılar
Ama Julia, modern bir genel amaçlı dil olarak çalışması çok daha keyifli olurken Matlab'ın gücünün neredeyse tamamını koruyor
Çok daha hızlı, genel olarak bir programlama dili olarak daha iyi birçok özelliği var ve paralelleştirme de çok daha kolay
İkisini de profesyonel olarak kullanmış biri olarak bugün genelde Julia'nın daha iyi seçim olduğunu söylerim
Ancak Matlab veya Stata gibi dillerde hâlihazırda uygulanmış muazzam miktarda mevcut algoritma var ve Julia'da karşılık gelen bir implementasyon olmayabilir
İstediğiniz şey bunlardan biriyse, başka bir dil kullanmayı gerekçelendirmemek çoğu zaman zor olur
Pratikte Matlab/Python/Stata kodunu Julia'ya taşımak genelde oldukça kolaydı
Julia kodu Matlab kodundan çok daha okunaklı ve çok daha performanslı olabilir
Değilseniz Julia iyi hissettiren ve yeterli bir alternatif olacaktır
Sözdizimi bir ölçüde benzer ve MATLAB'ın diziyle ilgili kolaylıklarının çoğuna sahip
Üstelik iyi bir tip sistemi ve genel amaçlı programlama için çok daha iyi işleyiş sunuyor; örneğin fonksiyonların konumu gibi şeyler tuhaf davranmıyor
Denemenizi öneririm
Sayfa başlığındaki PDF bağlantısı 404 veriyor
“Bu notlar Quarto aracılığıyla PDF dosyası olarak derlenebilir. Çıktı oldukça büyük olduğu için indirme dosyası sunulmuyor. İlgilenen okurlar depoyu indirip ortamı instantiate ettikten sonra quarto alt dizininde quarto'yu çalıştırarak PDF'ye render ederse dosya oluşturulacaktır. Biraz zaman alır”
“Hesaplama, mümkün olduğunca uzun süre direnilmesi gereken bir ayartıdır”
— J.P. Boyd