3 puntos por GN⁺ 2024-05-19 | 1 comentarios | Compartir por WhatsApp
  • Notas de aprendizaje pensadas para ayudar a entender el cálculo desde varias perspectivas, aprovechando la sintaxis sencilla de Julia y su capacidad de cómputo en gráficos y experimentos numéricos
  • Siguiendo el enfoque del rule of four al estilo Harvard, abordan en conjunto las perspectivas gráfica, numérica, algebraica y verbal, aunque con Julia se muestran sobre todo los aspectos gráficos, numéricos y parte de los algebraicos
  • Mientras que los sistemas de álgebra computacional como Mathematica, Maple y Sage destacan en el procesamiento simbólico, estas notas usan Julia como herramienta centrada en el cálculo numérico y añaden el álgebra necesaria
  • El estudiante puede preparar su entorno siguiendo las guías de instalación e interfaces, y simplificar tareas repetitivas y funciones comunes con el paquete CalculusWithJulia
  • Cada página trata un concepto enfocado, como si fuera una sección de un libro, y al final incluye problemas de autoevaluación para comprobar los conceptos de cálculo necesarios para resolver ejercicios introductorios

Un enfoque para aprender cálculo con Julia

  • Calculus with Julia es una colección de notas para aprender calculus con el lenguaje Julia
  • Julia es un lenguaje de programación de código abierto y, en estas notas, su sintaxis fácil de aprender y sus capacidades de cálculo se usan como herramientas adecuadas para estudiar cálculo
  • También se ofrecen documentos para preparar el aprendizaje
  • Desde mediados de los años 90, en la enseñanza del cálculo ha existido una corriente que busca usar varias perspectivas a la vez, y el “rule of four” al estilo Harvard propone incluir tanto como sea posible los elementos gráficos, numéricos, algebraicos y verbales
  • Estas notas están organizadas para permitir explorar, mediante Julia, los aspectos gráficos y numéricos del cálculo, y a veces también los algebraicos

Diferencias frente a los sistemas de álgebra computacional

  • Hay muchos casos en que se han integrado sistemas de álgebra computacional como Mathematica, Maple y Sage en el aprendizaje del cálculo
  • WolframAlpha permite invocar funciones de Mathematica mientras acepta una sintaxis informal y flexible, y también puede usarse como backend de funciones de Apple Siri
  • Estos sistemas modelan bien el procesamiento algebraico y simbólico en el aprendizaje, y también ofrecen medios para mostrar el aspecto numérico
  • En cambio, estas notas usan Julia principalmente como herramienta de cálculo numérico, y abordan el álgebra y el procesamiento simbólico como una capa adicional sobre eso
  • Aunque hacer el procesamiento simbólico directamente a mano puede ser beneficioso para aprender, los sistemas de álgebra computacional pueden producir fácilmente el resultado final y hacer que esa práctica parezca redundante

Alcance del aprendizaje y estructura de las páginas

  • El objetivo es acercarse a los conceptos del cálculo usando tecnología, sin quedar atado a los detalles mecánicos de un lenguaje de programación
  • La sintaxis de Julia se presenta como algo que no es mucho más difícil al inicio que usar una calculadora, pero con un gran potencial de expansión
  • Las notas reducen el trabajo a un conjunto limitado de conceptos computacionales
    • Incluso solo con ese conjunto se pueden resolver muchos problemas de cálculo
    • No se cubren de forma exhaustiva las distintas facetas de la programación
    • Quien tenga más interés puede profundizar ampliamente a través de Julia
  • Dentro de ese conjunto limitado de conceptos computacionales se incluyen operadores que reducen los cálculos de cálculo a llamadas de función con la forma action(function, arguments...)
  • Con un pequeño conjunto de acciones combinables, se pueden abordar muchos problemas de cálculo introductorio
  • Cada página está construida alrededor de un solo concepto relativamente enfocado, como si fuera una sección de un libro
  • Al final de cada página hay problemas para resolver por cuenta propia, y todos tienen un número limitado de respuestas de autoevaluación
  • Las ideas provienen de Strang, Knill, Schey, Hass et al., Rogawski et al., Angenent, varias páginas de Wikipedia y otras fuentes

