Julia का उपयोग करके Calculus
(jverzani.github.io)- Calculus को कई दृष्टिकोणों से समझने में मदद करने वाले learning notes, जिनमें Julia की आसान syntax और computational क्षमताओं का उपयोग graphs और numerical experiments में किया गया है
- Harvard-style rule of four flow के अनुसार graph, numerical, algebraic और verbal perspectives को साथ में कवर किया गया है, हालांकि Julia के जरिए मुख्य रूप से graph, numerical और कुछ algebraic पहलू दिखाए गए हैं
- Mathematica, Maple, Sage जैसे computer algebra systems symbolic processing में मजबूत हैं, जबकि ये notes Julia को numerical computing-केंद्रित tool के रूप में रखते हैं और जरूरत के अनुसार algebraic processing जोड़ते हैं
- Learners installation और interface guidance के अनुसार environment तैयार कर सकते हैं, और
CalculusWithJuliapackage से repetitive tasks और common functions को सरल बना सकते हैं - हर page किताब के एक section की तरह किसी focused concept को कवर करता है, और अंत में दिए गए self-grading problems के जरिए introductory calculus solving के लिए जरूरी computational concepts जांचे जा सकते हैं
Julia से Calculus सीखने का तरीका
- Calculus with Julia
Julialanguage के साथ calculus सीखने के लिए notes का collection है - Julia एक open source programming language है, और इन notes में इसकी सीखने में आसान syntax और computational features को Calculus सीखने के लिए उपयुक्त tool के रूप में इस्तेमाल किया गया है
- Learning preparation के लिए documents भी साथ में दिए गए हैं
- Getting started with Julia: Julia installation और user configuration guide
- Julia interfaces: Julia installation के साथ interact करने के कई तरीकों की guide
- 1990 के दशक के मध्य के बाद से Calculus education में कई perspectives को साथ इस्तेमाल करने की प्रवृत्ति रही है, और Harvard का “rule of four” जहां तक संभव हो graphical, numerical, algebraic और verbal elements को साथ शामिल करने पर जोर देता है
- ये notes Julia के जरिए Calculus के graphical और numerical aspects, और कभी-कभी algebraic aspects तक को देखने की सुविधा देने के लिए बनाए गए हैं
Computer Algebra Systems से अंतर
- Mathematica, Maple, Sage जैसे computer algebra systems को Calculus learning में integrate करने के कई उदाहरण हैं
- WolframAlpha Mathematica की capabilities को call करते हुए भी flexible informal syntax की अनुमति देता है, और Apple Siri features के backend के रूप में भी इस्तेमाल हो सकता है
- ऐसे systems learning में algebra और symbolic processing को अच्छी तरह model करते हैं, और numerical aspects दिखाने के साधन भी देते हैं
- इसके उलट, ये notes Julia को मुख्य रूप से numerical computing tool के रूप में इस्तेमाल करते हैं, और algebraic/symbolic processing को उसके ऊपर जोड़ने के तरीके से approach करते हैं
- Symbolic processing को खुद हाथ से करने की प्रक्रिया learning के लिए उपयोगी हो सकती है, लेकिन computer algebra systems तैयार result आसानी से बना देते हैं, जिससे वह practice repetitive लग सकती है
Learning scope और page structure
- लक्ष्य computer language की mechanical details में बंधे बिना technology का उपयोग करके Calculus concepts तक पहुंचना है
- Julia syntax को calculator इस्तेमाल करने की तुलना में शुरुआती entry बहुत ज्यादा कठिन नहीं, लेकिन काफी extensible language के रूप में लिया गया है
- Notes computational concepts को एक limited set तक सीमित करके कवर करते हैं
- इसी set से भी Calculus के कई problems solve किए जा सकते हैं
- Programming के कई aspects को गहराई से कवर नहीं किया गया है
- ज्यादा रुचि रखने वाले learners Julia के जरिए गहराई से explore कर सकते हैं
- Limited computational concepts में ऐसे operators शामिल हैं जो Calculus computations को
action(function, arguments...)form की function calls में reduce करते हैं - Composable छोटी actions के collection के जरिए introductory Calculus के कई problems कवर किए जा सकते हैं
- हर page किताब के एक section की तरह अपेक्षाकृत focused एक concept के इर्द-गिर्द structured है
- Page के अंत में खुद हल करने के लिए problems हैं, और सभी के limited number of self-grading answers हैं
- Ideas Strang, Knill, Schey, Hass आदि, Rogawski आदि, Angenent, कई Wikipedia pages और अन्य sources से लिए गए हैं
Provided resources और चलाने का तरीका
- Notes के साथ
CalculusWithJuliaJulia package भी दिया गया है- Common tasks को सरल बनाने वाले simple functions देता है
- बार-बार इस्तेमाल होने वाले useful packages load करता है
- Notes Quarto book format में उपलब्ध हैं, और Quarto books के बारे में जानकारी Quarto documentation में देखी जा सकती है
- Quarto से PDF files compile की जा सकती हैं, लेकिन कई parts को align करना पड़ता है, result optimal नहीं है, और file size भी काफी बड़ा है
- PDF version download उपलब्ध है
- Contributions “Edit this page” link के जरिए additional topics सुझाने, errors fix करने और typos correct करने के रूप में किए जा सकते हैं, और contributors को contributors में दर्ज किया जाता है
- Julia को
juliauputility से आसानी से install किया जा सकता है - Web पर Julia चलाने के लिए
binder.orginstance links भी दिए गए हैं, लेकिन resource constraints हैं- SymPy के बिना image
- SymPy के साथ image, loading time ज्यादा लंबा
1 टिप्पणियां
Hacker News की राय
मेरा बच्चा अब हाई स्कूल की 11वीं कक्षा में जा रहा है और इसी समय SVC ले रहा है, इसलिए निजी तौर पर यह सामग्री काफ़ी उपयुक्त लगती है
अगर लेखक यह थ्रेड देख रहे हों, तो जानना चाहूँगा कि क्या यह ऐसे हाई स्कूल छात्र के लिए भी उपयुक्त है जिसने केवल Python का शुरुआती परिचय लिया हो
कोड syntax की चिंता करने से ज़्यादा ज़रूरी है कि सवालों को सीधे हल किया जाए और बुनियादी concepts पर सोचा जाए, और हाथ से अभ्यास करने पर चीज़ें बेहतर ढंग से भीतर बैठती हैं
programming वाला हिस्सा ठीक है, लेकिन जल्दी से देखने पर math की व्याख्या इस तरह लिखी गई है कि अगर किसी को पहले से calculus न आता हो तो यह बहुत उलझाऊ हो सकती है, और छात्र को लग सकता है कि वह math में कमज़ोर है जबकि असल में समस्या सिर्फ़ अपर्याप्त व्याख्या की है
उदाहरण के लिए [1] में चित्र एक L-आकार के shaded box जैसा है जिसमें axis labels भी नहीं हैं और उसके बीच से एक curve गुजरती है, फिर उसके बाद parametric equations और कई substitutions के ज़रिए integration by parts का formula निकाला गया है
integration by parts अच्छी तरह जानने वाले के नज़रिए से भी, formula निकालने या समझाने के तरीक़ों में यह लगभग सबसे ज़्यादा उलझाऊ तरीक़ों में से एक है, और जिसने concept पहले से न समझा हो उसके लिए चित्र भी ज़्यादा मददगार नहीं है
अगर आपने James Stewart की “Calculus” जैसी बेहतरीन diagrams और स्पष्ट व्याख्या देखी हो, तो अंतर बहुत साफ़ दिखता है
आम तौर पर integration by parts की व्याख्या लेखक की तरह product rule से शुरू होती है, लेकिन पहले कुछ उदाहरणों के साथ product differentiation करके नतीजे के antiderivative रूप की एक intuition बनाई जाती है, फिर दोनों पक्षों को integrate करके और integrals को अलग करके formula निकाला जाता है[2]
यह काफ़ी ज़्यादा स्पष्ट और follow करने में आसान है, और अगर सचमुच छात्रों की मदद करनी हो, तो कई बार integration by parts करते समय signs की परेशानी से बचाने के लिए table method/“DI” method जैसी चीज़ें भी सिखाना बेहतर है
[1] https://jverzani.github.io/CalculusWithJuliaNotes.jl/integra...
[2] जब मैं यह सीख रहा था तब बनाए गए derivation notes यहाँ हैं। यह beginners को समझाने के लिए नहीं, बल्कि निजी notes के रूप में लिखे गए थे, फिर भी ऊपर वाले उदाहरण की तुलना में इन्हें follow करना कहीं आसान है https://publish.obsidian.md/uncarved/3+Resources/Public/Inte...
इसलिए मेरी सिफ़ारिश होगी कि Kleppner और Ramsey की Quick Calculus देखें
किसी नए concept की intuition बनाने के मामले में, मैंने जितनी भी किताबें इस्तेमाल कीं, उनमें से कोई भी इस किताब के क़रीब नहीं पहुँची
इसे सीख लेने के बाद कोई भी अच्छी किताब ठीक है, और James Stewart की किताब भी शानदार है, लेकिन वह बहुत मोटी है, इसलिए उसे पेज 1 से हर सवाल कराने वाली किताब की तरह नहीं बल्कि उपयुक्त reading और problems चुनने के reference की तरह इस्तेमाल करना बेहतर है
असली बात यह है कि शुरुआत से ही derivative, integral, और limit क्या होते हैं, इसकी बुनियाद ठीक से बैठनी चाहिए, और इस मामले में Quick Calculus मेरे लिए बहुत आगे थी
अगर छात्र की programming में रुचि है, तो इस Julia किताब या ऐसी ही किसी किताब से समझदारी के अनुसार अभ्यास प्रश्न चुनकर Stewart को पूरक सामग्री की तरह इस्तेमाल किया जा सकता है, और चाहें तो Python में हल करना भी पूरी तरह ठीक है
मैंने भी उसी उम्र में calculus की समझ मज़बूत करने के लिए Python में numerical integrator और symbolic differentiator बनाए थे, और दोनों ही उपयोगी और मज़ेदार थे
ख़ासकर symbolic differentiation जादू जैसा लगा था, लेकिन अंत में वह parsing करने और math में सीखे हर rule को एक-एक करके जोड़ते जाने का ही काम था
हाई स्कूल के आख़िरी दो वर्षों में जो calculus मैंने पढ़ा, वह पिछली कक्षाओं जैसा ही था: symbols को manipulate करने वाले कई algorithms, थोड़ी intuition की ज़रूरत, और slope तथा area के बारे में कुछ तथ्य सीखकर word problems हल करना
सबसे पहले जो सीखा था, वह differentiation algorithm का एक हिस्सा था: x^n का derivative n x^(n-1) होता है
विश्वविद्यालय में इसी विषय को analysis कहा गया, और वहाँ कई concepts को define करके उनके गुणों को prove किया जाता था
ऐसे courses आम तौर पर तीन हिस्सों में बँटे होते हैं: sequences, series और limits की ओर convergence; functions की continuity और function limits; differentiation और integration, और शायद Taylor theorem का कुछ हिस्सा
Cauchy द्वारा पाठ्यपुस्तकों में कई “modern” definitions लाने के बाद से यह संरचना बहुत नहीं बदली है, और स्पष्ट अपवाद के रूप में शायद केवल वही integration है जिसे Riemann integration कहा जाता है
मुझे नहीं पता यह कोर्स किस प्रकार का है, लेकिन चूँकि यह limits से शुरू होता है, इसलिए यह दूसरे प्रकार के ज़्यादा क़रीब हो सकता है, और उस स्थिति में Julia कितनी उपयोगी होगी, यह मुझे स्पष्ट नहीं है
उपयुक्तता का आकलन करते समय मुख्य बात यह लगती है कि programming से ज़्यादा यह mathematical maturity की माँग कर सकता है
यहाँ mathematical maturity से मेरा मतलब उस क्षमता से है जिसमें व्यक्ति सटीक definitions और abstract concepts के साथ काम कर सके बिना ढेर सारे ग़लत निष्कर्ष निकाले, और mathematical proofs के रूप वाले तर्कों को समझकर follow कर सके
मैंने किताब को थोड़ा-थोड़ा इधर-उधर से देखा, और यह दिलचस्प लगी; ऐसा भी लगा कि बच्चों को इस तरीके से calculus सीखने की सलाह दी जा सकती है।
लेकिन भूमिका के पहले पैराग्राफ में यह पंक्ति — “Julia एक open source programming language है जिसकी syntax सीखना आसान है और यह इस काम के लिए अच्छी तरह उपयुक्त है” — जिज्ञासा जगाती है।
Julia दूसरी भाषाओं की तुलना में अधिक उपयुक्त क्यों है?
standard mathematical notation की तरह, यदि किसी variable के आगे scalar लिखें तो वह implicit multiplication बन जाता है; उदाहरण के लिए, अगर x का मान 2 है तो 3x का मान 6 होगा।
Unicode support भी बहुत समृद्ध है, इसलिए ∈ और ∉ जैसे operators थोड़ा ज़्यादा लग सकते हैं, लेकिन वे उम्मीद के मुताबिक काम करते हैं; π पहले से defined है, और वह एक irrational number type भी है; यहाँ तक कि √ को भी operator की तरह इस्तेमाल किया जा सकता है, इसलिए √2 एक valid expression है और floating-point value देता है।
Julia सिर्फ ऐसी syntax को support नहीं करती, बल्कि उसे आसानी से टाइप करने के तरीके भी देती है।
calculus से थोड़ा कम जुड़ा हुआ बिंदु यह है कि vector और matrix first-class data types हैं, इसलिए Python की तुलना में उन्हें लिखना और नज़र से समझना कहीं आसान है।
m = [1 2 3; 4 5 6; 7 8 9]बनामm = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]का यही फर्क है।transpose एक single-character operator
'से होता है, dot productm ⋅ noperator से किया जा सकता है, औरA\\bभी Matlab की तरह काम करता है।इसके अलावा यह broadcasting को support करती है, और comprehension भी हैं, लेकिन मुझे व्यक्तिगत रूप से broadcasting की वजह से comprehension की ज़रूरत कम पड़ी।
rational numbers भी built-in हैं और उनकी syntax
1//2जैसी बहुत सरल है।इसका मुख्य “प्रतिद्वंद्वी” Python गणितीय operations की syntax के मामले में कमजोर माना जाता है, standard library में math support भी सीमित है, type system भी बंधा हुआ है, और execution performance भी बहुत खराब है।
Julia इन समस्याओं को हल करते हुए एक ऐसी भाषा देती है जिसे पढ़ना अपेक्षाकृत आसान है, जो अक्सर mathematical notation से मिलती-जुलती लगती है, और performance भी काफ़ी अच्छी है।
f’औरf’’जैसी handwritten notation को संभव बनाने वाली postfix notation जैसी कुछ Julia features दिलचस्प लगीं।मेरे निजी अनुभव में सबसे अच्छी “calculus book” Julia नहीं बल्कि Haskell का उपयोग करती है, और graph plotting library पर ही निर्भर रहती है: Learn Physics with Functional Programming।
https://www.lpfp.io/
Julia को “गणित के लिए programming language” के रूप में जाना जाता है, और यही दिशा इसके development के बड़े हिस्से को चलाती रही है।
स्पष्ट रूप से, यह handwritten या LaTeX symbols से मेल खाने वाली बहुत-सी mathematical notation को support करती है।
और अप्रत्यक्ष रूप से, शायद इसका संकेत Python-जैसी सरल syntax, व्यापक interoperability, इस tutorial में बहुत काम संभालने वाले SymPy के उपयोग, built-in parallel computation primitives, और तेज़ iteration व exploration को संभव बनाने वाले JIT compilation की ओर है।
https://computationalthinking.mit.edu/Spring21/
बहुत संक्षेप में कहें तो यह कुछ हद तक Python जैसी है और उतनी ही आसान भी, लेकिन इसमें गणित को सीधे व्यक्त करने वाली syntax कहीं अधिक समृद्ध है।
इसके notebooks भी अधिक समृद्ध हैं।
मुख्य अंतर यह है कि Python notebook में आप cells चलाते हैं, जबकि Julia notebooks dependency जैसी चीज़ों को संभालती हैं।
अगर x को किसी संख्या या slider में बदल दें, तो उस पर निर्भर सारी चीज़ें अपडेट हो जाती हैं।
graph define कीजिए और slider जोड़ दीजिए, बस वह काम करने लगता है।
मैं भी Julia का विशेषज्ञ नहीं हूँ और ज़्यादातर Python व JavaScript में काम करता हूँ, लेकिन इसी तरह की classes में ये दोनों बातें बहुत स्पष्ट दिखती हैं।
इसके साथ बहुत बार उपयोगी पड़ने वाला Unicode support भी है, और कई मामलों में यह जानबूझकर pseudocode जैसी दिख सकती है।
दिलचस्प बात यह है कि ML सीखने की इच्छा से मैंने हाल ही में फिर से गणित, यानी linear algebra, calculus, और statistics, पढ़ना शुरू किया है।
अलग-अलग विषय सीखते समय मैं Python में छोटे implementation भी साथ में आज़मा रहा हूँ; मानना पड़ेगा कि शर्म की बात है, लेकिन मैंने पहले कभी Python इस्तेमाल नहीं की थी।
vector को rotate करना और matplotlib से functions plot कर पाना काफ़ी अच्छा लगता है।
हाथ से भी बना सकता हूँ, लेकिन उतना सुंदर नहीं बना पाता।
ऐसे course को design करते समय थोड़ी सावधानी चाहिए।
आम तौर पर यह उन लोगों के लिए सबसे दिलचस्प होने की संभावना है जिन्हें पहले से कुछ हद तक calculus और programming दोनों आती हों, जबकि जिन लोगों को इन दोनों में से किसी एक को सीखना है, वे शायद ऐसी class के लिए उतने तैयार न हों।
व्यक्तिगत रूप से, जब मैंने calculus class में Maxima या Sagemath जैसे कुछ हद तक niche computer algebra systems शामिल करने की कोशिश की, तो प्रतिक्रिया ज़्यादा से ज़्यादा फीकी ही रही।
समस्या का एक हिस्सा शायद यह था कि first-year students ऐसे course के लिए software install करने में ज़्यादा रुचि नहीं रखते जो computer science class भी नहीं है।
फिर भी, थोड़ा उन्नत स्तर की classes में यह एक optional element के रूप में काफ़ी अच्छा काम कर सकता है, और ordinary differential equations की class में Python projects से मुझे बहुत अच्छे नतीजे मिले थे।
यह भी निश्चित रूप से मददगार था कि Python कोई niche language नहीं है।
फिर भी, अंत में यह चुनौती उठाने लायक है, और हर चीज़ हाथ से निकालने और tables में values ढूँढ़ने से तो बेहतर ही है।
reference materials क्या थे — lecture notes, code, slides, books, कुछ भी — अगर आप साझा कर सकें तो अच्छा होगा।
इससे जुड़ी बात, अगर आप Emacs इस्तेमाल करते हैं तो computer algebra को support करने वाला Calc package मौजूद है।
मैंने हाल ही में एक interface जारी किया है जो Calc को इस्तेमाल करने में बहुत आसान बनाता है, और उसके बारे में यहाँ लिखा है।
http://yummymelon.com/devnull/mathing-in-emacs-with-casual.h...
https://www.emacswiki.org/emacs/MaximaMode
अवधारणा पसंद आई
बस लगता है कि अगर यह सामग्री MOOCulus जैसी किसी चीज़ के ऊपर बनाई गई होती, या वहीं से शुरू हुई होती, तो यह कहीं बेहतर होता
https://ximera.osu.edu/mooculus/calculus1
कुल मिलाकर मैं MOOCulus को ज़्यादा पसंद करता हूँ
फिर भी Calculus with Julia का जो अतिरिक्त मूल्य है, वह काफ़ी बड़ा है
अच्छा होगा अगर किसी तरह दोनों को एकीकृत किया जा सके
MOOCulus की सबसे बड़ी ताकत यह है कि उसके लेखन की गुणवत्ता बेहतर है, वह काफ़ी कम शब्दाडंबरपूर्ण है, और एकीकृत अभ्यास-प्रश्नों की वजह से छात्र सामग्री को ध्यान से फ़ॉलो करते हैं
कक्षाओं में इसका बहुत इस्तेमाल होता है और यह काफ़ी परिष्कृत भी है
अगर इसे fork करके Julia सपोर्ट मज़बूत किया जाए, तो यह बहुत बड़ा सुधार होगा, और applied examples जोड़ने पर भी यही बात लागू होगी
ऊपर से, मैंने सबसे पहले जिस “Equal or Not?” पर क्लिक किया, उसमें भी त्रुटि है
Maxima और Gnuplot, और साथ में मिलने वाले दस्तावेज़ों का संयोजन भी काफ़ी अच्छा है
याद है कि Maxima के लिए एक काफ़ी परिपक्व PDF परिचय/गाइड भी था
क्या Julia उन लोगों के लिए एक उपयोगी विकल्प बन सकती है जो Matlab इस्तेमाल करते थे?
विस्तृत अंतर के लिए https://docs.julialang.org/en/v1/manual/noteworthy-differenc... देख सकते हैं
यह कुछ वैसा है जैसे नर्क में किसी को बर्फ़ वाला पानी का एक गिलास दे देना
Steve Jobs ने Windows के लिए iTunes के बारे में जो कहा था, उसी से उधार लेकर कहूँ to ऐसा है, और हाँ, उस समय iTunes बाद में बने उसके बेतरतीब रूप जैसा नहीं था
Cleve Moler और Matlab ने जो हासिल किया, खासकर LINPACK और EISPACK जैसी चीज़ों को आसानी से सुलभ बनाना, उसका मैं बहुत सम्मान करता हूँ
शुरुआत में जहाँ केवल matrix नाम का एक ही data type था, उस सीमा से निकलने के लिए भी काफ़ी मेहनत की गई थी
लेकिन Julia एक आधुनिक general-purpose language के रूप में काम करने के लिए कहीं ज़्यादा सुखद है, जबकि Matlab की ताकत लगभग पूरी तरह बनाए रखती है
यह बहुत तेज़ है, आम तौर पर एक programming language के रूप में इसके फीचर बेहतर हैं, और parallelization भी काफ़ी आसान है
दोनों को पेशेवर रूप से इस्तेमाल करने के अनुभव से कहूँ तो आज के समय में आम तौर पर Julia बेहतर विकल्प है
हालाँकि Matlab या Stata जैसी भाषाओं में पहले से लागू किए गए मौजूदा algorithms की संख्या बहुत बड़ी है, और Julia में उनके समकक्ष implementation न भी हों
अगर आपको उन्हीं में से किसी एक की ज़रूरत है, तो दूसरी भाषा का इस्तेमाल अक्सर उचित ठहरता है
व्यवहार में Matlab/Python/Stata कोड को Julia में पोर्ट करना ज़्यादातर काफ़ी आसान रहा है
Julia का कोड Matlab कोड की तुलना में काफ़ी साफ़ दिख सकता है और उसका performance भी बहुत बेहतर हो सकता है
अगर नहीं, तो Julia काफ़ी सहज लगेगी और एक पर्याप्त विकल्प होगी
syntax कुछ हद तक मिलता-जुलता है, और MATLAB की array-संबंधी कई सुविधाएँ भी इसमें हैं
इसके अलावा, यह एक अच्छा type system और कहीं बेहतर general-purpose programming behavior देती है; जैसे, उदाहरण के लिए, functions की placement अजीब तरह से व्यवहार नहीं करती
इसे खुद आज़माने की सलाह दूँगा
पेज हेडर में दिया गया PDF लिंक 404 दे रहा है
“इन नोट्स को Quarto के ज़रिए PDF फ़ाइल में compile किया जा सकता है। चूँकि आउटपुट काफ़ी बड़ा है, इसलिए डाउनलोड के लिए फ़ाइल उपलब्ध नहीं कराई जाती। इच्छुक पाठक repository डाउनलोड करें, environment instantiate करें, और फिर quarto subdirectory में quarto चलाकर इसे PDF में render करें; तब वह फ़ाइल बन जाएगी। इसमें थोड़ा समय लगता है”
“गणना वह प्रलोभन है जिसका यथासंभव अधिक समय तक प्रतिरोध करना चाहिए”
— J.P. Boyd