3 puan yazan GN⁺ 2024-05-19 | 1 yorum | WhatsApp'ta paylaş
  • 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, CalculusWithJulia paketiyle 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 Julia diliyle öğ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
  • 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 CalculusWithJulia Julia 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, juliaup aracı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

 
GN⁺ 2024-05-19
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

    • Bir lise öğrencisi kalkülüs öğrenecekse, programlamadan önce bir süre kâğıt kalemle öğrenmesinin daha iyi olduğunu düşünüyorum
      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
    • Kesinlikle hayır derim
      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...
    • O yaşta, yani 11. sınıfta kalkülüsü kendi kendime öğrenmiştim; başta doğal olarak zorlandım ama yarım yamalak birkaç kitabı karıştırıp kavramların yerine oturduğu bir kitap bulana kadar dayandım
      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
    • Bu ders için Julia’yı ya da programlamayı önceden görmüş olmak gerekmediğini düşünüyorum
    • “Kalkülüs” sözcüğü epey farklı anlamlara gelebilir; derse, okula ve ülkeye göre değişebilir
      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?

    • Julia’nın matematik için yararlı pek çok küçük avantajı var.
      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] ile m = [[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 ⋅ n ile mümkündür, A\b de 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//2 gibi çok basit bir sözdizimi kullanır.
    • Çünkü Julia, sayısal analiz hedeflenerek tasarlanmış bir dildir.
      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.
    • Ben de oradan buradan kurcaladım; kitabın biçimi ve ilerleyişi biraz kafa karıştırıcı geldi ama f’ ve f’’ 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.
    • İyi bir genel bakış burada var:
      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.
    • Julia, standart kütüphane lineer cebiri ve 1’den başlayan indeksler gibi MATLAB’ın DNA’sının büyük kısmını miras almış durumda.
      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.

    • İstatistik eğitiminde de öğrencilerin istatistik kavramlarını ve istatistik yazılımını aynı anda öğrenmek zorunda kalmasından kaynaklanan yaygın bir zorluk bu.
      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.
    • Cebirin ötesinde eğitim almamış, kendi kendini yetiştirmiş bir programcı olarak bu materyal gerçekten iyi görünüyor; belki de tam o küçük hedef kitlenin içindeyim.
    • Adi diferansiyel denklemler dersinde Python projesiyle iyi sonuçlar aldıysanız hangi ders kitabını kullandığınızı merak ediyorum.
      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...

  • 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

    • Web sitesine baktım; nasıl kullanılacağını anlamak bile epey zor
      Ü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?

    • Kesinlikle mümkün
      Ayrıntılı farklar için https://docs.julialang.org/en/v1/manual/noteworthy-differenc... adresine bakılabilir
    • Kesinlikle evet
      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
    • Birçok açıdan evet
      Ç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ı
    • Kesinlikle evet
      Julia kodu Matlab kodundan çok daha okunaklı ve çok daha performanslı olabilir
    • Belirli MATLAB toolbox'larına veya entegrasyon özelliklerine bağımlı olup olmadığınıza bağlı
      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

    • Bilerek kapatılmış gibi görünüyor
      “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