3 điểm bởi GN⁺ 2024-05-19 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đây là ghi chú học tập giúp hiểu giải tích từ nhiều góc nhìn, tận dụng cú pháp dễ học của Julia và khả năng tính toán của ngôn ngữ này cho đồ thị và thí nghiệm số
  • Theo dòng chảy rule of four kiểu Harvard, tài liệu cùng lúc đề cập các góc nhìn đồ thị, số, đại số và diễn giải bằng lời, nhưng với Julia chủ yếu minh họa khía cạnh đồ thị, số và một phần đại số
  • Trong khi các hệ đại số máy tính như Mathematica, Maple, Sage mạnh về xử lý ký hiệu, ghi chú này đặt Julia làm công cụ trọng tâm cho tính toán số và bổ sung phần xử lý đại số khi cần
  • Người học có thể chuẩn bị môi trường theo hướng dẫn cài đặt và giao diện, đồng thời dùng gói CalculusWithJulia để đơn giản hóa tác vụ lặp lại và các hàm dùng chung
  • Mỗi trang tập trung vào một khái niệm như một mục trong sách, và qua các bài tự chấm điểm ở cuối, người học có thể kiểm tra các khái niệm tính toán cần thiết để giải các bài giải tích nhập môn

Cách tiếp cận học giải tích bằng Julia

  • Calculus with Julia là tập hợp ghi chú để học calculus bằng ngôn ngữ Julia
  • Julia là một ngôn ngữ lập trình mã nguồn mở, và trong bộ ghi chú này, cú pháp dễ học cùng khả năng tính toán của nó được dùng như một công cụ phù hợp cho việc học giải tích
  • Tài liệu chuẩn bị cho việc học cũng được cung cấp kèm theo
  • Từ giữa thập niên 1990, giáo dục giải tích đã có xu hướng sử dụng đồng thời nhiều góc nhìn, và “rule of four” theo kiểu Harvard hướng đến việc đưa vào càng nhiều càng tốt các yếu tố đồ thị, số, đại số và diễn giải bằng lời
  • Bộ ghi chú này được xây dựng để thông qua Julia có thể khảo sát các khía cạnh đồ thị và số của giải tích, đôi khi cả khía cạnh đại số

Khác biệt với các hệ đại số máy tính

  • Có nhiều ví dụ tích hợp hệ đại số máy tính như Mathematica, Maple, Sage vào việc học giải tích
  • WolframAlpha cho phép gọi các chức năng của Mathematica đồng thời chấp nhận cú pháp không chính thức linh hoạt, và cũng có thể được dùng làm backend cho các tính năng của Apple Siri
  • Những hệ thống này mô hình hóa tốt việc xử lý đại số và ký hiệu trong học tập, đồng thời cũng cung cấp phương tiện để thể hiện khía cạnh số
  • Ngược lại, bộ ghi chú này dùng Julia chủ yếu như một công cụ tính toán số, rồi bổ sung xử lý đại số và ký hiệu trên nền đó
  • Quá trình tự làm xử lý ký hiệu bằng tay có thể có ích cho việc học, nhưng các hệ đại số máy tính có thể dễ dàng tạo ra kết quả hoàn chỉnh, khiến phần luyện tập đó trở nên có vẻ trùng lặp

Phạm vi học tập và cấu trúc trang

  • Mục tiêu là tiếp cận các khái niệm giải tích bằng cách tận dụng công nghệ mà không bị trói buộc vào các chi tiết máy móc của ngôn ngữ máy tính
  • Cú pháp Julia được xem là không khó hơn đáng kể so với việc dùng máy tính cầm tay ở giai đoạn đầu, nhưng vẫn là một ngôn ngữ có khả năng mở rộng lớn
  • Ghi chú thu gọn các khái niệm tính toán vào một tập hợp giới hạn
    • Chỉ với tập hợp này cũng có thể giải được nhiều bài toán giải tích
    • Tài liệu không đi sâu một cách toàn diện vào nhiều khía cạnh của lập trình
    • Người học quan tâm hơn có thể khám phá sâu hơn thông qua Julia
  • Trong tập hợp khái niệm tính toán giới hạn này có các toán tử giúp rút gọn phép tính giải tích thành các lời gọi hàm theo dạng action(function, arguments...)
  • Với một tập nhỏ các thao tác (action) có thể kết hợp, có thể xử lý nhiều bài toán của giải tích nhập môn
  • Mỗi trang được tổ chức xoay quanh một khái niệm tương đối tập trung, giống như một mục trong sách
  • Cuối mỗi trang có các bài tập để tự giải, và tất cả đều có số lượng giới hạn đáp án tự chấm điểm
  • Các ý tưởng được lấy từ Strang, Knill, Schey, Hass cùng cộng sự, Rogawski cùng cộng sự, Angenent, nhiều trang Wikipedia và các nguồn khác

