Você está na página 1de 18

[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]

Fevereiro de 2008

UNIVERSIDADE FEDERAL DO PARÁ


CAMPUS DE SANTARÉM
FACULDADE DE MATEMÁTICA

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.

COORDENADOR DO PROJETO DE EXTENSÃO:

Professor: José Antonio Oliveira Aquino

APOSTILA: MAXIMA

AUTORES DA APOSTILA:

Aluna: Adriana dos Santos Morais


Aluno: Anderson Tavares Neres

Autores: Anderson Tavares Neres Adriana dos Santos Morais


Página 1
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

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();”

CONSIDERAÇÕES SOBRE A FIGURA ACIMA:


(%i “número”) (%o “número”) são etiquetas. A letra “i” indica uma entrada de dados e o número, os
passos já executados ou as linhas já utilizadas no programa que servirão como referência para uso posterior. A
letra “o” indica a saída. Para usar um resultado em cálculos posteriores, pode-se atribuir esse valor a uma
variável ou referir-se a esse mesmo valor através de seu rótulo gerado automaticamente. Temos que o
símbolo “%” refere-se ao mais recente resultado calculado. Caso não for desejado mostrar o resultado da
operação pode-se usar o $ (cifrão) ao final da sentença a ser processada.
DEFININDO VARIÁVEIS
Variáveis: Uma variável corresponde ao nome simbólico de um espaço de memória que armazena um valor.
O operador usado para definir variáveis é o ‘: ’ (dois pontos). A lógica é a seguinte:

Comando O que ele faz?


x:a; Atribui o valor ‘a’ à variável ‘x’
kill(x); Apaga o valor atribuído à variável ‘x’.
Veja o exemplo:
(%i1) x:3.75; (%o2) 3.75 (%i4) x;
(%o1) 3.75 (%i3) kill(x); (%o4) x
(%i2) x; (%o3) done

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.

Autores: Anderson Tavares Neres Adriana dos Santos Morais


Página 2
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

Como vemos ao lado, podemos definir várias


(%i1) a:2; b:3; c:1; d:5;e:4; f:0;
variáveis em uma mesma linha de comando.

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.

Autores: Anderson Tavares Neres Adriana dos Santos Morais


Página 3
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

FUNÇÕES BÁSICAS DO MAXIMA


Sintaxe no Maxima Função Sintaxe no Maxima Função
abs(x) |x| acsc(x) arccosec(x)
exp(x) ex acot(x) arccotg(x)
sign(x) x sinh(x) senh(x)
x
sqrt(x) x cosh(x) cosh(x)

sin(x) sen(x) tanh(x) tgh(x)

cos(x) cos(x) sech(x) sech(x)

tan(x) tg(x) csch(x) csch(x)

sec(x) sec(x) coth(x) cotgh(x)

csc(x) cosec(x) asinh(x) arcsenh(x)

cot(x) cotg(x) acosh(x) arcosh(x)

acos(x) arccos(x) atanh(x) arctanh(x)

asin(x) arcsen(x) asech(x) arcsech(x)

atan(x) arctan(x) acsc(x) arccosech(x)

asec(x) arcsec(x) acoth(x) arccotgh(x)

factorial (x) x! Ou calcule o fatorial de número “n” por n!

max(a,b,c) Calcula o máximo entre os valores dados.

min(a,b,c) Calcula o mínimo entre os valores dados.


binomial (x, y) O coeficiente binomial x!/(y! (x - y)!). Se x e y forem inteiros, então o valor
numérico do coeficiente binomial é calculado. Se y, ou x - y, for um inteiro, o
coeficiente binomial é expresso como um polinômio.
divsum (n, k) - divsum (n, k) retorna a adição dos divisores de n elevados à k'ésima
divsum (n) potência.
- divsum (n) retorna a adição dos divisores de n.
fib (n) Retorna o n'ésimo número de Fibonacci. fib(0) igual a 0 e fib(1) igual a 1, e
fib (-n) igual a (-1)^(n + 1) * fib(n).
Após chamar fib, prevfib é iguala fib (x - 1), o número de Fibonacci anterior
ao último calculado.
ifactors (n) Para um inteiro positivo n retorna a fatoração de n. Se n=p1^e1..pk^nk for a
decomposição de n em fatores primos, ifactors retorna [[p1, e1], ... , [pk, ek]].
inrt (x, n) Retorna a parte inteira da n'ésima raíz do valor absoluto de x.
lcm (expr_1, ..., Retorna o menor múltiplo comum entre seus argumentos. Os argumentos
expr_n) podem ser expressões gerais também inteiras.
next_prime (n) Retorna o menor primo maior que n.
load ("functs") chama essa função.
prev_prime (n) Retorna o maior primo menor que n.

