Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Do Maxima
Apostila Do Maxima
Fevereiro de 2008
PROJETO DE EXTENSÃO:
Uso de software livre como ferramenta de apoio ao ensino da Matemática, Ciência e Física nas
Escolas Públicas de Ensino Fundamental e Médio.
APOSTILA: MAXIMA
AUTORES DA APOSTILA:
Esta apostila foi criada baseada no manual do Software Maxima. (Este manual encontra-se
disponível no site: http://maxima.sourceforge.net/docs/manual/pt_BR/maxima.html#SEC_Top
Para fazermos download do programa ou obtermos outras informações, visite o site oficial do
Maxima. (http://maxima.sourceforge.net).
O Maxima é um Sistema de Computação Algébrica, de código aberto sob a licença GPL (General
Public License), desenvolvido por Willian F. Shelter, implementado em Lisp. , baseado na implementação
original do MacSyma no MIT.
Nesta apostila estaremos utilizando a versão (Maxima 5.14.0) para Linux.
O Programa Maxima pode ser acessado pelo konsole do Linux digitando-se maxima. Um ambiente
um pouco mais amigável também pode ser acessado no Linux pelo comando xmaxima
Na tela principal do maxima veremos informação da versão e uma linha de comando. Termine cada
comando Maxima com um ponto e vírgula e pressione “enter”. No maxima comentários são comandos
constituídos de textos e números contidos entre os caracteres /* e */ ou entre aspas (“ ”) nesse caso os
comentários serão exibidos na tela. Termine uma sessão com o comando "quit();”
Obs.: No MAXIMA, os números decimais não são escritos com o uso de vírgula como aprendemos na escola
e sim com ponto. Por exemplo: 3,75 para nós são 3.75 no MAXIMA como vimos acima.
Podemos atribuir outros valores e não apenas número às variáveis. Vamos a um exemplo:
EXERCÍCIO
Atribua os seguintes valores para as variáveis: a=12; b=37; c=43; d=169; e=4; f=0 e calcule o
valor das expressões a seguir.
Expressão Resultado
−a +b 25
(2 a + 3) (d + 1) 4590
2
b b2 − 4 a c
a d + − 349028
2 a 4a
a d2 + b d + c 349028
5
d − 27+ e − c + 6
f
1 − a + 1 + b 1
1−c − d+1
DICAS
Se colocarmos uma expressão, o MAXIMA conservará a forma simbólica: Para que a operação seja
executada utiliza-se o comando numer.
%,numer;
Em casos que você definiu os valores para variáveis e não quer ver o resultado de uma expressão,
utilize o sinal de apóstrofe antes da expressão.
primep (n) Teste de primalidade. Se primep (n) retornar false, n é um número compostro
e se esse teste retornar true, n é um número primo com grande probabilidade.
totient (n) Retorna o número de inteiros menores que ou iguais a n que são relativamente
primos com n.
log(x) Representa o ln(x)
logarítmo natural (base e) de
x.
Maxima não possui uma
Sugestão de função para calculo de log em outras bases.
função
logaritmo(base,antilog):= solve (base ^ logaritmo = antilog ,
interna para logarítmo de
logaritmo);
base 10 ou de outras bases.
CONSTANTES ESPECIAIS
Há três constantes especiais que são listados na tabela abaixo e sua respectiva representação dentro
do MAXIMA.
Constante (símbolo) Nome Representação no MAXIMA
e Número de Euler %e
π Pi %pi
∞ Infinito inf
γ Constante de Euler %gamma
A forma de definição de função no MÁXIMA é uma das mais simples que existe. Para criar uma
função, por exemplo, f(x) você apenas tem que digitar f(x):= expressão; Vamos a um exemplo:
Obs.:
1. Naturalmente que esta substituição pode ser por outras expressões e não somente por números como
vimos acima.
2. Outra maneira de dizer ao maxima para re-avaliar uma função é inserindo o símbolo apostrofe duas
vezes antes do nome da função a ser reavaliada.
Ex.:
NÚMEROS COMPLEXOS
Números complexos podem ser definidos utilizando o operador “%i” ou “%I” para o “i” (número
complexo tal que i2 = -1) da parte imaginária. Os comandos realpart e imagpart fornecem respectivamente a
parte real e a parte imaginária de um número complexo.
Vejamos o exemplo a seguir:
DIVISIBILIDADE
Dados dois inteiros d e n dizemos que d divide n (ou que d é divisor de n; ou que n é múltiplo de d)
se existir um inteiro q tal que n = dq. A q chamamos quociente da divisão de n por d. Quando d divide n
escrevemos:
d|n.
QUOCIENTE E RESTO
Para todo o d en o existe um único q e um único r tais que
n = dq + r; 0 ≤ r < d;
O q é chamado de quociente e r de resto.
O quociente e resto da divisão inteira são obtidos, respectivamente, pelas funções quotient e
remainder. As funções do Máxima também aceitam argumentos negativos.
O resto é negativo sempre que n é negativo; o quociente é negativo se n e d têm sinais opostos:
Outra forma de obter o quociente e o resto é através da função divide cujo resultado é uma lista em que o
primeiro elemento é o quociente e o segundo elemento é o resto da divisão.
* ezgcd(p1, p2,...) - devolve uma lista cujo primeiro elemento é o m.d.c. dos polinômios p1, p2,..., e os
restantes elementos são os polinômios divididos pelo m.d.c.;
A função ezgcd devolve uma lista, em que o primeiro elemento é o m.d.c. Se pretendermos obter apenas este
valor podemos usar a função part para nos devolver um elemento da lista.
* lcm(exp1, exp2,...) - calcula o mínimo múltiplo comum dos seus argumentos. Fazer load(functs)$ para
acessar esta função.
O mínimo múltiplo comum entre 12 e 21 é 84. Como vemos a seguir:
Ex.: - 1 é divisível por 383? Uma maneira de responder a questão é através do seguinte comando no
Maxima:
PRIMOS
Um inteiro positivo n > 1 diz-se primo se ele tem precisamente 2 divisores: 1 e n (ou seja, se não tiver
divisores próprios). Um número não primo diz-se composto.
O Teorema Fundamental da Aritmética diz que qualquer inteiro n maior que 1 pode ser expresso
como um produto:
x x... x
Autores: Anderson Tavares Neres Adriana dos Santos Morais
Página 9
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008
Onde os pi's são números primos distintos e os ei's são inteiros positivos. Mas, afirma que esta
factorização é única a menos da ordem dos fatores.
Pretende-se determinar se 31418506212244678577 é, ou não, primo. Uma maneira muito pratica de
saber a resposta consiste em usar o factor:
Também é possível decidir se um número é primo ou não sem calcular a sua fatorização!
Em Maxima usamos a função primep:
A função apply: constrói e avalia uma expressão. Os argumentos da expressão são sempre avaliados
(mesmo se eles não puderem ser avaliados de outra forma).
apply("+",L:[a,b,c,d,e]); é a soma dos elementos de L.
A função lambda: constrói uma expressão lambda (uma função sem nome).
A expressão lambda pode ser usada em alguns contextos como uma função comum que possui nome.
lambda não avalia o corpo da função.
f: lambda ([x, y], (x + y)*(x - y));
A função length(L): é o numero de elementos em L.
INTRODUÇÃO A CONJUNTOS
Um conjunto é uma coleção de objetos. A ordem na qual os elementos são listados é irrelevante e,
por conseguinte, dois conjuntos são iguais se contém os mesmos elementos.
Maxima fornece funções de conjunto, tais como intersecção e união, para conjuntos finitos que são
definidos por enumeração explícitamente. Maxima trata listas e conjuntos como objetos distintos. Esse
recurso torna possível trabalhar com conjuntos que possuem elementos que são ou listas ou conjuntos.
Para construir um conjunto com elementos a_1, ..., a_n, escreva set(a_1, ..., a_n) ou {a_1, ..., a_n};
para construir o conjunto vazio, escreva set() ou {}. Para inserção de dados, set(...) e { ... } são equivalentes.
Conjuntos são sempre mostrados entre chaves ({ ... }).Se um elemento é listado mais de uma vez, a
simplificação elimina o elemento redundante.
Obs: Para construir um conjunto dos elementos de uma lista, use setify.
setify ([b, a]);
cartesian_product (b_1, ... , b_n) Retorna um conjunto de listas da forma [x_1, ..., x_n], onde x_1,
..., x_n são elementos dos conjuntos b_1, ... , b_n, respectivamente.
cartesian_product ({0, 1}, {0, 1});
divisors (n): Representa o conjunto dos divisores de n. divisors(n) simplifica para um conjunto de
inteiros quando n for um inteiro não nulo. O conjunto dos divisores inclui os elementos 1 e n. Os divisores de
um inteiro negativo são os divisores de seu valor absoluto.
Para verificar quando um elemento pertence, ou não, a um conjunto, usamos a função elementp, que
é uma função Booleana.
A:{- 4, 1, 3}; elementp(0,A);
MATRIZES
A introdução de uma matriz no Maxima pode ser feita da seguinte forma: Seja a matriz A nm , então:
Matrix([vetor da 1ª linha],[vetor da 2ª linha],...,[ vetor da nésima linha];
2 1 3
Exemplo: − 5 0 1
1 1 − 1
A: matrix([2,1,3],[-5,0,1],[1,1,-1]);
Função compare (x, y): Retorna um operador de comparação op (<, <=, >, >=, =, ou #) tal que is (x
op y) avalia para true; quando ou x ou y dependendo de %i e x # y, retorna notcomparable; Quando não existir
tal operador ou Maxima não estiver apto a determinar o operador, retorna unknown.
Função is (expr): Tenta determinar se a expr predicada (expressões que avaliam para true ou false) é
dedutível de fatos localizados na base de dados de assume. Se a dedutibilidade do predicado for true ou false,
is retorna true ou false, respectivamente. De outra forma, o valor de retorno é governado através do
sinalizador global prederror. Quando prederror for true, is reclama com uma mensagem de erro. De outra
forma, is retorna unknown.
Função maybe (expr): Tenta determinar se a expr predicada é dedutível dos fatos na base de dados
de assume. Se a dedutibilidade do predicado for true ou false, maybe retorna true ou false, respectivamente.
De outra forma, maybe retorna unknown. maybe é funcionalmente equivalente a is com prederror: false, mas
o resultado é computado sem atualmente atribuir um valor a prederror.
OPERADOR ESPECIAL: IF
OPERADOR ESPECIAL: DO
A declaração do é usada para executar iteração. Existem três variantes do que diferem somente por
suas condições de encerramento. São elas:
1. for Variável: valor_inicial step incremento thru limite do corpo
2. for Variável: valor_inicial step incremento while condição do corpo
3. for Variável: valor_inicial step incremento unless condição do corpo
Obs. (Alternativamente, o step pode ser dado após a condição de encerramento ou limite.) valor
inicial, incremento, limite, e corpo podem ser quaisquer expressões. Se o incremento for 1 então "step 1"
pode ser omitido.
A execução da declaração do processa-se primeiro atribuindo o valor inicial para a variável (chamada
variável de controle). Então: (1) Se a variável de controle excede o limite de uma especificação thru, ou se a
condição de unless for true, ou se a condição de while for false então o do será encerrado. (2) O corpo é
avaliado. (3) O incremento é adicionado à variável de controle. O processo de (1) a (3) é executado
repetidamente até que a condição de encerramento seja satisfeita. Pode-se também dar muitas condições de
encerramento e nesse caso o do termina quando qualquer delas for satisfeita.
Exemplos do uso do operador do.
for a:-3 thru 26 step 7 do display(a)$
s: 0$
for i: 1 while i <= 10 do s: s+i;
s;
Dica: a função display (expr_1, expr_2, ...). Mostra equações cujo lado esquerdo é expr_i não
avaliado, e cujo lado direito é o valor da expressão centrada na linha. Essa função é útil em blocos e em for
declarações com o objetivo de ter resultados intermediários mostrados.
PLOTANDO GRÁFICOS 2D
Os gráficos 2D são feitos com o comando plot2d, de acordo com a seguinte sintaxe:
plot2d([expr1, expr2, ...,exprn],[x, mín,máx],[y,mín,máx],...,[opções]);
Antes de nos aprofundarmos em plotagem de gráficos devemos saber que a elaboração e visualização
dos gráficos podem ser aperfeiçoadas com as opções a seguir:
[variável, mín,máx]: podemos delimitar o domínio e a imagem da função. Se não atribuído este
intervalo, o comando plot possui um tamanho padrão.
[grid, divisões do intervalo1, ...]: esta opção, em plotagem 3D, divide o intervalo em n partes,
possibilitando a diminuição ou aumento da malha.
[view_direction, xi, yi, zi]: controla a direção da exibição da plotagem.
[Nticks, n]: controla o número de pontos usados para desenhar um gráfico 2D. Obs. O padrão para
nticks é 10.
[xlabel, “ ” ]: exibe o rótulo para o eixo horizontal em um gráfico bidimensional.
[ylabel, “ ” ]: exibe o rótulo do eixo vertical em gráficos bidimensionais.
[legend, “”, “”, ..., “” ]: Os rótulos para várias expressões em um gráfico bidimensional com muitas
expressões. Se houverem mais expressões que o número de rótulos fornecidos, eles irão ser repetidos. Por
padrão, os nomes das expressões ou funções irão ser usados, ou as palavras discrete1, discrete2, ..., para
conjuntos discretos de pontos.
[logx]: Essa opção faz com que o eixo horizontal de um gráfico bidimensional seja desenhado em
proporção logarítmica. Essa opção não precisa de quaisquer parâmetros adicionais.
[logy]: Essa opção faz com que o eixo vertical de um gráfico bidimensional seja desenhado em
proporção logarítmica. Essa opção não precisa de quaisquer parâmetros adicionais.
plot2d (exp(3*s), [s, -2, 2], [logy])$
[grid, x,y]: Escolhe o número de pontos da grade para usar nas direções x e y para montagem de
gráficos tridimensionais. A grade padrão é 30 por 30.
[colourz,false ou true]: controla a saída de cor das curvas ou superfícies a serem plotadas. Se
utilizado false a saída de cor será homogênea, se utilizado true haverá uma variação de coloração.
[style]: Os estilos que irão ser usados para várias funções ou conjuntos de dados em um gráfico
bidimensional. A palavra style deve ser seguida por um ou mais estilos. Se houverem mais funções e
conjuntos de pontos que estilos fornecidos, os estilos irão ser repetidos. Cada estilo pode ser um entre os
seguintes lines para segmentos de reta, points para pontos isolados, linespoints para segmentos e pontos, ou
dots para pequenos pontos isolados. Gnuplot aceita também o estilo impulses.
Cada um dos estilos pode também ser fechado dentro de uma lista com alguns parâmetros adicionais.
lines aceita um ou dois números: a largura da linha e um inteiro que identifica uma cor. points aceita um ou
dois parâmetros; o primeiro parâmetro é o raio dos pontos e o segundo parâmetro é um inteiro que para o
Gnuplot seleciona diferentes ajustes e cores para os pontos e em Openmath modifica a cor usada para os
pontos. linesdots aceita até quatro parâmetros; os primeiros dois possuem o mesmo significado que em lines e
os últimos dois possuem o mesmo significado que em points.
1. plot2d([cos(x)],[x,-%pi,%pi],[y,-1.5,1.5]);
2. plot2d([sin(x),cos(x),tan(x),x^2],[x,-2*%pi,2*%pi],[y,-2,2]);
PLOTANDO GRÁFICOS 3D
Dica: A função: contour_plot (expr, x_range, y_range, opções, ...). Monta gráficos de contorno
(curvas de nível) de expr sobre a região x_range por y_range. Quaisquer argumentos adicionais são tratados
da mesma forma que em plot3d.
Ex. F(x, y) := x^3 + y^2;
contour_plot (F, [u, -4, 4], [v, -4, 4]);
EXEMPLOS ADICIONAIS
Para mostrar alguns exemplos de gráficos discretos, iniciaremos por inserir as coordenadas de 12
pontos, por dois diferentes cominhos que podem ser usados:
Os pontos a seguir pertencem ao gráfico da função x ² + 2x.
x:[-10, -8, -6, -4, -2,-1,0,1,2,4,6,8]$
y:[80, 48, 24, 8, 0,-1,0,3,8,24,48,80]$
xy:[[-10,80],[-8,48],[-6,24],[-4,8],[-2,0],[-1,-1],[0,0],[1,3],[2,8],[4,24],[6,48],[8,80]]$
Para montar o gráfico daqueles pontos, unidos com segmentos de reta, usamos:
plot2d([discrete,x,y])$
Iremos agora mostrar o gráfico com somente pontos, e ilustrando o uso do segundo caminho de
fornecer as coordenadas dos pontos:
plot2d([discrete, xy], [style, points])$
Também podemos deixar que o computador faça uma avaliação de argumentos repassados e exiba
gráficos obedecendo a regras definidas.
O MAXIMA calcula Limites, Derivadas e Integrais através dos recursos apresentados a seguir. O
limite de uma função f quando a variável tende a um determinado valor v0 obtém-se da seguinte forma:
limit(expressão de f, variável, valor a que tende);
Exemplo:
Lim ( 3 x 3 + 2 x + 7 ) limit (3*x^3 + 2*x + 7,x,-1);
x → −1
Para o cálculo da derivada de uma expressão ou função qualquer se aplica o comando
diff(expressão, variável). O exemplo a seguir demonstra sua aplicação:
a) f ( x) = x 3 − 3 x 2 + 5 x − 2 diff(x^3 - 3*x^2 + 5*x -2,x);
O cálculo de uma integral definida em um intervalo é feito pelo comando integrate (expressão,
variável, limite inferior, limite superior); Exemplo:
2
∫ (−3x + 2 x 2 + 7)dx integrate (-3*x^3 + 2*x + 7,x,0,2);
3
0
1. Sejam
Calcule:
a) A + B b) AC c) BC d) CD e) DA f) DB g) 3A h) −D i) D(2A + 3B)
3. Dadas
a) b)
5. A solução do sistema é:
Calcular os valores: f(3), f(1), f(0) e f(-10) e exiba os gráficos em um mesmo plano obedecendo ao domínio
proposto e o estilo de pontos e linhas.
Esboce os gráficos das funções dadas e obedeça ao domínio proposto e exiba os gráficos com estilo de
pontos.
anderson.primus@gmail.com
drik-morais@hotmail.com