Cálculo com Julia
(jverzani.github.io)- Um conjunto de notas de estudo para ajudar a entender cálculo sob várias perspectivas, usando a sintaxe fácil do Julia e sua capacidade de cálculo em gráficos e experimentos numéricos
- Segue o fluxo do rule of four no estilo de Harvard, abordando em conjunto as perspectivas gráfica, numérica, algébrica e verbal, embora em Julia mostre principalmente os aspectos gráfico, numérico e parte do algébrico
- Enquanto sistemas de álgebra computacional como Mathematica, Maple e Sage são fortes em manipulação simbólica, estas notas usam Julia como ferramenta centrada em cálculo numérico e acrescentam o tratamento algébrico quando necessário
- O aprendiz pode preparar o ambiente seguindo as instruções de instalação e interface, e usar o pacote
CalculusWithJuliapara simplificar tarefas repetitivas e funções comuns - Cada página trata de um conceito de forma focada, como uma seção de um livro, e no final há exercícios com autocorreção para verificar os conceitos de cálculo necessários para resolver problemas introdutórios de cálculo
Uma abordagem para aprender cálculo com Julia
- Calculus with Julia é uma coleção de notas para aprender calculus com a linguagem
Julia - Julia é uma linguagem de programação open source e, nestas notas, sua sintaxe fácil de aprender e seus recursos de cálculo são usados como ferramentas adequadas para o estudo de cálculo
- Também são fornecidos materiais para preparação do estudo
- Getting started with Julia: orientações para instalação e configuração de usuário do Julia
- Julia interfaces: orientações sobre várias formas de interagir com uma instalação do Julia
- Desde meados da década de 1990, houve uma tendência no ensino de cálculo de usar várias perspectivas em conjunto, e o “rule of four” no estilo de Harvard procura incluir, sempre que possível, elementos gráficos, numéricos, algébricos e verbais
- Estas notas foram estruturadas para permitir examinar, com Julia, os aspectos gráficos e numéricos do cálculo e, às vezes, também os aspectos algébricos
Diferença em relação aos sistemas de álgebra computacional
- Há muitos exemplos de integração de sistemas de álgebra computacional como Mathematica, Maple e Sage ao aprendizado de cálculo
- O WolframAlpha permite chamar funcionalidades do Mathematica ao mesmo tempo que aceita uma sintaxe informal e flexível, e também pode ser usado como backend de recursos da Apple Siri
- Esses sistemas modelam bem o tratamento algébrico e simbólico no aprendizado e também fornecem meios para mostrar aspectos numéricos
- Em contraste, estas notas usam Julia principalmente como ferramenta de cálculo numérico, acrescentando sobre ela o tratamento algébrico e simbólico
- O processo de fazer a manipulação simbólica diretamente à mão pode ser benéfico para o aprendizado, mas sistemas de álgebra computacional podem produzir facilmente o resultado final, fazendo esse exercício parecer redundante
Escopo do estudo e organização das páginas
- O objetivo é abordar os conceitos de cálculo com ajuda da tecnologia, sem ficar preso aos detalhes mecânicos de uma linguagem de computador
- A sintaxe do Julia é tratada como a de uma linguagem com entrada inicial não muito mais difícil do que usar uma calculadora, mas com grande potencial de expansão
- As notas reduzem os conceitos computacionais a um conjunto limitado
- Mesmo só com esse conjunto, é possível resolver muitos problemas de cálculo
- Vários aspectos da programação não são tratados de forma exaustiva
- Quem tiver mais interesse pode explorar com mais profundidade por meio do Julia
- Dentro desse conjunto limitado de conceitos computacionais estão operadores que reduzem cálculos de cálculo a chamadas de função no formato
action(function, arguments...) - Com uma pequena coleção de ações (actions) combináveis, é possível tratar muitos problemas de cálculo introdutório
- Cada página é organizada em torno de um único conceito relativamente focado, como uma seção de um livro
- No fim de cada página, há problemas para resolver diretamente, todos com um número limitado de respostas com autocorreção
- As ideias vêm de Strang, Knill, Schey, Hass et al., Rogawski et al., Angenent, várias páginas da Wikipedia e outras fontes
Materiais oferecidos e formas de execução
- As notas incluem o pacote Julia
CalculusWithJulia- Ele fornece funções simples que simplificam tarefas comuns
- Carrega pacotes úteis para uso repetido
- As notas são fornecidas no formato de livro Quarto, e informações sobre livros em Quarto podem ser encontradas na documentação do Quarto
- É possível compilar um arquivo PDF com Quarto, mas é preciso ajustar várias partes, o resultado não é o ideal e o tamanho do arquivo também é bastante grande
- É fornecido um download da versão em PDF
- Contribuições podem ser feitas pelo link “Edit this page”, na forma de sugestão de tópicos adicionais, correção de erros e correção de typos, e os colaboradores ficam registrados em contributors
- Julia pode ser instalado facilmente com o utilitário
juliaup - Também são fornecidos links para instâncias do
binder.orgpara executar Julia na web, mas há limitações de recursos- Imagem sem SymPy
- Imagem com SymPy, com tempo de carregamento maior
1 comentários
Opiniões no Hacker News
Para mim, parece um material muito oportuno, já que meu filho está entrando no 2º ano do ensino médio e vai cursar SVC
Se o autor estiver acompanhando esta thread, gostaria de saber se também é adequado para um estudante do ensino médio que só teve uma introdução básica a Python
Mais importante do que se preocupar com a sintaxe do código é resolver os problemas diretamente e pensar nos conceitos básicos; praticar à mão ajuda a internalizar melhor o conteúdo
A parte de programação é boa, mas, dando uma olhada rápida, as explicações matemáticas parecem escritas de um jeito que seria muito confuso para alguém que ainda não sabe cálculo, e o aluno pode acabar achando que é ruim em matemática quando, na verdade, a explicação é que está insuficiente
Por exemplo, a figura em [1] mostra uma curva passando por uma região sombreada em forma de L, sem nem rótulos nos eixos, e em seguida deriva a fórmula de integração por partes usando equações paramétricas e várias substituições
Mesmo para quem conhece bem integração por partes, essa é quase uma das formas mais confusas de derivar ou explicar a fórmula; para quem ainda não entendeu o conceito, a figura também não ajuda muito
Se você já viu diagramas excelentes e explicações claras como os do “Calculus”, de James Stewart, o contraste fica muito evidente
Em geral, uma explicação de integração por partes começa, como a do autor, pela regra do produto, mas primeiro faz alguns exemplos de derivação de produtos para construir uma intuição sobre a forma da antiderivada resultante; depois integra os dois lados e separa a integral para derivar a fórmula[2]
É muito mais claro e fácil de acompanhar; e, se a intenção é realmente ajudar o aluno, também é melhor ensinar algo como o método em tabela/“DI” para que ele não sofra com sinais ao aplicar integração por partes várias vezes
[1] https://jverzani.github.io/CalculusWithJuliaNotes.jl/integra...
[2] Aqui estão as notas de derivação que fiz quando aprendi. Não foram escritas para explicar a iniciantes, são notas pessoais, mas ainda assim são muito mais fáceis de acompanhar do que o exemplo acima https://publish.obsidian.md/uncarved/3+Resources/Public/Inte...
Então, se eu fosse recomendar, diria para olhar Quick Calculus, de Kleppner e Ramsey
Nenhum livro que usei chegou perto dele para construir intuição sobre conceitos vistos pela primeira vez
Depois de dominar isso, qualquer bom livro serve; o livro de James Stewart também é excelente, mas é grosso demais, então é melhor usá-lo como uma referência para escolher leituras e exercícios adequados, em vez de mandar fazer todos os problemas desde a página 1
O ponto central é acertar bem, desde o início, os fundamentos do que são derivadas, integrais e limites; nesse aspecto, Quick Calculus foi imbatível
Se o aluno tiver interesse em programação, também pode ser bom complementar Stewart escolhendo, a seu critério, exercícios deste livro de Julia ou de algum livro parecido; e, se quiser, dá perfeitamente para resolvê-los em Python
Eu também, nessa mesma idade, implementei em Python um integrador numérico e um diferenciador simbólico como forma de consolidar meu conhecimento de cálculo, e ambos foram úteis e divertidos
Em especial, a diferenciação simbólica parecia mágica, mas, no fim, era uma questão de fazer parsing e ir adicionando cada uma das regras aprendidas em matemática
O cálculo que aprendi nos dois últimos anos do ensino médio era parecido com os anos anteriores: aprender vários algoritmos de manipulação simbólica, algumas etapas que exigiam um pouco de intuição e alguns fatos sobre inclinação e área para resolver problemas enunciados em texto
A primeira coisa que aprendi foi a regra, parte do algoritmo de diferenciação, de que a derivada de x^n é n x^(n-1)
Na universidade, a mesma disciplina era chamada de análise, e consistia em definir vários conceitos e provar suas propriedades
Esse tipo de curso geralmente segue uma estrutura em três partes: sequências e séries e sua convergência para limites; continuidade de funções e limites de funções; diferenciação e integração, e talvez alguma parte do teorema de Taylor
Essa estrutura não mudou muito desde que Cauchy introduziu muitas definições “modernas” em seu livro-texto, com a exceção óbvia da integral hoje conhecida como integral de Riemann
Não sei que tipo de curso é este, mas, como começa por limites, pode estar mais próximo do segundo caso; nesse caso, não tenho certeza de quão útil Julia seria
Ao avaliar a adequação, o ponto principal parece ser que ele pode exigir maturidade matemática, mais do que programação
Por maturidade matemática, quero dizer algo próximo da capacidade de lidar com definições precisas e conceitos abstratos sem tirar um monte de conclusões erradas, e de acompanhar argumentos na forma de provas matemáticas
Dei uma folheada no livro aqui e ali e achei interessante; fiquei com a sensação de que talvez eu pudesse recomendar às crianças aprender cálculo desse jeito.
Mas fiquei curioso com a frase do primeiro parágrafo do prefácio: “Julia é uma linguagem de programação open source com uma sintaxe fácil de aprender e é bem adequada para esta tarefa”.
Por que Julia é mais adequada do que outras linguagens?
Como na notação matemática padrão, colocar um escalar antes de uma variável implica multiplicação; por exemplo, se x for 2, 3x é avaliado como 6.
O suporte a Unicode também é amplo, então operadores como ∈ e ∉ podem até parecer um pouco exagerados, mas funcionam como esperado; π já vem definido e é até de um tipo de número irracional, e √ também pode ser usado como operador, de modo que √2 é uma expressão válida que vira um valor de ponto flutuante.
Julia não só dá suporte a essa sintaxe como também oferece maneiras fáceis de digitá-la.
Embora isso tenha um pouco menos a ver com cálculo, vetores e matrizes são tipos de primeira classe, então são muito mais fáceis de digitar e entender visualmente do que em Python.
É a diferença entre
m = [1 2 3; 4 5 6; 7 8 9]em = [[1, 2, 3], [4, 5, 6], [7, 8, 9]].A transposição é feita com o operador de um caractere
', o produto interno pode ser feito com o operador de pontom ⋅ n, eA\btambém funciona como no Matlab.Além disso, há suporte a broadcasting, e também existem comprehensions, mas pessoalmente achei que, por causa do broadcasting, precisei menos de comprehensions.
Números racionais também vêm embutidos e usam uma sintaxe bem simples, como
1//2.Sua principal “concorrente”, Python, é famosa por ter uma sintaxe ruim para operações matemáticas; a biblioteca padrão tem pouco suporte matemático, o sistema de tipos é limitado e o desempenho de execução é muito ruim.
Julia resolve esses problemas ao mesmo tempo que oferece uma linguagem relativamente fácil de ler, frequentemente parecida com a notação matemática, e com desempenho bastante bom.
f’ef’’.Pela minha experiência pessoal, o melhor “livro de cálculo” não usa Julia, e sim Haskell, dependendo apenas de uma biblioteca para desenhar gráficos: Learn Physics with Functional Programming.
https://www.lpfp.io/
Julia é conhecida como uma “linguagem de programação para matemática”, e essa orientação guiou boa parte do seu desenvolvimento.
Explicitamente, ela oferece suporte a muitas notações matemáticas que correspondem a símbolos manuscritos ou de LaTeX.
Implicitamente, isso parece se referir à sintaxe simplificada no estilo Python, à ampla interoperabilidade, ao uso do SymPy, que faz boa parte do trabalho neste tutorial, aos primitivos embutidos de computação paralela e à compilação JIT, que permite iteração e exploração rápidas.
https://computationalthinking.mit.edu/Spring21/
Em resumo bem curto, é uma linguagem até certo ponto parecida com Python e igualmente fácil de usar, mas com uma sintaxe muito mais rica para expressar matemática diretamente.
Os notebooks também são mais ricos.
A diferença central é que, em notebooks Python, você executa células, enquanto notebooks Julia lidam com coisas como dependências.
Se você troca x por um número ou por um slider, tudo que depende dele é atualizado.
Defina um gráfico e adicione um slider, e simplesmente funciona.
Também não sou especialista em Julia e trabalho principalmente com Python e JavaScript, mas em aulas parecidas esses dois pontos ficam muito claros.
Além disso, há o suporte a Unicode, usado com muita frequência, e em muitos casos ela pode parecer intencionalmente com pseudocódigo.
Curiosamente, como quero aprender ML, recentemente comecei a reaprender matemática, isto é, álgebra linear, cálculo e estatística.
Enquanto estudo várias coisas, também estou fazendo implementações simples em Python, e é meio constrangedor, mas eu nunca tinha usado Python antes.
É bem legal conseguir rotacionar vetores e desenhar funções com matplotlib.
Eu até conseguiria desenhar à mão, mas não ficaria tão bonito.
É preciso ter um pouco de cuidado ao projetar cursos assim.
Em geral, eles provavelmente são mais interessantes para quem já sabe um pouco tanto de cálculo quanto de programação, enquanto o público esperado — pessoas aprendendo uma das duas coisas — talvez não esteja tão preparado para aceitar esse tipo de aula.
Pessoalmente, quando tentei incluir sistemas de álgebra computacional um pouco exóticos, como Maxima ou Sagemath, em aulas de cálculo, a reação foi, no máximo, morna.
Acho que parte do problema era que alunos do primeiro ano não tinham muito interesse em instalar software para uma disciplina que nem era de ciência da computação.
Ainda assim, em cursos de nível um pouco mais alto, isso pode funcionar bem como elemento opcional, e obtive resultados muito bons com projetos em Python em uma disciplina de equações diferenciais ordinárias.
O fato de Python não ser uma linguagem de nicho certamente ajudou.
Mesmo assim, no fim acho que vale a pena encarar esse desafio, e é melhor do que mandar todo mundo calcular tudo à mão e procurar valores em tabelas.
Quais foram as referências? Se puder compartilhar anotações de aula, código, slides, livros ou qualquer coisa do tipo, seria ótimo.
Relacionado a isso, se você usa Emacs, existe o pacote Calc, que oferece suporte a álgebra computacional.
Recentemente publiquei uma interface que torna o Calc muito mais fácil de usar, e escrevi sobre isso aqui:
http://yummymelon.com/devnull/mathing-in-emacs-with-casual.h...
https://www.emacswiki.org/emacs/MaximaMode
Gosto do conceito
Mas acho que teria sido muito melhor se um material assim tivesse sido criado em cima de algo como o MOOCulus, ou tivesse partido dele
https://ximera.osu.edu/mooculus/calculus1
No geral, prefiro mais o MOOCulus
Ainda assim, o valor que o Calculus with Julia acrescenta é grande
Seria bom se os dois pudessem ser integrados de alguma forma
O ponto central do MOOCulus é que a qualidade do texto é melhor e ele é muito menos prolixo, e, graças aos exercícios integrados, os alunos acompanham o conteúdo com atenção
Ele é muito usado em aulas e também já está bastante refinado
Se alguém fizesse um fork e reforçasse a parte de Julia, seria uma melhoria enorme; acrescentar exemplos de aplicações também provavelmente seria
Além disso, já há um erro no primeiro item em que cliquei, “Equal or Not?”
A combinação de Maxima e Gnuplot, junto com a documentação incluída, também é bastante boa
Pelo que me lembro, havia também um PDF introdutório/guia bastante completo sobre Maxima
Julia pode ser uma alternativa válida para quem usava Matlab?
Para ver as diferenças em mais detalhes, consulte https://docs.julialang.org/en/v1/manual/noteworthy-differenc...
É parecido com entregar um copo de água gelada a alguém no inferno
Pegando emprestada a frase de Steve Jobs sobre o iTunes para Windows — claro que, naquela época, o iTunes ainda não tinha virado a bagunça que virou depois
Tenho grande respeito pelo que Cleve Moler e o Matlab realizaram, especialmente por terem tornado coisas como LINPACK e EISPACK facilmente acessíveis
Também houve muito esforço para superar a limitação inicial de haver apenas um único tipo de dado, a matriz
Mas Julia, como linguagem moderna de uso geral, é muito mais agradável para trabalhar e ainda preserva quase todo o poder do Matlab
É muito mais rápida, em geral tem recursos melhores como linguagem de programação, e a paralelização também é muito mais fácil
Tendo usado ambas profissionalmente, eu diria que hoje, de modo geral, Julia é a melhor escolha
Dito isso, linguagens como Matlab ou Stata já têm uma quantidade enorme de algoritmos existentes implementados, e pode não haver uma implementação correspondente em Julia
Se o que você quer é um deles, muitas vezes fica difícil justificar usar outra linguagem
Na prática, migrar código Matlab/Python/Stata para Julia geralmente foi bem fácil
Código Julia pode ser muito mais legível e ter desempenho muito melhor que código Matlab
Se não, Julia tem uma boa pegada e será uma substituta suficiente
A sintaxe é parecida até certo ponto e ela também tem muitas das conveniências do MATLAB relacionadas a arrays
Além disso, oferece um bom sistema de tipos e um tratamento muito melhor de programação de uso geral; por exemplo, coisas como a localização de funções não se comportam de maneira estranha
Recomendo experimentar diretamente
O link para PDF no cabeçalho da página dá 404
“Estas notas podem ser compiladas em um arquivo PDF via Quarto. Como o resultado fica bem grande, não é fornecido um arquivo para download. Leitores interessados podem baixar o repositório, instanciar o ambiente e então executar o Quarto no subdiretório quarto para renderizar em PDF; isso gerará o arquivo. Leva algum tempo”
“O cálculo é uma tentação à qual se deve resistir pelo maior tempo possível”
— J.P. Boyd