Autores: Anderson Tavares Neres Adriana dos Santos Morais


Página 4
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

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

DEFININDO FUNÇÕES NO MÁXIMA

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:

IDENTIFICADORES: Os identificadores (nomes de variáveis, nomes de funções, ...) podem ser


formados por letras, dígitos decimais e o caractere "sublinhado" ( _ ). Um identificador deve começar com
uma letra e não podem conter espaços, letras acentuadas ou cedilhadas.

RESULTADOS EXATOS E APROXIMADOS


O MAXIMA possui por padrão um número de casas decimais igual a 16. Este número pode ser
modificado mudando o valor da variável fpprec. Um número real como e , π , 2 , ln(3) e outras podem
ser aproximados por números decimais (é o que se chama dentro do MAXIMA de ponto flutuante). O
comando para isto é bem simples: float (<número>); ou bfloat (<número>);
Vejamos alguns exemplos:

Autores: Anderson Tavares Neres Adriana dos Santos Morais


Página 5
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

RESOLVENDO SISTEMAS LINEARES E EQUAÇÕES


O método mais utilizado para resolver equações é o comando solve, ele é capaz de resolver equações
lineares, não lineares e sistemas com essas equações, veja a definição abaixo.
solve(expressão = expressão,variável)

Se o sistema for incompatível, o Maxima retorna: Inconsistent equations: ( )

ATRIBUINDO VALORES (NUMÉRICO OU NÃO) A VARIÁVEIS


O comando que faz esta atribuição é o subst(<a>,<b>,<c>);. Este comando faz o seguinte: substitui
<a> por <b> em <c>. Veja os exemplos:

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.

Autores: Anderson Tavares Neres Adriana dos Santos Morais


Página 6
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

COMO EXPANDIR, FATORAR E SIMPLIFICAR COM O MAXIMA.


Comando O que faz?
expand Expansão simples
factor Fatora (polinômios)
ratsimp Simplifica expressões polinomiais

radcan Simplifica expressões que contenham radicais

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:

Autores: Anderson Tavares Neres Adriana dos Santos Morais


Página 7
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

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.

FUNÇÕES DO MÁXIMA ASSOCIADAS À DIVISIBILIDADE


O máximo divisor comum e mínimo múltiplo comum estão implementados em Máxima pelas
seguintes funções:
* gcd(p1, p2, var1,...) - calcula o máximo divisor comum de p1 e p2;

Autores: Anderson Tavares Neres Adriana dos Santos Morais


Página 8
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

* 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:

TIPOS DE OBJETOS INTERNOS


Um objeto é representado como uma expressão. Os mais importantes tipos de objetos internos são
listas, matrizes, e conjuntos.
Listas:
Uma lista é indicada dessa forma: [a, b, c].
Se L é uma lista, L[i] é seu i ésimo elemento. L[1] é o primeiro elemento.

FUNÇÕES DEFINIDAS PARA LISTAS


A função map: constrói e avalia uma expressão usando itens individuais de uma lista de argumentos.
Os argumentos de uma expressão são sempre avaliados (mesmo se eles não puderem ser avaliados de outra
forma). O resultado é uma lista.

map(f , L) aplica f a cada elemento de L.


map ("+", [1, 2, 3], [a, b, c]);
map("=",[a,b],[-0.5,3]);

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.

Autores: Anderson Tavares Neres Página Adriana dos Santos Morais


10
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

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]);

FUNÇÕES PARA CONJUNTOS.


union(A, B) : é a união dos conjuntos A e B.

intersection(A, B) ou intersect(A,B) : é a intersecção dos conjuntos A e B.

cardinality(A) : é o número de elementos no conjunto A.

setdifference(A,B): é a diferença entre conjuntos A e B.

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);

O Maxima permite também determinar um subconjunto de um dado conjunto:


subset (a, f): Retorna o subconjunto de um conjunto a que satisfaz o predicado f.
Por exemplo, se pretender determinar o subconjunto dos números pares de um dado conjunto, faz-se:
subset({1,2,7,8,9,14},evenp);
Obs.: Em Maxima, existe a função evenp para avaliar se uma expressão é par, e a função oddp para
avaliar se uma expressão é ímpar.

Para vermos se um conjunto é subconjunto de outro conjunto, usamos a função subsetp