Tài liệu đi kèm và cách chạy

  • Bộ ghi chú đi kèm gói Julia CalculusWithJulia
    • Cung cấp các hàm đơn giản giúp làm gọn những tác vụ phổ biến
    • Tải các gói hữu ích sẽ được dùng lặp đi lặp lại
  • Ghi chú được cung cấp dưới dạng sách Quarto, và có thể xem thông tin về sách Quarto tại tài liệu Quarto
  • Có thể biên dịch tệp PDF bằng Quarto, nhưng cần phải khớp nhiều thành phần, kết quả không tối ưu lắm và kích thước tệp cũng khá lớn
  • Có cung cấp bản PDF để tải xuống
  • Có thể đóng góp thông qua liên kết “Edit this page” dưới dạng đề xuất chủ đề mới, sửa lỗi hoặc sửa lỗi chính tả, và người đóng góp được ghi nhận tại contributors
  • Julia có thể được cài đặt dễ dàng bằng tiện ích juliaup
  • Cũng có cung cấp liên kết tới các instance binder.org để chạy Julia trên web, nhưng có giới hạn tài nguyên
    • Ảnh không có SymPy
    • Ảnh có SymPy, thời gian tải lâu hơn

1 bình luận

 
GN⁺ 2024-05-19
Ý kiến trên Hacker News
  • Cá nhân tôi thấy đây là tài liệu rất phù hợp, vì con tôi sắp lên lớp 11 và chuẩn bị học SVC
    Nếu tác giả đang đọc luồng này, tôi muốn biết liệu nó có phù hợp với học sinh trung học mới chỉ nhập môn Python ở mức cơ bản hay không

    • Tôi nghĩ nếu học sinh trung học học giải tích, trước khi lập trình thì nên học bằng giấy và bút một thời gian
      Quan trọng là tự giải bài và suy nghĩ về các khái niệm cơ bản hơn là bận tâm về cú pháp code; luyện bằng tay sẽ giúp nội hóa nội dung tốt hơn
    • Tôi nghĩ chắc chắn là không
      Phần lập trình thì ổn, nhưng xem lướt qua thì phần giải thích toán được viết theo cách rất dễ gây rối cho người chưa biết giải tích; học sinh có thể cảm thấy mình kém toán trong khi thực ra chỉ là phần giải thích chưa đủ
      Ví dụ, hình trong [1] có một đường cong đi qua một vùng tô bóng hình chữ L không có nhãn trục, rồi tiếp đó dùng phương trình tham số và nhiều phép thay thế để suy ra công thức tích phân từng phần
      Ngay cả với người hiểu rõ tích phân từng phần, đây gần như là một trong những cách rối rắm nhất để suy ra hoặc giải thích công thức; nếu chưa hiểu khái niệm từ trước thì hình vẽ cũng không giúp được nhiều
      Nếu từng xem các minh họa xuất sắc và giải thích rõ ràng như trong “Calculus” của James Stewart, sự tương phản sẽ rất rõ
      Thông thường, phần giải thích tích phân từng phần cũng bắt đầu từ quy tắc đạo hàm của tích như tác giả, nhưng trước hết sẽ làm vài ví dụ đạo hàm tích để xây dựng trực giác về dạng nguyên hàm của kết quả, rồi tích phân hai vế và tách tích phân để suy ra công thức[2]
      Cách đó rõ ràng và dễ theo dõi hơn nhiều; nếu thực sự muốn giúp học sinh, cũng nên dạy các cách như phương pháp bảng/“DI” để các em không khổ sở vì dấu khi phải tích phân từng phần nhiều lần
      [1] https://jverzani.github.io/CalculusWithJuliaNotes.jl/integra...
      [2] Đây là ghi chú suy luận tôi lập khi học. Nó không được viết để giải thích cho người mới bắt đầu mà chỉ là ghi chú cá nhân, nhưng vẫn dễ theo dõi hơn nhiều so với ví dụ trên https://publish.obsidian.md/uncarved/3+Resources/Public/Inte...
    • Tôi đã tự học giải tích ở độ tuổi đó, tức lớp 11; ban đầu tất nhiên rất vất vả, nhưng tôi đã kiên trì bằng cách lướt qua nhiều cuốn sách dở chừng cho đến khi tìm được cuốn khiến các khái niệm khớp hẳn với nhau
      Vì vậy nếu phải gợi ý, tôi muốn khuyên đọc Quick Calculus của Kleppner và Ramsey
      Không cuốn nào tôi từng dùng có thể sánh với cuốn này trong việc xây dựng trực giác cho các khái niệm mới tiếp xúc lần đầu
      Sau khi nắm được điều đó thì sách hay nào cũng được; sách của James Stewart cũng tuyệt vời, nhưng quá dày, nên dùng như một sách tham khảo để chọn phần đọc và bài tập phù hợp thay vì bắt làm mọi bài từ trang 1
      Mấu chốt là ngay từ đầu phải nắm chắc căn bản: đạo hàm, tích phân và giới hạn là gì; về điểm này Quick Calculus vượt trội
      Nếu học sinh quan tâm đến lập trình, cũng có thể chọn các bài tập phù hợp từ cuốn Julia này hoặc sách tương tự để bổ sung cho Stewart; nếu muốn thì giải bằng Python cũng hoàn toàn ổn
      Ở cùng độ tuổi đó, tôi cũng từng triển khai một bộ tích phân số và một bộ vi phân ký hiệu bằng Python để củng cố kiến thức giải tích; cả hai đều hữu ích và thú vị
      Đặc biệt vi phân ký hiệu có cảm giác như phép màu, nhưng rốt cuộc cũng chỉ là parsing và liên tục thêm từng quy tắc đã học trong toán
    • Tôi nghĩ khóa này không đòi hỏi phải từng tiếp xúc trước với Julia hay lập trình
    • Từ “giải tích” có thể mang khá nhiều nghĩa, và có thể khác nhau tùy lớp học, trường học, quốc gia
      Phần giải tích tôi học trong 2 năm cuối trung học, tương tự các năm trước đó, là học nhiều thuật toán thao tác ký hiệu, các bước cần một chút trực giác, cùng vài sự kiện về độ dốc và diện tích để giải bài toán có lời văn
      Điều đầu tiên tôi học là quy tắc đạo hàm của x^n là n x^(n-1), một phần của thuật toán vi phân
      Ở đại học, môn tương tự được gọi là giải tích học: định nghĩa nhiều khái niệm và chứng minh các tính chất của chúng
      Các lớp như vậy nhìn chung theo cấu trúc ba phần: dãy và chuỗi cùng sự hội tụ về giới hạn; tính liên tục của hàm và giới hạn của hàm; đạo hàm và tích phân, và có lẽ một phần định lý Taylor
      Kể từ khi Cauchy đưa nhiều định nghĩa “hiện đại” vào giáo trình, cấu trúc này về cơ bản không thay đổi nhiều; ngoại lệ rõ ràng là phần tích phân được biết đến với tên tích phân Riemann
      Tôi không biết khóa này thuộc loại nào, nhưng vì nó bắt đầu bằng giới hạn nên có thể gần với loại sau hơn, và trong trường hợp đó tôi không rõ Julia hữu ích đến mức nào
      Khi xét độ phù hợp, điểm cốt lõi có vẻ là nó có thể đòi hỏi độ chín toán học hơn là lập trình
      Ở đây, độ chín toán học gần với khả năng xử lý các định nghĩa chính xác và khái niệm trừu tượng mà không rút ra hàng loạt kết luận sai, đồng thời theo dõi được lập luận dưới dạng chứng minh toán học
  • Tôi đã lướt qua vài chỗ trong cuốn sách, thấy khá thú vị và có cảm giác có thể khuyến khích trẻ học giải tích theo cách này
    Tuy nhiên tôi tò mò về câu ở đoạn đầu lời nói đầu: “Julia là một ngôn ngữ lập trình mã nguồn mở có cú pháp dễ học và rất phù hợp với công việc này”
    Vì sao Julia lại phù hợp hơn các ngôn ngữ khác?

    • Julia có nhiều ưu điểm nhỏ hữu ích cho toán học
      Giống ký hiệu toán học chuẩn, nếu đặt một vô hướng trước biến thì sẽ được hiểu ngầm là phép nhân; ví dụ nếu x là 2 thì 3x được đánh giá là 6
      Hỗ trợ Unicode cũng rất phong phú, nên các toán tử như ∈ và ∉ có thể trông hơi quá, nhưng hoạt động đúng như kỳ vọng; π được định nghĩa sẵn và thậm chí là kiểu số vô tỉ, còn √ cũng có thể dùng như toán tử, nên √2 là một biểu thức hợp lệ và trở thành một giá trị dấu phẩy động
      Julia không chỉ hỗ trợ các cú pháp này mà còn cung cấp cách nhập chúng dễ dàng
      Dù hơi ít liên quan hơn đến giải tích, vector và ma trận là kiểu dữ liệu hạng nhất, nên dễ nhập và dễ nhìn hơn nhiều so với Python
      Đó là khác biệt giữa m = [1 2 3; 4 5 6; 7 8 9]m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
      Chuyển vị được thực hiện bằng toán tử một ký tự ', tích trong có thể dùng toán tử dấu chấm m ⋅ n, và A\b cũng hoạt động như trong Matlab
      Ngoài ra còn hỗ trợ broadcasting, cũng có comprehension, nhưng cá nhân tôi thấy nhờ broadcasting mà ít cần comprehension hơn
      Số hữu tỉ cũng được tích hợp sẵn và dùng cú pháp rất đơn giản như 1//2
    • Vì Julia là ngôn ngữ được tạo ra với mục tiêu phân tích số
      “Đối thủ” chính là Python vốn nổi tiếng có cú pháp toán học không tốt, hỗ trợ toán học trong thư viện chuẩn ít, hệ thống kiểu dữ liệu hạn chế và hiệu năng thực thi rất kém
      Julia giải quyết các vấn đề đó, đồng thời cung cấp một ngôn ngữ tương đối dễ đọc, thường gần với ký hiệu toán học và hiệu năng cũng khá tốt
    • Tôi cũng bấm thử nhiều chỗ; hình thức và mạch trình bày của sách hơi gây rối, nhưng một số tính năng của Julia khá thú vị, chẳng hạn tính năng ký pháp hậu tố cho phép dùng ký hiệu viết tay như f’f’’
      Theo trải nghiệm cá nhân, cuốn “sách giải tích” hay nhất không dùng Julia mà dùng Haskell, và chỉ phụ thuộc vào thư viện để vẽ đồ thị: Learn Physics with Functional Programming
      https://www.lpfp.io/
      Julia được biết đến như “ngôn ngữ lập trình cho toán học”, và định hướng đó đã dẫn dắt nhiều phần trong quá trình phát triển
      Một cách tường minh, nó hỗ trợ nhiều ký hiệu toán học khớp với ký hiệu viết tay hoặc LaTeX
      Một cách ngầm hơn, có lẽ điều đó chỉ đến cú pháp được đơn giản hóa kiểu Python, khả năng tương tác rộng, việc dùng SymPy để đảm nhận nhiều xử lý trong hướng dẫn này, các thành phần cơ bản cho tính toán song song tích hợp sẵn, và biên dịch JIT cho phép lặp và khám phá nhanh
    • Có một phần tổng quan hay ở đây
      https://computationalthinking.mit.edu/Spring21/
      Nói thật ngắn gọn thì đây là một ngôn ngữ khá giống Python ở một mức nào đó và cũng dễ viết tương tự, nhưng có cú pháp phong phú hơn nhiều để biểu đạt toán học trực tiếp
      Notebook cũng phong phú hơn
      Khác biệt cốt lõi là trong notebook Python bạn chạy các ô, còn notebook Julia xử lý những thứ như phụ thuộc
      Nếu đổi x thành một số hoặc slider, mọi thứ phụ thuộc vào nó đều được cập nhật
      Định nghĩa đồ thị rồi thêm slider là nó hoạt động ngay
      Tôi cũng không phải chuyên gia Julia và chủ yếu làm việc với Python và JavaScript, nhưng trong các lớp học tương tự thì hai điểm trên thể hiện rất rõ
    • Julia thừa hưởng khá nhiều DNA của MATLAB, như đại số tuyến tính trong thư viện chuẩn và chỉ số bắt đầu từ 1
      Thêm vào đó là hỗ trợ Unicode được dùng rất thường xuyên, và trong nhiều trường hợp có thể cố ý trông giống mã giả
  • Thú vị là vì muốn học ML nên gần đây tôi bắt đầu học lại toán, tức đại số tuyến tính, giải tích và thống kê
    Trong lúc học nhiều nội dung, tôi cũng thử kèm các triển khai Python đơn giản; hơi xấu hổ là trước đây tôi chưa từng dùng Python
    Việc có thể xoay vector và vẽ hàm bằng matplotlib khá tuyệt
    Vẽ tay cũng được, nhưng không thể đẹp như vậy

  • Khi thiết kế một khóa như thế này thì cần hơi thận trọng
    Nhìn chung, nó có khả năng thú vị nhất với những người đã biết phần nào cả giải tích lẫn lập trình, còn những người thuộc đối tượng dự kiến, tức đang học một trong hai thứ đó, có thể chưa sẵn sàng tiếp nhận kiểu lớp học này
    Cá nhân tôi từng thử đưa một hệ đại số máy tính hơi lạ như Maxima hoặc Sagemath vào lớp giải tích, và phản ứng tốt nhất cũng chỉ là làng nhàng
    Tôi nghĩ một phần vấn đề là sinh viên năm nhất không mấy hứng thú với việc cài phần mềm cho một môn không phải khoa học máy tính
    Tuy vậy ở các lớp trình độ cao hơn một chút, nó có thể hoạt động khá tốt như một phần tùy chọn, và tôi từng có kết quả rất tốt với các dự án Python trong lớp phương trình vi phân thường
    Việc Python không phải là một ngôn ngữ ngách chắc chắn cũng giúp ích

    • Trong giảng dạy thống kê, đây cũng là khó khăn thường gặp vì sinh viên phải học khái niệm thống kê và phần mềm thống kê cùng lúc
      Dù vậy cuối cùng tôi nghĩ thách thức đó đáng để chấp nhận, và vẫn tốt hơn bắt họ tính mọi thứ bằng tay rồi tra giá trị trong bảng
    • Từ góc nhìn của một lập trình viên tự học chưa học quá đại số, tài liệu này trông thật sự rất hay, và có lẽ tôi chính là nhóm đối tượng nhỏ đó
    • Nếu bạn đã đạt kết quả tốt với các dự án Python trong lớp phương trình vi phân thường, tôi tò mò bạn đã dùng giáo trình nào
      Tài liệu tham khảo là gì, nếu có thể chia sẻ bất cứ thứ gì như ghi chú bài giảng, mã, slide, sách, v.v. thì rất tốt
  • Liên quan đến chuyện này, nếu dùng Emacs thì có gói Calc hỗ trợ đại số máy tính
    Gần đây tôi đã công bố một giao diện giúp Calc dễ dùng hơn nhiều, và đã viết về nó ở đây
    http://yummymelon.com/devnull/mathing-in-emacs-with-casual.h...

  • Thích ý tưởng này
    Tuy nhiên, sẽ tốt hơn nhiều nếu tài liệu kiểu này được xây dựng trên một thứ như MOOCulus, hoặc bắt đầu từ đó
    https://ximera.osu.edu/mooculus/calculus1
    Nhìn chung mình vẫn thích MOOCulus hơn
    Dù vậy, giá trị mà Calculus with Julia bổ sung là rất lớn
    Sẽ thật tốt nếu hai bên có thể được tích hợp với nhau theo cách nào đó
    Điểm cốt lõi của MOOCulus là chất lượng bài viết tốt hơn, ít dài dòng hơn nhiều, và nhờ các bài tập tích hợp mà sinh viên theo sát nội dung một cách kỹ lưỡng
    Nó cũng được dùng nhiều trong giảng dạy và đã được trau chuốt khá kỹ
    Nếu fork rồi bổ sung Julia thì sẽ là một cải tiến rất lớn, và việc thêm các ví dụ ứng dụng có lẽ cũng vậy

    • Mình đã xem trang web, nhưng cũng khá khó để hiểu nên dùng nó như thế nào
      Hơn nữa, ngay mục “Equal or Not?” đầu tiên mình bấm vào cũng có lỗi
  • Kết hợp Maxima và Gnuplot, cùng tài liệu đi kèm, cũng khá tốt
    Mình nhớ là từng có một sách nhập môn/hướng dẫn PDF khá hoàn chỉnh về Maxima

  • Julia có thể là một lựa chọn thay thế hiệu quả cho người từng dùng Matlab không?

    • Hoàn toàn có thể
      Có thể xem các khác biệt chi tiết tại https://docs.julialang.org/en/v1/manual/noteworthy-differenc...
    • Rất đúng
      Nó giống như đưa một ly nước đá cho người đang ở địa ngục
      Mượn cách Steve Jobs từng nói về iTunes cho Windows là vậy; tất nhiên lúc đó iTunes chưa trở thành mớ hỗn độn về sau
      Mình rất tôn trọng những gì Cleve Moler và Matlab đã làm được, đặc biệt là việc giúp LINPACK và EISPACK, v.v. trở nên dễ tiếp cận
      Ban đầu Matlab cũng đã nỗ lực rất nhiều để vượt qua giới hạn chỉ có một kiểu dữ liệu duy nhất là ma trận
      Nhưng Julia là một ngôn ngữ đa dụng hiện đại, làm việc dễ chịu hơn nhiều mà vẫn giữ gần như toàn bộ sức mạnh của Matlab
    • Đúng ở nhiều khía cạnh
      Nó nhanh hơn nhiều, nhìn chung có nhiều tính năng tốt hơn với tư cách một ngôn ngữ lập trình, và việc song song hóa cũng dễ hơn nhiều
      Với tư cách người đã dùng cả hai trong công việc, mình sẽ nói rằng hiện nay nhìn chung Julia là lựa chọn tốt hơn
      Tuy nhiên, các ngôn ngữ như Matlab hoặc Stata đã có một lượng khổng lồ thuật toán sẵn có được triển khai, và có thể Julia chưa có bản triển khai tương ứng
      Nếu thứ bạn cần nằm trong số đó thì nhiều khi khó biện minh cho việc dùng ngôn ngữ khác
      Trên thực tế, việc chuyển mã Matlab/Python/Stata sang Julia nhìn chung khá dễ
    • Rất đúng
      Mã Julia có thể dễ đọc hơn nhiều và có hiệu năng tốt hơn nhiều so với mã Matlab
    • Còn tùy bạn có phụ thuộc vào toolbox MATLAB hoặc tính năng tích hợp cụ thể nào không
      Nếu không thì Julia cho cảm giác tốt và sẽ là một lựa chọn thay thế đầy đủ
      Cú pháp có phần tương tự và cũng có nhiều tiện ích liên quan đến mảng của MATLAB
      Ngoài ra, nó cung cấp một hệ thống kiểu dữ liệu tốt và xử lý lập trình đa dụng tốt hơn nhiều; chẳng hạn những thứ như vị trí đặt hàm không hành xử kỳ quặc
      Khuyên bạn nên tự dùng thử
  • Liên kết PDF ở phần đầu trang trả về 404

    • Có vẻ như họ cố ý tắt nó
      “Các ghi chú này có thể được biên dịch thành tệp PDF thông qua Quarto. Vì kết quả khá lớn nên chúng tôi không cung cấp tệp để tải xuống. Độc giả quan tâm có thể tải kho lưu trữ về, khởi tạo môi trường, rồi chạy quarto trong thư mục con quarto để render thành PDF; tệp đó sẽ được tạo ra. Việc này mất một lúc”
  • “Tính toán là một cám dỗ cần chống lại càng lâu càng tốt”
    J.P. Boyd