Maple é um ambiente de computação simbólica e numérica que também oferece uma linguagem de programação multiparadigma. Seus recursos abrangem matemática simbólica, análise numérica, processamento e visualização de dados e outras áreas da computação técnica. O MapleSim, uma ferramenta complementar, acrescenta recursos para modelagem de sistemas físicos de diferentes domínios e geração de código.
Os recursos de computação simbólica do Maple permitem utilizá-lo como um sistema algébrico computacional de uso geral, capaz de manipular expressões matemáticas e encontrar soluções simbólicas para determinados problemas, como os que envolvem equações diferenciais ordinárias e parciais.
O programa é desenvolvido e comercializado pela empresa canadense Maplesoft. Seu nome faz referência à origem canadense do programa.
Visão geral
Funcionalidades básicas
O usuário pode inserir expressões na notação matemática tradicional e criar interfaces personalizadas. O Maple permite fazer cálculos numéricos com precisão arbitrária, cálculos simbólicos e visualizações, como nos exemplos apresentados adiante.
A linguagem de programação do Maple tem tipagem dinâmica e permite escrever programas no estilo imperativo, com uma sintaxe semelhante à de Pascal e variáveis de escopo léxico. Há interfaces para outras linguagens, como C, C#, Fortran, Java, MATLAB e Visual Basic, e para o Microsoft Excel.
O Maple oferece suporte ao MathML 2.0, um formato do W3C para representar e interpretar expressões matemáticas, inclusive para exibi-las em páginas da internet. Também permite converter expressões escritas na notação matemática tradicional em código para o sistema de composição tipográfica LaTeX.
Arquitetura
O Maple tem um pequeno núcleo, escrito em C, que implementa sua linguagem de programação. A maior parte dos recursos está em bibliotecas de diferentes origens. Muitas dessas bibliotecas são escritas na própria linguagem Maple, e seu código-fonte pode ser consultado. Os cálculos numéricos também utilizam as bibliotecas numéricas NAG, as bibliotecas ATLAS e a GMP.
Os diferentes recursos do programa exigem dados numéricos em formatos distintos. As expressões simbólicas são armazenadas na memória como grafos acíclicos dirigidos. A interface padrão e a interface de calculadora são escritas em Java.
História
A ideia do Maple surgiu em uma reunião no fim de 1980, na Universidade de Waterloo. Pesquisadores da universidade queriam adquirir um computador capaz de executar o Macsyma, um sistema algébrico computacional escrito em Lisp. Como alternativa, decidiram desenvolver um sistema próprio, que pudesse funcionar em computadores mais baratos. Para facilitar a portabilidade, começaram a escrever o Maple em linguagens da família BCPL, primeiro com um subconjunto de B e C e depois apenas em C. Uma primeira versão, ainda com recursos limitados, ficou pronta em três semanas, e versões mais completas começaram a ser utilizadas em 1982. No fim de 1983, havia cerca de 50 instalações do programa fora da universidade.
Em 1984, o grupo de pesquisa firmou um acordo com a Watcom Products Inc. para licenciar e distribuir o programa. A distribuição comercial começou em 1985, com o Maple 3.3. A Waterloo Maple Inc., que passou a usar o nome Maplesoft, foi fundada em 1988 para cuidar da distribuição do software. A empresa criou seu próprio departamento de pesquisa e desenvolvimento, onde passou a realizar a maior parte do desenvolvimento do Maple, com a participação de laboratórios universitários. Entre esses laboratórios estão o Grupo de Computação Simbólica da Universidade de Waterloo e o Centro de Pesquisa de Ontário em Álgebra Computacional, com pesquisadores da Universidade de Western Ontario.
A primeira interface gráfica do Maple foi desenvolvida em 1989 e incluída na versão 4.3 para Macintosh. As versões dessa interface para X11 e Windows vieram em 1990, com o Maple V. Em 1992, o Maple V Release 2 introduziu a folha de trabalho, chamada worksheet, que reunia texto, gráficos, comandos e resultados com formatação matemática. Em 1994, foi publicada uma edição especial do boletim MapleTech, preparado pelos desenvolvedores do programa.
O Maple 6, lançado em 2000, passou a incorporar parte das bibliotecas numéricas NAG. Em 2003, o Maple 9 introduziu a interface padrão, escrita principalmente em Java. Algumas partes, como as regras de formatação de fórmulas matemáticas, foram escritas em Maple. Essa interface recebeu críticas por sua lentidão e foi aperfeiçoada nas versões seguintes. A documentação do Maple 11 ainda recomendava a interface anterior, chamada "clássica", para computadores com memória física abaixo da quantidade recomendada, que era de 512 MB na maioria das plataformas.
Na avaliação de Gaston Gonnet, um dos criadores do programa, o Maple perdeu participação de mercado para concorrentes entre 1995 e 2005 por oferecer uma interface menos fácil de usar. O Maple 10, lançado em 2005, introduziu o "modo de documento", cuja interface foi aprimorada nas versões seguintes.
Em setembro de 2009, a empresa japonesa de distribuição de software Cybernet Systems adquiriu a Maplesoft e o Maple.
Histórico de versões
- Maple 1.0: janeiro de 1982.
- Maple 1.1: janeiro de 1982.
- Maple 2.0: maio de 1982.
- Maple 2.1: junho de 1982.
- Maple 2.15: agosto de 1982.
- Maple 2.2: dezembro de 1982.
- Maple 3.0: maio de 1983.
- Maple 3.1: outubro de 1983.
- Maple 3.2: abril de 1984.
- Maple 3.3: março de 1985, primeira versão disponível ao público.
- Maple 4.0: abril de 1986.
- Maple 4.1: maio de 1987.
- Maple 4.2: dezembro de 1987.
- Maple 4.3: março de 1989.
- Maple V: agosto de 1990.
- Maple V R2: novembro de 1992.
- Maple V R3: 15 de março de 1994.
- Maple V R4: janeiro de 1996.
- Maple V R5: janeiro de 1998.
- Maple 6: fevereiro de 2000.
- Maple 7: junho de 2001.
- Maple 8: maio de 2002.
- Maple 9: 30 de junho de 2003.
- Maple 9.5: 15 de abril de 2004.
- Maple 10: 10 de maio de 2005.
- Maple 11: março de 2007.
- Maple 11.01: julho de 2007.
- Maple 11.02: novembro de 2007.
- Maple 12: maio de 2008.
- Maple 12.01: outubro de 2008.
- Maple 12.02: dezembro de 2008.
- Maple 13: 28 de abril de 2009.
- Maple 13.01: julho de 2009.
- Maple 13.02: outubro de 2009.
- Maple 14: 29 de abril de 2010.
- Maple 14.01: 28 de outubro de 2010.
- Maple 15: 13 de abril de 2011.
- Maple 15.01: 21 de junho de 2011.
- Maple 16: 28 de março de 2012.
- Maple 16.01: 16 de maio de 2012.
- Maple 17: 13 de março de 2013.
- Maple 17.01: julho de 2013.
- Maple 18: 5 de março de 2014.
- Maple 18.01: maio de 2014.
- Maple 18.01a: julho de 2014.
- Maple 18.02: novembro de 2014.
- Maple 2015.0: 4 de março de 2015.
- Maple 2015.1: novembro de 2015.
- Maple 2016.0: 2 de março de 2016.
- Maple 2016.1: 20 de abril de 2016.
- Maple 2016.1a: 27 de abril de 2016.
- Maple 2017.0: 25 de maio de 2017.
- Maple 2017.1: 28 de junho de 2017.
- Maple 2017.2: 2 de agosto de 2017.
- Maple 2017.3: 3 de outubro de 2017.
- Maple 2018.0: 21 de março de 2018.
- Maple 2019.0: 14 de março de 2019.
- Maple 2020.0: 12 de março de 2020.
- Maple 2021.0: 10 de março de 2021.
- Maple 2022.0: 15 de março de 2022.
- Maple 2023.0: 9 de março de 2023.
Recursos
Entre os recursos do Maple estão:
- Cálculos simbólicos e numéricos com precisão arbitrária.
- Bibliotecas de funções elementares e especiais.
- Operações com números complexos e aritmética intervalar.
- Aritmética, cálculo de máximos divisores comuns e fatoração de polinômios multivariados sobre os racionais, corpos finitos, corpos de números algébricos e corpos de funções algébricas.
- Cálculo de limites, séries e expansões assintóticas.
- Bases de Gröbner.
- Álgebra diferencial.
- Ferramentas para manipulação de matrizes, com suporte a matrizes esparsas.
- Ferramentas para traçar gráficos de funções matemáticas e criar animações.
- Resolução de sistemas de equações, equações diofantinas, equações diferenciais ordinárias, equações diferenciais parciais, equações algébrico-diferenciais, equações diferenciais com retardo e relações de recorrência.
- Ferramentas numéricas e simbólicas para cálculo discreto e contínuo, com integração definida e indefinida, somas definidas e indefinidas, diferenciação automática e transformadas integrais contínuas e discretas.
- Otimização local e global, com ou sem restrições.
- Estatística, com ajuste de modelos, testes de hipóteses e distribuições de probabilidade.
- Ferramentas para manipulação, visualização e análise de dados.
- Ferramentas para problemas de probabilidade e análise combinatória.
- Suporte a séries temporais e a dados com unidades de medida.
- Acesso a coleções de dados financeiros e econômicos disponíveis na internet.
- Ferramentas para cálculos financeiros com títulos, anuidades, derivativos, opções e outros instrumentos.
- Cálculos e simulações de processos estocásticos.
- Ferramentas de mineração de textos, com expressões regulares.
- Ferramentas de processamento de sinais e de sistemas de controle lineares e não lineares.
- Ferramentas de matemática discreta, inclusive de teoria dos números.
- Ferramentas para visualizar e analisar grafos dirigidos e não dirigidos.
- Teoria dos grupos, com grupos de permutação e grupos finitamente apresentados.
- Funções simbólicas para tensores.
- Filtros de importação e exportação para formatos de dados, imagens, som, CAD e documentos.
- Edição de textos técnicos, inclusive com edição de fórmulas.
- Uma linguagem de programação que admite construções procedimentais, funcionais e orientadas a objetos.
- Ferramentas para acrescentar interfaces de usuário a cálculos e aplicações.
- Ferramentas de conexão com SQL, Java, .NET, C++, Fortran e HTTP.
- Geração de código em C, C#, Fortran, Java, JavaScript, Julia, MATLAB, Perl, Python, R e Visual Basic.
- Ferramentas de programação paralela.
Exemplos de código Maple