subsetp (a, b): Retorna true se e somente se o conjunto a for um subconjunto de b.
subsetp ({1, 2, 3}, {a, 1, b, 2, c, 3});
symmdifference (a_1, ..., a_n): Retorna a diferença simétrica, isto é, o conjunto dos elemetnos que
ocorrem em exatamente um conjunto a_k.
symmdifference ({1, 2, 3}, {a, 1, b, 2, c, 3});
permutations (a): Retorna um conjunto todas as permutações distintas dos elementos da lista ou do
conjunto a. Cada permutação é uma lista, não um conjunto. Quando a for uma lista, elementos duplicados de
a são incluídos nas permutações.
permutations ([a, a, b]);

powerset (a): Retorna o conjunto de todos os subconjuntos de a, ou um subconjunto de a.


powerset(a) tem 2^cardinality(a) elementos.
powerset (a, n): retorna o conjunto de todos os subconjuntos de a que possuem cardinalidade n.

Autores: Anderson Tavares Neres Página Adriana dos Santos Morais


11
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

powerset ({a, b, c});


powerset ({w, x, y, z}, 3);

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]);

TRABALHANDO COM MATRIZES:


O que faz? Comandos
Definindo matrizes A: matrix([1,2],[0,1]);
B: matrix([1,1],[1,1]);
Soma ou subtração de matrizes A+B; ou A-B;
Produto de matrizes, elemento por elemento; A * B;
Divisão de matrizes A/B;
Matriz para um expoente escalar A ^ 3; ou B ^ 3;
Base escalar para um expoente matriz, elemento exp(A); ou exp(B);
por elemento.
Base matriz para um expoente matriz. Essa não A ^ B; ou B ^A;
é realizada elemento por elemento.
Multiplicação não comutativa de matrizes. A.B; ou B.A;
Exponenciação não comutativa de matrizes A ^^ 3; ou B ^^ 3;
Inversa invert(A); ou A^^-1;
Determinante determinant(A);
Posto da matriz A rank(A);
Transposta da matriz A transpose(A);
Polinômio característico charpoly(A,x);
Auto-valores da matriz A eigenvalues (A);
Auto-vetores da matriz A eigenvectors (A);
Forma triangular da matriz A triangularize (A);
Forma escalonada da matriz A echelon (A);
Forma adjunta da matriz A adjoint (A);
Retorna o número de linhas de A. length(A);
Retorna o número de colunas de A. length(transpose(A));
Retorna a i'ésima coluna da matriz A col (A, i);
Cópia da matriz A. copymatrix (A);
Retorna uma matriz diagonal de tamanho n por diagmatrix (n, x);
n com os elementos da diagonal todos iguais a x.
Retorna uma matriz identidade (o mesmo que diagmatrix (n, 1);
ident (n)).
Retorna uma matriz m por n, todos os elementos ematrix (m, n, x, i, j);
da qual são zero exceto para o elemento [i, j]
que é x.
Retorna uma matriz com elemento i,j igual a matrixmap (f, A);
f(A[i,j])
Retorna true se expr é uma matriz, de outra matrixp (expr);
forma retorna false.
Retorna o i, j menor do elemento localizado na minor (A, i, j);
linha i coluna j da matriz A.

Autores: Anderson Tavares Neres Página Adriana dos Santos Morais


12
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

OPERADORES ESPECIAIS E OUTRAS FUNÇÕES.

print (expr_1, ..., expr_n)


Avalia e mostra expr_1, ..., expr_n uma após a outra, da esquerda para a direita, iniciando no lado
esquerdo do console. O valor retornado por print é o valor de seu último argumento. print não gera rótulos de
expressão intermediária.
Obs.: timedate () Retorna uma seqüência de caracteres representando a data e hora atuais. A
seqüência de caracteres tem o formato HH:MM:SS Dia, mm/dd/aaaa (GMT-n), Onde os campos são horas,
minutos, segundos, dia da semana, mês, dia do mês, ano, e horas que diferem da hora GMT.
d: timedate ()$
print ("timedate mostra o tempo atual", d)$

Operadores Relacionais,operadores diversos e funções de avaliação


Operador: <
Operador: <=
Operador: >=
Operador: >

Operador: # Representa a negação da igualdade sintática =.

Operador and: O operador lógico de conjunção.

Operador or: O operador lógico de disjunção.

Operador not: O operador lógico de negação.

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

Representa avaliação condicional. A estrutura de if.em sua forma mais simples é:


IF condição THEN expressao1 ELSE expressao2;
Se condição resulta true, então a expressao1 é executada; se ela resulta false, então a expressao2 é
executada. O valor da condição é determinado automaticamente.
H(x):= if x <= 0 then x^2 else x - 5 $

A estrutura do if em sua forma geral é a seguinte.