Materiales disponibles y formas de ejecución

  • Las notas incluyen el paquete de Julia CalculusWithJulia
    • Proporciona funciones simples para simplificar tareas comunes
    • Carga paquetes útiles que se usarán repetidamente
  • Las notas se ofrecen en formato de Quarto book, y la información sobre libros en Quarto puede consultarse en la documentación de Quarto
  • Es posible compilar un archivo PDF con Quarto, pero hay que ajustar varias partes, el resultado no es óptimo y el tamaño del archivo es bastante grande
  • Se ofrece descarga de la versión PDF
  • Se puede contribuir mediante el enlace “Edit this page” para proponer temas adicionales, corregir errores o arreglar erratas, y los colaboradores quedan registrados en contributors
  • Julia puede instalarse fácilmente con la utilidad juliaup
  • También se ofrecen enlaces a instancias de binder.org para ejecutar Julia en la web, aunque con limitaciones de recursos
    • Imagen sin SymPy
    • Imagen con SymPy, con mayor tiempo de carga

1 comentarios

 
GN⁺ 2024-05-19
Opiniones de Hacker News
  • Personalmente me parece un material muy oportuno, justo cuando mi hijo está por entrar a segundo año de preparatoria y va a tomar SVC.
    Si el autor está leyendo este hilo, me pregunto si también sería adecuado para un estudiante de preparatoria que solo ha tenido una introducción básica a Python.

    • Si un estudiante de preparatoria va a aprender cálculo, creo que antes de programar conviene que pase un buen tiempo aprendiendo con papel y lápiz.
      Es importante resolver problemas directamente y pensar en los conceptos básicos, en lugar de preocuparse por la sintaxis del código; practicar a mano ayuda a interiorizar mejor el contenido.
    • Diría que rotundamente no.
      La parte de programación está bien, pero al revisarlo rápido, las explicaciones matemáticas están escritas de una forma que sería muy confusa para alguien que no conozca ya cálculo, y el estudiante podría terminar sintiendo que no es bueno para las matemáticas cuando en realidad lo que falta es explicación.
      Por ejemplo, la figura de [1] muestra una curva pasando por una caja sombreada en forma de L sin etiquetas en los ejes, y luego deriva la fórmula de integración por partes mediante ecuaciones paramétricas y varias sustituciones.
      Incluso para alguien que conoce bien la integración por partes, es casi de las formas más confusas de derivar o explicar la fórmula; y si uno no entiende ya el concepto, la figura tampoco ayuda mucho.
      Si has visto ilustraciones excelentes y explicaciones claras como las de “Calculus” de James Stewart, el contraste es muy marcado.
      Normalmente, una explicación de integración por partes empieza, como hace el autor, con la regla del producto, pero primero trabaja algunos ejemplos de derivación de productos para construir intuición sobre la forma de la antiderivada del resultado; después integra ambos lados y separa la integral para derivar la fórmula[2].
      Es mucho más claro y fácil de seguir, y si de verdad se quiere ayudar al estudiante, conviene enseñar también métodos como el tabular/“DI” para que no sufra con los signos al hacer integración por partes varias veces.
      [1] https://jverzani.github.io/CalculusWithJuliaNotes.jl/integra...
      [2] Aquí están las notas de derivación que hice cuando lo aprendí. No las escribí para explicar a principiantes, son notas personales, pero aun así son mucho más fáciles de seguir que el ejemplo anterior: https://publish.obsidian.md/uncarved/3+Resources/Public/Inte...
    • Yo aprendí cálculo por mi cuenta a esa edad, es decir, en 11.º grado; al principio obviamente me costó, pero aguanté hojeando varios libros a medias hasta encontrar uno con el que los conceptos encajaron.
      Así que, si tuviera que recomendar algo, diría que vean Quick Calculus, de Kleppner y Ramsey.
      Ningún libro que haya usado se le acercó para construir la intuición de conceptos que uno ve por primera vez.
      Después de dominar eso, cualquier buen libro sirve; el de James Stewart también es excelente, pero es tan grueso que conviene usarlo más como libro de referencia para escoger lecturas y problemas adecuados, no para hacer todos los ejercicios desde la página 1.
      Lo esencial es tener bien claros desde el inicio los fundamentos de qué son una derivada, una integral y un límite, y en eso Quick Calculus fue imbatible.
      Si al estudiante le interesa la programación, también estaría bien complementar Stewart con ejercicios elegidos según criterio de este libro de Julia o de otro similar; y si quiere resolverlos en Python, es perfectamente suficiente.
      Yo también, a esa misma edad, implementé en Python un integrador numérico y un derivador simbólico como forma de afianzar mis conocimientos de cálculo; ambos fueron útiles y divertidos.
      En particular, la derivación simbólica se sentía como magia, pero al final consistía en hacer parsing e ir agregando cada regla aprendida en matemáticas.
    • No creo que para este curso haga falta haber tenido contacto previo con Julia ni con programación.
    • La palabra “cálculo” puede tener varios significados, y puede variar según la clase, la escuela o el país.
      El cálculo que aprendí en los últimos dos años de preparatoria se parecía a los grados anteriores: consistía en aprender varios algoritmos para manipular símbolos, algunos pasos que requerían un poco de intuición y algunos hechos sobre pendientes y áreas para resolver problemas planteados en texto.
      Lo primero que aprendimos fue la regla de que la derivada de x^n es n x^(n-1), como parte de los algoritmos de diferenciación.
      En la universidad, la misma materia se llamaba análisis, y trataba de definir varios conceptos y demostrar sus propiedades.
      Este tipo de curso suele seguir una estructura de tres partes: sucesiones y series y su convergencia hacia límites; continuidad de funciones y límites de funciones; derivadas e integrales, y quizá parte del teorema de Taylor.
      Desde que Cauchy introdujo muchas definiciones “modernas” en sus libros de texto, esta estructura no ha cambiado mucho; la excepción evidente sería la integral conocida como integral de Riemann.
      No sé de qué tipo es este curso, pero como empieza con límites, podría estar más cerca de lo segundo; en ese caso no sé bien qué tan útil sería Julia.
      Al evaluar si es adecuado, el punto clave parece ser que puede exigir madurez matemática más que programación.
      Por madurez matemática me refiero a la capacidad de manejar definiciones precisas y conceptos abstractos sin sacar un montón de conclusiones erróneas, y de seguir argumentos en forma de demostraciones matemáticas.
  • Hojeé un poco el libro por distintas partes y me pareció interesante; sentí que podría recomendarles a los chicos aprender cálculo de esta manera.
    Sin embargo, me dio curiosidad la frase del primer párrafo del prólogo: “Julia es un lenguaje de programación open source con una sintaxis fácil de aprender y encaja bien para esta tarea”.
    ¿Por qué Julia es más adecuado que otros lenguajes?

    • Julia tiene muchas pequeñas ventajas útiles para las matemáticas.
      Como en la notación matemática estándar, si se antepone un escalar a una variable, se interpreta implícitamente como multiplicación; por ejemplo, si x es 2, 3x se evalúa como 6.
      También tiene amplio soporte para Unicode, así que operadores como ∈ y ∉ pueden parecer un poco excesivos, pero funcionan como se espera; π está predefinido e incluso es un tipo de dato irracional, y √ también puede usarse como operador, de modo que √2 es una expresión válida que produce un valor de punto flotante.
      Julia no solo admite esta sintaxis, sino que además ofrece formas fáciles de ingresarla.
      Aunque tiene algo menos que ver con el cálculo, los vectores y matrices son tipos de datos de primera clase, por lo que son mucho más fáciles de escribir y entender visualmente que en Python.
      Es la diferencia entre m = [1 2 3; 4 5 6; 7 8 9] y m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]].
      La transposición se hace con el operador de un solo carácter ', el producto interno se puede escribir con el operador punto m ⋅ n, y A\b funciona como en Matlab.
      Además admite broadcasting y también tiene comprehensions, aunque personalmente, gracias al broadcasting, necesité menos las comprehensions.
      Los racionales también vienen incorporados y usan una sintaxis muy simple, como 1//2.
    • Porque Julia es un lenguaje creado con el objetivo del análisis numérico.
      Su principal “competidor”, Python, es famoso por no tener una buena sintaxis para operaciones matemáticas; su biblioteca estándar tiene poco soporte matemático, su sistema de tipos es limitado y su rendimiento de ejecución es muy malo.
      Julia resuelve estos problemas ofreciendo un lenguaje relativamente fácil de leer, que a menudo se parece a la notación matemática y además tiene un rendimiento bastante bueno.
    • Yo también estuve probando varias partes y, aunque el formato y la progresión del libro me parecieron algo confusos, algunas funciones de Julia me resultaron interesantes, como la notación postfija que permite escribir expresiones tipo manuscritas como f’ y f’’.
      Por experiencia personal, el mejor “libro de cálculo” no usa Julia sino Haskell, y solo depende de una biblioteca para graficar: Learn Physics with Functional Programming.
      https://www.lpfp.io/
      Julia es conocido como un “lenguaje de programación para matemáticas”, y esa orientación ha guiado buena parte de su desarrollo.
      De forma explícita, admite mucha notación matemática que coincide con símbolos manuscritos o de LaTeX.
      De forma implícita, parece apuntar a una sintaxis simplificada al estilo Python, amplia interoperabilidad, el uso de SymPy —al que este tutorial le delega mucho trabajo—, primitivas integradas para cómputo paralelo y compilación JIT que permite iterar y explorar rápidamente.
    • Hay una buena visión general aquí:
      https://computationalthinking.mit.edu/Spring21/
      En muy pocas palabras, es un lenguaje hasta cierto punto parecido a Python e igual de fácil de usar, pero con una sintaxis mucho más rica para expresar matemáticas directamente.
      Los notebooks también son más ricos.
      La diferencia clave es que en los notebooks de Python se ejecutan celdas, mientras que los notebooks de Julia manejan cosas como dependencias.
      Si cambias x por un número o un slider, todo lo que depende de eso se actualiza.
      Defines un gráfico, agregas un slider y simplemente funciona.
      Yo tampoco soy experto en Julia y trabajo sobre todo con Python y JavaScript, pero en clases similares esas dos diferencias resaltan muchísimo.
    • Julia heredó mucho ADN de MATLAB, como el álgebra lineal en la biblioteca estándar y los índices que empiezan en 1.
      A eso se suma un soporte de Unicode que se usa con mucha frecuencia, y en muchos casos puede verse deliberadamente como pseudocódigo.
  • Curiosamente, como quiero aprender ML, hace poco empecé a repasar matemáticas, es decir, álgebra lineal, cálculo y estadística.
    Mientras aprendo varios temas, también voy haciendo implementaciones simples en Python; me da un poco de vergüenza admitirlo, pero antes nunca había usado Python.
    Está bastante bueno poder rotar vectores y graficar funciones con matplotlib.
    También podría dibujarlas a mano, pero no quedarían tan bonitas.

  • Hay que tener algo de cuidado al diseñar un curso de este tipo.
    En general, probablemente resulte más interesante para alguien que ya sabe algo tanto de cálculo como de programación, y quienes en teoría serían el público esperado —personas que están aprendiendo una de esas dos cosas— quizá no estén tan preparados para recibir una clase así.
    Personalmente, cuando intenté incorporar a una clase de cálculo algún sistema de álgebra computacional algo exótico, como Maxima o Sagemath, la reacción fue tibia en el mejor de los casos.
    Creo que parte del problema era que los estudiantes de primer año no tenían mucho interés en instalar software para una materia que ni siquiera era de ciencias de la computación.
    Dicho eso, en cursos de nivel un poco más alto puede funcionar bastante bien como elemento opcional, y en una clase de ecuaciones diferenciales ordinarias obtuve muy buenos resultados con proyectos en Python.
    Que Python no sea un lenguaje de nicho sin duda también ayudó.

    • Es una dificultad común también en la enseñanza de estadística, porque los estudiantes tienen que aprender conceptos estadísticos y software estadístico al mismo tiempo.
      Aun así, creo que al final vale la pena asumir ese desafío, y es mejor que hacer que calculen todo a mano y busquen valores en tablas.
    • Como programador autodidacta que no aprendió más allá de álgebra, este material me parece excelente, y quizá yo sea justamente parte de ese pequeño público objetivo.
    • Si obtuviste buenos resultados con proyectos en Python en una clase de ecuaciones diferenciales ordinarias, me da curiosidad saber qué material usaste.
      Me gustaría que pudieras compartir cualquier referencia: apuntes de clase, código, diapositivas, libros, lo que sea.
  • Relacionado con esto, si usas Emacs, existe el paquete Calc, que soporta álgebra computacional.
    Hace poco publiqué una interfaz que hace que Calc sea mucho más fácil de usar, y escribí sobre eso aquí:
    http://yummymelon.com/devnull/mathing-in-emacs-with-casual.h...

  • Me gusta el concepto
    Pero creo que habría sido mucho mejor si este material se hubiera construido sobre algo como MOOCulus, o si hubiera partido de ahí
    https://ximera.osu.edu/mooculus/calculus1
    En general prefiero MOOCulus
    Aun así, Calculus with Julia aporta mucho valor
    Sería bueno que de alguna manera pudieran integrarse
    La clave de MOOCulus es que la calidad del texto es mejor y es mucho menos verboso, y gracias a los ejercicios integrados los estudiantes siguen el contenido con atención
    Se usa mucho en clases y también está bastante pulido
    Si se hiciera un fork para reforzarlo con Julia, sería una mejora enorme; lo mismo si se agregaran ejemplos de aplicaciones

    • Revisé el sitio web y también es bastante difícil entender cómo se supone que hay que usarlo
      Además, incluso en lo primero que hice clic, “Equal or Not?”, hay un error
  • La combinación de Maxima y Gnuplot, junto con la documentación incluida, también es bastante buena
    Recuerdo que también había una guía/introducción en PDF bastante completa sobre Maxima

  • ¿Puede Julia ser una alternativa válida para alguien que usaba Matlab?

    • Sí, perfectamente
      Para ver las diferencias en detalle, consulta https://docs.julialang.org/en/v1/manual/noteworthy-differenc...
    • Muchísimo
      Es parecido a darle un vaso de agua helada a alguien en el infierno
      Tomando prestada la frase que Steve Jobs usó sobre iTunes para Windows; claro, en ese momento iTunes todavía no era el desastre en que se convirtió después
      Respeto mucho lo que lograron Cleve Moler y Matlab, en especial hacer fácilmente accesibles LINPACK y EISPACK, entre otros
      También hicieron muchos esfuerzos por superar la limitación inicial de tener un único tipo de dato: la matriz
      Pero Julia es un lenguaje moderno de propósito general, mucho más agradable para trabajar, y conserva casi toda la potencia de Matlab
    • En muchos sentidos, sí
      Es mucho más rápido, en general tiene muchas mejores prestaciones como lenguaje de programación, y paralelizar es mucho más fácil
      Habiendo usado ambos profesionalmente, diría que hoy en día, por lo general, Julia es una mejor opción
      Dicho eso, lenguajes como Matlab o Stata ya tienen una enorme cantidad de algoritmos existentes implementados, y puede que Julia no tenga una implementación equivalente
      Si lo que quieres es uno de esos, muchas veces es difícil justificar usar otro lenguaje
      En la práctica, trasladar código de Matlab/Python/Stata a Julia casi siempre me resultó bastante fácil
    • Totalmente
      El código en Julia puede verse mucho mejor y rendir muchísimo más que el código en Matlab
    • Depende de si dependes de algún toolbox de MATLAB o de funciones de integración específicas
      Si no, Julia se siente bien y será una alternativa suficiente
      La sintaxis se parece en cierta medida y también tiene muchas de las comodidades de MATLAB para arreglos
      Además, ofrece un buen sistema de tipos y un manejo mucho mejor de la programación de propósito general; por ejemplo, cosas como la ubicación de las funciones no se comportan de manera extraña
      Recomiendo probarlo directamente
  • El enlace al PDF en el encabezado de la página da 404

    • Parece que lo desactivaron a propósito
      “Estas notas se pueden compilar como un archivo PDF mediante Quarto. Como el resultado es bastante grande, no se ofrece un archivo para descargar. Los lectores interesados pueden descargar el repositorio, instanciar el entorno y ejecutar quarto en el subdirectorio quarto para renderizarlo como PDF; eso generará el archivo. Toma un tiempo”
  • “El cálculo es una tentación a la que hay que resistirse tanto como sea posible”
    J.P. Boyd