줄리아를 활용한 미적분학
(jverzani.github.io)- 미적분을 여러 관점에서 이해하도록 돕는 학습 노트로, Julia의 쉬운 문법과 계산 능력을 그래프·수치 실험에 활용함
- Harvard식 rule of four 흐름에 맞춰 그래프, 수치, 대수, 언어적 관점을 함께 다루되 Julia로는 주로 그래프·수치·일부 대수 측면을 보여줌
- Mathematica, Maple, Sage 같은 컴퓨터 대수 시스템이 기호 처리에 강한 반면, 이 노트는 Julia를 수치 계산 중심 도구로 놓고 필요한 대수 처리를 덧붙임
- 학습자는 설치·인터페이스 안내를 따라 환경을 준비하고,
CalculusWithJulia패키지로 반복 작업과 공통 함수를 단순화할 수 있음 - 각 페이지는 책의 한 절처럼 집중된 개념을 다루며, 끝의 자가 채점 문제를 통해 입문 미적분 풀이에 필요한 계산 개념을 확인할 수 있음
Julia로 미적분을 배우는 접근
- Calculus with Julia는 calculus를
Julia언어로 배우기 위한 노트 모음임 - Julia는 오픈소스 프로그래밍 언어이며, 이 노트에서는 배우기 쉬운 문법과 계산 기능이 미적분 학습에 적합한 도구로 쓰임
- 학습 준비를 위한 문서도 함께 제공됨
- Getting started with Julia: Julia 설치와 사용자 설정 안내
- Julia interfaces: Julia 설치본과 상호작용하는 여러 방법 안내
- 1990년대 중반 이후 미적분 교육에는 여러 관점을 함께 쓰려는 흐름이 있었고, Harvard식 “rule of four”는 가능한 한 그래프·수치·대수·언어적 요소를 함께 포함하도록 함
- 이 노트는 Julia를 통해 미적분의 그래프와 수치적 측면, 때로는 대수적 측면까지 살펴볼 수 있게 구성됨
컴퓨터 대수 시스템과의 차이
- Mathematica, Maple, Sage 같은 컴퓨터 대수 시스템을 미적분 학습에 통합한 사례는 많음
- WolframAlpha는 Mathematica의 기능을 호출하면서도 유연한 비공식 문법을 허용하며, Apple Siri 기능의 백엔드로도 쓰일 수 있음
- 이런 시스템은 학습에서 대수·기호 처리를 잘 모델링하고, 수치적 측면을 보여주는 수단도 제공함
- 반면 이 노트는 Julia를 주로 수치 계산 도구로 사용하고, 대수·기호 처리는 그 위에 추가하는 방식으로 접근함
- 기호 처리를 직접 손으로 해보는 과정은 학습에 유익할 수 있지만, 컴퓨터 대수 시스템은 완성된 결과를 쉽게 만들어 그 연습을 중복적으로 보이게 만들 수 있음
학습 범위와 페이지 구성
- 목표는 컴퓨터 언어의 기계적 세부에 묶이지 않고, 기술을 활용해 미적분 개념에 접근하는 것임
- Julia 문법은 계산기 사용보다 초기 진입이 크게 어렵지 않으면서도 확장 가능성이 큰 언어로 다뤄짐
- 노트는 계산 개념을 제한된 집합으로 줄여 다룸
- 이 집합만으로도 미적분의 많은 문제를 풀 수 있음
- 프로그래밍의 여러 측면을 철저히 다루지는 않음
- 더 관심 있는 학습자는 Julia를 통해 깊게 탐색할 수 있음
- 제한된 계산 개념 안에는 미적분 계산을
action(function, arguments...)형태의 함수 호출로 줄여주는 연산자들이 포함됨 - 조합 가능한 작은 동작(action) 모음을 통해 입문 미적분의 많은 문제를 다룰 수 있음
- 각 페이지는 책의 한 절처럼 비교적 집중된 개념 하나를 중심으로 구성됨
- 페이지 끝에는 직접 풀어보는 문제가 있으며, 모두 제한된 수의 자가 채점 답안을 가짐
- 아이디어는 Strang, Knill, Schey, Hass 등, Rogawski 등, Angenent, 여러 Wikipedia 페이지와 다른 출처에서 가져옴
제공 자료와 실행 방법
- 노트에는
CalculusWithJuliaJulia 패키지가 함께 제공됨- 공통 작업을 단순화하는 간단한 함수들을 제공함
- 반복적으로 사용할 유용한 패키지들을 로드함
- 노트는 Quarto book 형식으로 제공되며, Quarto 책에 대한 정보는 Quarto 문서에서 확인할 수 있음
- Quarto로 PDF 파일을 컴파일할 수는 있지만, 여러 부분을 맞춰야 하고 결과가 최적은 아니며 파일 크기도 꽤 큼
- PDF 버전 다운로드가 제공됨
- 기여는 “Edit this page” 링크를 통해 추가 주제 제안, 오류 수정, 오타 수정 형태로 할 수 있으며, 기여자는 contributors에 기록됨
- Julia는
juliaup유틸리티로 쉽게 설치할 수 있음 - 웹에서 Julia를 실행하는
binder.org인스턴스 링크도 제공되지만, 리소스 제약이 있음- SymPy 없는 이미지
- SymPy 포함 이미지, 로딩 시간이 더 김
댓글과 토론
Hacker News 의견들
-
내 아이가 고등학교 2학년에 올라가고 SVC를 듣는 시점이라 개인적으로 아주 적절한 자료로 보임
저자가 이 스레드를 보고 있다면, Python 입문 정도만 해본 고등학생에게도 적절한지 궁금함- 고등학생이 미적분을 배운다면 프로그래밍 전에 먼저 한동안 종이와 펜으로 배우는 편이 좋다고 봄
코드 문법을 고민하기보다 문제를 직접 풀고 기본 개념을 생각하는 게 중요하며, 손으로 연습해야 내용을 더 잘 내면화할 수 있음 - 강하게 아니라고 봄
프로그래밍 부분은 괜찮지만, 빠르게 훑어보면 수학 설명이 이미 미적분을 아는 사람이 아니면 매우 혼란스러울 방식으로 쓰여 있어, 학생이 실제로는 설명이 부족한 것뿐인데 자신이 수학을 못한다고 느낄 수 있음
예를 들어 [1]의 그림은 축 라벨도 없는 L자 모양 음영 상자에 곡선이 지나가고, 이어서 매개변수 방정식과 여러 치환으로 부분적분 공식을 유도함
부분적분을 잘 아는 입장에서도 공식을 유도하거나 설명하는 방식으로는 거의 가장 혼란스러운 편이고, 이미 개념을 이해한 사람이 아니면 그림도 별 도움을 주지 않음
James Stewart의 “Calculus”처럼 뛰어난 도해와 명확한 설명을 본 적이 있다면 대비가 매우 뚜렷함
보통 부분적분 설명은 저자처럼 곱의 미분법에서 시작하되, 먼저 몇 가지 예로 곱의 미분을 해 보며 결과의 역도함수 형태에 대한 직관을 만든 뒤, 양변을 적분하고 적분을 나누는 방식으로 공식을 유도함[2]
훨씬 명확하고 따라가기 쉬우며, 실제로 학생을 돕고 싶다면 여러 번 부분적분할 때 부호 때문에 고생하지 않도록 표 방식/“DI” 방법 같은 것도 가르치는 편이 좋음
[1] https://jverzani.github.io/CalculusWithJuliaNotes.jl/integra...
[2] 내가 배울 때 정리한 유도 노트가 여기 있음. 초보자에게 설명하려고 쓴 것은 아니고 개인 노트지만, 그래도 위 예시보다 훨씬 따라가기 쉬움 https://publish.obsidian.md/uncarved/3+Resources/Public/Inte... - 그 나이, 즉 11학년 때 미적분을 독학했고 처음엔 당연히 힘들었지만, 반쯤 되는 여러 책을 훑어보다가 개념이 딱 맞아떨어지는 책을 찾으며 버텼음
그래서 추천하자면 Kleppner와 Ramsey의 Quick Calculus를 보라고 하고 싶음
처음 접하는 개념의 직관을 만드는 데는 내가 써 본 어떤 책도 이 책에 근접하지 못했음
그걸 익힌 뒤에는 좋은 책이면 무엇이든 괜찮고, James Stewart 책도 훌륭하지만 너무 두꺼워서 1쪽부터 모든 문제를 시키기보다는 적절한 읽을거리와 문제를 고르는 참고서처럼 쓰는 편이 좋음
핵심은 처음부터 도함수, 적분, 극한이 무엇인지 기본을 제대로 잡는 것인데, 그 점에서는 Quick Calculus가 압도적이었음
학생이 프로그래밍에 관심이 있다면 이 Julia 책이나 비슷한 책에서 판단에 맞는 연습문제를 골라 Stewart를 보완하는 것도 좋고, 원한다면 Python으로 풀어도 충분함
나도 같은 나이에 미적분 지식을 다지는 방법으로 Python으로 수치 적분기와 기호 미분기를 구현했는데, 둘 다 유익하고 재미있었음
특히 기호 미분은 마법처럼 느껴졌지만, 결국 파싱을 하고 수학에서 배운 각 규칙을 계속 추가하는 일이었음 - 이 과정에는 Julia나 프로그래밍을 미리 접해 봤을 필요가 없다고 봄
- “미적분”이라는 말은 꽤 여러 의미를 가질 수 있고, 수업·학교·국가에 따라 달라질 수 있음
고등학교 때 마지막 2년 동안 배운 미적분은 이전 학년과 비슷하게, 기호를 조작하는 여러 알고리즘과 약간의 직관이 필요한 단계, 그리고 기울기와 넓이에 대한 몇 가지 사실을 배워 문장제를 푸는 방식이었음
처음 배운 것은 미분 알고리즘의 일부인 x^n의 도함수가 n x^(n-1)이라는 규칙이었음
대학에서는 같은 과목을 해석학이라고 불렀고, 여러 개념을 정의하고 그 성질을 증명하는 내용이었음
이런 수업은 대체로 수열·급수와 극한으로의 수렴, 함수의 연속성과 함수의 극한, 미분과 적분 및 아마 Taylor 정리 일부라는 세 부분 구조를 따름
Cauchy가 교과서에서 많은 “현대적” 정의를 도입한 뒤로 이 구조는 크게 변하지 않았고, 명백한 예외는 Riemann 적분으로 알려진 적분 정도임
이 과정이 어떤 종류인지는 모르겠지만 극한으로 시작하니 후자에 가까울 수 있고, 그 경우 Julia가 얼마나 유용할지는 잘 모르겠음
적합성을 따질 때 핵심은 프로그래밍보다 수학적 성숙도를 요구할 수 있다는 점으로 보임
여기서 수학적 성숙도란 정밀한 정의와 추상 개념을 다루면서 잘못된 결론을 잔뜩 끌어내지 않고, 수학적 증명 형태의 논증을 따라갈 수 있는 능력에 가까움
- 고등학생이 미적분을 배운다면 프로그래밍 전에 먼저 한동안 종이와 펜으로 배우는 편이 좋다고 봄
-
책을 조금 여기저기 훑어봤는데 흥미로웠고, 아이들에게 이런 방식으로 미적분을 배우게 권할 수도 있겠다고 느낌
다만 서문 첫 문단의 “Julia는 배우기 쉬운 문법을 갖춘 오픈소스 프로그래밍 언어이며 이 작업에 잘 맞는다”는 말이 궁금함
왜 Julia가 다른 언어보다 더 적합한가?- Julia에는 수학에 유용한 작은 장점이 많음
표준 수학 표기처럼 변수 앞에 스칼라를 붙이면 암묵적으로 곱셈이 되고, 예를 들어 x가 2라면 3x는 6으로 평가됨
유니코드 지원도 풍부해서 ∈와 ∉ 같은 연산자는 약간 과해 보일 수도 있지만 기대한 대로 동작하고, π가 미리 정의되어 있으며 심지어 무리수 자료형이고, √도 연산자로 쓸 수 있어 √2가 유효한 표현식으로 부동소수점 값이 됨
Julia는 이런 구문을 지원할 뿐 아니라 쉽게 입력할 방법도 제공함
미적분과는 조금 덜 관련 있지만 벡터와 행렬이 일급 자료형이라 Python보다 입력하고 눈으로 파악하기가 훨씬 쉬움
m = [1 2 3; 4 5 6; 7 8 9]대m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]의 차이임
전치는 한 글자 연산자'로 되고, 내적은 점 연산자m ⋅ n으로 가능하며,A\b도 Matlab처럼 동작함
또한 브로드캐스팅을 지원하고, 컴프리헨션도 있지만 개인적으로는 브로드캐스팅 덕분에 컴프리헨션이 덜 필요했음
유리수도 내장되어 있고1//2처럼 아주 단순한 문법을 씀 - Julia는 수치해석을 목표로 만들어진 언어이기 때문임
주요 “경쟁자”인 Python은 수학 연산 문법이 좋지 않기로 유명하고, 표준 라이브러리의 수학 지원도 작으며, 자료형 시스템이 제한적이고 실행 성능도 매우 나쁨
Julia는 이런 문제를 해결하면서 읽기 비교적 쉬운 언어를 제공하고, 수학 표기와 자주 비슷하며 성능도 꽤 괜찮음 - 나도 여기저기 눌러봤는데 책의 형식과 진행은 조금 혼란스럽게 느껴졌지만,
f’와f’’같은 손글씨 표기를 가능하게 하는 후위 표기 기능 등 일부 Julia 기능은 흥미로웠음
개인적인 경험으로 최고의 “미적분 책”은 Julia가 아니라 Haskell을 쓰고, 그래프 그리기용 라이브러리만 의존하는 Learn Physics with Functional Programming이라고 봄
https://www.lpfp.io/
Julia는 “수학을 위한 프로그래밍 언어”로 알려져 있고, 그런 방향성이 개발의 많은 부분을 이끌었음
명시적으로는 손글씨나 LaTeX 기호와 맞는 많은 수학 표기를 지원함
암묵적으로는 Python식으로 단순화된 문법, 폭넓은 상호운용성, 이 튜토리얼에서 많은 처리를 맡기는 SymPy 활용, 내장 병렬 계산 기본 요소, 그리고 빠른 반복과 탐색을 가능하게 하는 JIT 컴파일을 가리키는 듯함 - 좋은 개요는 여기 있음
https://computationalthinking.mit.edu/Spring21/
아주 짧게 말하면 Python과 어느 정도 비슷하고 마찬가지로 쓰기 쉽지만, 수학을 직접 표현하는 문법이 훨씬 풍부한 언어임
노트북도 더 풍부함
핵심 차이는 Python 노트북에서는 셀을 실행하지만, Julia 노트북은 의존성 같은 것을 처리한다는 점임
x를 숫자나 슬라이더로 바꾸면 의존하는 것들이 모두 갱신됨
그래프를 정의하고 슬라이더를 추가하면 그냥 동작함
나도 Julia 전문가는 아니고 대부분 Python과 JavaScript로 작업하지만, 비슷한 수업에서는 위 두 가지가 매우 뚜렷하게 드러남 - Julia는 표준 라이브러리 선형대수와 1부터 시작하는 인덱스 같은 MATLAB의 DNA를 많이 물려받았음
여기에 매우 자주 쓰이는 유니코드 지원이 있고, 많은 경우 의도적으로 의사코드처럼 보일 수 있음
- Julia에는 수학에 유용한 작은 장점이 많음
-
흥미롭게도 ML을 배우고 싶어서 최근 수학, 즉 선형대수·미적분·통계를 다시 배우기 시작했음
여러 내용을 배우는 동안 간단한 Python 구현도 같이 해 보고 있는데, 부끄럽지만 예전엔 Python을 써 본 적이 없었음
벡터를 회전시키고 matplotlib으로 함수를 그릴 수 있는 게 꽤 좋음
손으로도 그릴 수는 있지만 그렇게 예쁘게는 못 그림 -
이런 과정을 설계할 때는 조금 조심해야 함
대체로 이미 어느 정도 미적분과 프로그래밍을 둘 다 아는 사람에게 가장 흥미로울 가능성이 크고, 정작 예상 대상인 둘 중 하나를 배우는 사람은 이런 수업을 받아들일 준비가 덜 되어 있을 수 있음
개인적으로 미적분 수업에 Maxima나 Sagemath 같은 약간 이국적인 컴퓨터 대수 시스템을 넣어 보려 했을 때 반응은 기껏해야 미지근했음
문제의 일부는 1학년 학생들이 컴퓨터과학 수업도 아닌 과목을 위해 소프트웨어를 설치하는 데 별 관심이 없다는 점이었다고 봄
다만 조금 더 높은 수준의 수업에서는 선택 요소로 꽤 잘 작동할 수 있고, 상미분방정식 수업에서 Python 프로젝트로 아주 좋은 결과를 얻었음
Python이 틈새 언어가 아니라는 점도 확실히 도움이 되었음- 통계 교육에서도 학생들이 통계 개념과 통계 소프트웨어를 동시에 배워야 해서 흔히 생기는 어려움임
그래도 결국 그 도전을 감수할 만하고, 모든 것을 손으로 계산하고 표에서 값을 찾아보게 하는 것보다는 낫다고 봄 - 대수학 이상은 배우지 못한 독학 프로그래머 입장에서는 이 자료가 정말 좋아 보이고, 내가 바로 그 작은 대상층일지도 모르겠음
- 상미분방정식 수업에서 Python 프로젝트로 좋은 결과를 얻었다면 어떤 교재를 썼는지 궁금함
참고 자료는 무엇이었는지, 강의 노트·코드·슬라이드·책 등 무엇이든 공유해 줄 수 있으면 좋겠음
- 통계 교육에서도 학생들이 통계 개념과 통계 소프트웨어를 동시에 배워야 해서 흔히 생기는 어려움임
-
관련해서 Emacs를 쓴다면 컴퓨터 대수를 지원하는 Calc 패키지가 있음
최근 Calc를 훨씬 쓰기 쉽게 만드는 인터페이스를 공개했고, 여기 글로 썼음
http://yummymelon.com/devnull/mathing-in-emacs-with-casual.h...- Emacs 사용자라면 완전한 컴퓨터 대수 시스템에 대한 매우 강력한 인터페이스인 Maxima mode도 좋아할 수 있음
https://www.emacswiki.org/emacs/MaximaMode
- Emacs 사용자라면 완전한 컴퓨터 대수 시스템에 대한 매우 강력한 인터페이스인 Maxima mode도 좋아할 수 있음
-
개념은 마음에 듦
다만 이런 자료가 MOOCulus 같은 것 위에 만들어졌거나 거기서 출발했으면 훨씬 좋았을 것 같음
https://ximera.osu.edu/mooculus/calculus1
전체적으로는 MOOCulus를 더 선호함
그래도 Calculus with Julia가 더하는 가치는 큼
둘이 어떻게든 통합될 수 있다면 좋겠음
MOOCulus의 핵심은 글의 품질이 더 좋고 훨씬 덜 장황하며, 통합 연습문제 덕분에 학생들이 내용을 꼼꼼히 따라간다는 점임
수업에서 많이 쓰이며 상당히 다듬어져 있기도 함
포크해서 Julia를 보강한다면 매우 큰 개선이 될 것이고, 응용 예제를 추가해도 마찬가지일 듯함- 웹사이트를 확인해 봤는데, 어떻게 써야 하는지도 알기 꽤 어려움
게다가 처음 클릭한 “Equal or Not?”에도 오류가 있음
- 웹사이트를 확인해 봤는데, 어떻게 써야 하는지도 알기 꽤 어려움
-
Maxima와 Gnuplot, 그리고 함께 제공되는 문서 조합도 꽤 좋음
Maxima에 대한 꽤 완성도 높은 PDF 입문서/가이드도 있었던 것으로 기억함 -
Matlab을 쓰던 사람에게 Julia가 유효한 대체재가 될 수 있을까?
- 충분히 가능함
자세한 차이는 https://docs.julialang.org/en/v1/manual/noteworthy-differenc...를 보면 됨 - 매우 그렇다
지옥에 있는 사람에게 얼음물 한 잔을 건네는 것과 비슷함
Steve Jobs가 Windows용 iTunes에 대해 했던 말에서 빌리자면 그렇고, 물론 그때 iTunes는 나중에 된 엉망진창 상태는 아니었음
Cleve Moler와 Matlab이 이뤄낸 것, 특히 LINPACK과 EISPACK 등을 쉽게 접근 가능하게 만든 점은 크게 존중함
처음에는 행렬이라는 단 하나의 자료형만 있었던 한계를 극복하려고도 많이 노력했음
하지만 Julia는 현대적인 범용 언어로서 작업하기 훨씬 쾌적하면서도 Matlab의 힘을 거의 모두 유지함 - 여러 면에서 그렇다
훨씬 빠르고, 일반적으로 프로그래밍 언어로서 더 나은 기능이 많으며, 병렬화도 훨씬 쉬움
둘 다 직업적으로 써 본 입장에서는 오늘날 대체로 Julia가 더 나은 선택이라고 말하겠음
다만 Matlab이나 Stata 같은 언어에는 이미 구현된 기존 알고리즘이 엄청나게 많고, Julia에 대응 구현이 없을 수 있음
원하는 것이 그중 하나라면 다른 언어를 쓰는 걸 정당화하기 어려울 때가 많음
실제로는 Matlab/Python/Stata 코드를 Julia로 옮기는 일이 대체로 꽤 쉬웠음 - 매우 그렇다
Julia 코드는 Matlab 코드보다 훨씬 보기 좋고 훨씬 성능이 좋을 수 있음 - 특정 MATLAB 툴박스나 통합 기능에 의존하는지에 달려 있음
그렇지 않다면 Julia는 느낌이 좋고 충분한 대체재가 될 것임
문법이 어느 정도 비슷하고 MATLAB의 배열 관련 편의 기능도 많이 갖고 있음
게다가 좋은 자료형 시스템과 훨씬 나은 범용 프로그래밍 처리를 제공하며, 예를 들어 함수 위치 같은 것이 이상하게 굴지 않음
직접 써 보기를 권함
- 충분히 가능함
-
페이지 헤더의 PDF 링크가 404임
- 의도적으로 꺼 둔 것 같음
“이 노트는 Quarto를 통해 PDF 파일로 컴파일할 수 있다. 결과물이 꽤 크기 때문에 다운로드용 파일은 제공하지 않는다. 관심 있는 독자는 저장소를 내려받고, 환경을 인스턴스화한 뒤, quarto 하위 디렉터리에서 quarto를 실행해 PDF로 렌더링하면 그 파일이 생성될 것이다. 시간이 좀 걸린다”
- 의도적으로 꺼 둔 것 같음
-
“계산은 가능한 한 오래 저항해야 하는 유혹이다”
— J.P. Boyd