if cond_1 then expr_1 elseif cond_2 then expr_2 elseif ... else expr_0 avalia para expr_k se
cond_k for true e todas as condições precedentes forem false. Se nenhuma das condições forem true,
a expressão avalia para expr_0.

Autores: Anderson Tavares Neres Página Adriana dos Santos Morais


13
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

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

Autores: Anderson Tavares Neres Página Adriana dos Santos Morais


14
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

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.

Agora vamos construir gráficos em 2D e configurá-los utilizando as opções acima:

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]);

3. plot2d ([x^2], [x, -2, 2],[y,-0.2,2],[style,[points,3,5]],[legend,"x²"],[xlabel,"Eixo das


abscissas"],[ylabel,"Eixo das ordenadas"])$

4. plot2d ([x^2], [x, -2, 2],[y,-0.2,2],[style,[linespoints,1,6,1,5]],[legend,"x²"],[xlabel,"Eixo das


abscissas"],[ylabel,"Eixo das ordenadas"])$

PLOTANDO GRÁFICOS 3D

A sintaxe para a construção de um gráfico 3D é a seguinte:


Plot3d([expr1, expr2,...,exprn], [x1, mín, máx],[x2,mín, máx],..,[xn,mín,máx],[opções]]

Montaremos o gráfico de z = 2^(-u^2+v^2) com u e v variando no intervalo fechado [-3,3] e no


intervalo fechado de [-2,2] respectivamente, e com u sobre o eixo x, e v sobre o eixo y.
Ex.: plot3d (2^(-u^2 + v^2), [u, -3, 3], [v, -7, 7]);
Nesse caso o mouse pode ser usado para rotacionar a visualização para olhar na superfície de
diferentes ângulos.
Outro exemplo de modelo de argumento é
plot3d ([cos(x)*(3 + y*cos(x/2)), sin(x)*(3 + y*cos(x/2)),
y*sin(x/2)], [x, -%pi, %pi], [y, -1, 1], ['grid, 50, 15]);
Outro exemplo de gráfico em 3 d.
f(x, y) := x^2 + y^2;
plot3d (f, [x, -4, 4], [y, -4, 4], [grid, 40, 40])$

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]]$

Autores: Anderson Tavares Neres Página Adriana dos Santos Morais


15
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

Obs.: Podemos criar listas da seguinte maneira:


create_list ([i - .2, i^2], i, 1, 5);
create_list ([i, i^2], i, -5, 5);
create_list ([i + .2, .7*i^2], i, 1, 5);

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.

H(x):= if x < 0 then x^4 - 1 else 1 - x^5 $


plot2d ([H], [x, -2, 2],[y,-2,2],[xlabel,"Eixo das abscissas"],[ylabel,"Eixo das ordenadas"])$

LEITURA COMPLEMENTAR “LIMITES, DERIVADAS E INTEGRAIS”.

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

EXERCÍCIOS SOBRE MATRIZES E SISTEMAS LINEARES

1. Sejam

Calcule:
a) A + B b) AC c) BC d) CD e) DA f) DB g) 3A h) −D i) D(2A + 3B)

2. Qual é o valor de c23 na multiplicação das matrizes abaixo?

Autores: Anderson Tavares Neres Página Adriana dos Santos Morais


16
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

3. Dadas

Mostre que AB = AC.

4. Reduza as matrizes à forma escalonada reduzida.

a) b)

5. A solução do sistema é:

6. (UFRN) A soma dos quadrados das soluções do sistema é:

7. (ITA - SP) Se então temos:

8. (CESGRANRIO) Resolvendo o sistema vemos que x + 2y + 3z vale:

EXERCÍCIOS DE FIXAÇÃO SOBRE PLOTAGEM DE GRÁFICOS NO MAXIMA

1- Dada a função f: R R definida por:

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.

Autores: Anderson Tavares Neres Página Adriana dos Santos Morais


17
[MAXIMA – PROJETO: INFORMÁTICA SOLIDÁRIA]
Fevereiro de 2008

2- Para a função real f = f(x) definida por:

Esboce os gráficos das funções dadas e obedeça ao domínio proposto e exiba os gráficos com estilo de
pontos.

3. Sejam as funções reais f e g definidas por:

sen( x) se x ≥ 0 tang (x) se x > 2


f ( x)=  E g (x)= 
cos(x) se x < 0 cotag (x) se x ≤ 2

Esboce o gráfico obedecendo às condições apresentadas e com estilo de linhas.

Dicas, dúvidas e sugestões serão bem vindas.

Entre em contato com os organizadores da apostila através dos emails a seguir:

anderson.primus@gmail.com

drik-morais@hotmail.com

Autores: Anderson Tavares Neres Página Adriana dos Santos Morais


18

Você também pode gostar