O código a seguir calcula o fatorial de um número inteiro não negativo por meio de uma construção de programação imperativa:
restart; myfac := proc(n::nonnegint) local out, i; out := 1; for i from 2 to n do out := out * i end do; out end proc;
Uma função simples também pode ser definida com a notação de seta:
myfac := n -> product(i, i = 1..n);
Integração
Para calcular a integral
usa-se o comando:
restart; int(cos(x/a), x);
O resultado é:
Determinante
Para calcular o determinante de uma matriz, define-se primeiro a matriz:
restart; M := Matrix([[1,2,3], [a,b,c], [x,y,z]]); # matriz de exemplo
O comando seguinte calcula seu determinante:
LinearAlgebra:-Determinant(M);
Expansão em série
A expansão da tangente hiperbólica em torno de zero é obtida com:
restart; series(tanh(x), x = 0, 15);
Resolução numérica de equações
O código seguinte calcula numericamente as raízes reais de um polinômio de grau elevado:
restart; f := x^53-88*x^5-3*x-5 = 0: fsolve(f);
O programa retorna:
-1.097486315, -.5226535640, 1.099074017
O mesmo comando permite resolver sistemas de equações:
f := cos(x+y)^2 + exp(x)*y + cot(x-y) + cosh(z+x) = 0: g := x^5 - 8*y = 2: h := x + 3*y - 77*z = 55: fsolve({f,g,h});
Uma solução numérica é:
{x = -2.080507182, y = -5.122547821, z = -0.9408850733}
Gráfico de uma função de uma variável
O comando seguinte traça o gráfico de para
entre −10 e 10:
restart; plot(x*sin(x), x = -10..10);
Gráfico de uma função de duas variáveis
Para traçar o gráfico de com
e
entre −1 e 1, usa-se:
restart; plot3d(x^2+y^2, x = -1..1, y = -1..1);
Animação de funções
- Animação de uma função de duas variáveis:
restart; f := 2*k^2/cosh(x*k - 4*k^3*t)^2: plots:-animate(subs(k = 0.5, f), x = -30..30, t = -10..10, numpoints = 200, frames = 50, color = red, thickness = 3);
- Animação de uma função de três variáveis:
restart; plots:-animate3d(cos(t*x)*sin(3*t*y), x = -Pi..Pi, y = -Pi..Pi, t = 1..2);
- Animação de um percurso de câmera por um gráfico tridimensional:
restart; M := Matrix([[400,400,200], [100,100,-400], [1,1,1]], datatype = float[8]): plot3d(1, x = 0..2*Pi, y = 0..Pi, axes = none, coords = spherical, viewpoint = [path = M]);
Transformada de Laplace
restart; f := (1+A*t+B*t^2)*exp(c*t);
inttrans:-laplace(f, t, s);
- Transformada inversa de Laplace:
inttrans:-invlaplace(1/(s-a), s, x);
Transformada de Fourier
Para calcular a transformada de Fourier da função seno, usa-se:
restart; inttrans:-fourier(sin(x), x, w);
Equações integrais
Para encontrar funções que satisfaçam a equação integral
usa-se o código:
restart; eqn := f(x)-3*Int((x*y+x^2*y^2)*f(y), y = -1..1) = h(x): intsolve(eqn, f(x));
O resultado é:
Uso do motor de cálculo do Maple
O motor de cálculo do Maple é utilizado em outros produtos da Maplesoft:
- O MapleNet permite criar páginas JSP e applets Java. A partir da versão 12, também permite enviar e utilizar folhas de trabalho do Maple com componentes interativos.
- O MapleSim é uma ferramenta de simulação para engenharia.
- O pacote Maple Quantum Chemistry, da RDMChem, calcula e permite visualizar as energias eletrônicas e outras propriedades de moléculas.
Os seguintes produtos comerciais de terceiros utilizaram o motor de cálculo do Maple e depois passaram a usar o MuPAD:
- As versões do Mathcad lançadas entre 1994 e 2006 tinham um motor algébrico derivado do Maple, chamado MKM, abreviação de Mathsoft Kernel Maple.
- O Symbolic Math Toolbox do MATLAB continha parte do motor do Maple 10. O MuPAD passou a ser utilizado a partir da edição R2007b+.
- Versões antigas do editor matemático Scientific WorkPlace utilizavam o Maple como motor de cálculo. As versões posteriores passaram a utilizar o MuPAD.
