Máxima

Baixe essa introdução como um arquivo do Maxima



1 Breve histórico

O Maxima é derivado do sistema Macsyma, desenvolvido no MIT nos anos de 1968 a 1982
 como parte do Projecto MAC.
O MIT transferiu uma cópia do código fonte do Macsyma para o Departamento de Energia em 1982;
 essa versão é agora conhecida como Macsyma DOE.
Uma cópia do Macsyma DOE foi mantida pelo Professor William F. Schelter da Universidade do Texas, d
esde 1982 até a sua morte em 2001. Em 1998, Schelter obteve autorização do
Departamento de Energia para liberar o código fonte do Macsyma DOE sob a Licença Pública GNU,
 e em 2000 iniciou o projeto Maxima no SourceForge para manter e desenvolver o Macsyma DOE, agora chamado Maxima.

2 Introdução ao Máxima

2.1 Operações Aritméticas

Com o Máxima é possível fazer operações aritméticas de modo análogo à uma calculadora:

(%i1) 7.53+5.22;

Result

Observe que os comandos do Maxima terminam com ;


e os comentários começam com /* e terminam com */


Vários comandos podem ser inseridos na mesma linha, desde que separados por ponto e virgula:


(%i2) 12.4+5; 16+45;

Result

PRODUTO E DIVISÂO

No máxima e * e / representam o produto e a divisão:

(%i4) 72*65;

Result

(%i5) 76/33.7;

Result

POTÊNCIA

No máxima ^ representa a potência, assim por exemplo 2^10 pode ser calculado:

(%i6) 2^10;

Result

Por exemplo, para calcularmos: (33.1+22.4)^(1/2)

(%i7) (33.1+22.4)^(1/2);

Result

Por exemplo, para entrarmos a expressão: (1+(b+1)^3)(1+b)^2

(%i8) (1+(b+1)^3)*(1+b)^2;

Result

2.2 Valores Exatos e Aproximados

O exemplo abaixo mostra que para divisão de inteiros o Máxima apenas simplifica a fração

(%i9) 92/22;

Result

Se no exemplo anterior, desejarmos uma aproximação numérica para $\frac{46}{11}$ podemos obtê-la
usamos o comando para ponto flutuante float() como abaixo:

(%i10) float(92/22);

Result

O Maxima interpreta a entrada 22.1 como um número real e realiza as contas envolvendo números reais em ponto flutuante:

(%i11) 96/22.1;

Result

Outro modo de obter a representação decimal de um número real é adicionando uma virgula e o comando numer depois do número real:

(%i12) 17/22,numer;

Result

Se desejarmos que os resultados e os cálculos efetuados sejam expressos com um determinado número de casas decimais e/ou
algarismos significativos podemos estabelecer essa precisão mediante a fixação de um
valor à variável interna global fpprec (float point precision, precisão de ponto flutuante),
que por padrão no Máxima é 16)



Para calcularmos as primeiras 30 casas decimais de $pi$, primeiro definimos a precisão de ponto flutuante para 30:

(%i13) fpprec:30;

Result

E agora usamos o comando \%pi para acessar a constante pi e bfloat para converter pi em um números flutuante
 de grande precisão (bigfloat).

(%i14) bfloat(%pi);

Result

2.3 Constantes Matemáticas

O número \pi deve ser escrito desta forma %pi.

(%i15) %pi;

Result

De modo análogo temos que o número de Euler e deve ser escrito como %e
e a constante imaginária i = sqrt(-1) deve ser escrita como %i

(%i16) %e,numer;

Result

Como exemplo calcularemos e^(pi*i):

(%i17) %e^(%pi*%i);

Result

Números Complexos podem ser escritos utilizando a constante \%i
Assim por exemplo podemos calcular o produto entre 2+3i e 4+2i

(%i18) (3+3*%i)*(4+5*%i);

Result

Para que o Maxima expanda o produto anterior podemos usar o comando expand:

(%i19) expand((3+3*%i)*(4+5*%i));

Result

2.4 Algumas Funções Matemáticas

* sqrt(x) denota a raiz quadrada de x


* abs(x) denota módulo de de x
* n! denota fatorial de n
* exp(x) denota a função exponencial de x, i.e, e^x
* log(x) denota o logaritmo natural de x
* sin(x) denota a função seno de x (em radianos)
* cos(x) denota a função cosseno de x
  (em radianos)
* tan(x) denota a função tangente de x
* asin(x) denota a função arco-seno de x
* acos
    denota a função arco-cosseno de x

Para calcularmos 12!

(%i20) 12!;

Result

Para calcularmos cos(pi/4);

(%i21) cos(%pi/4);

Result

O Maxima não possui uma função pré-definida para logaritmo de base 10 ou de outras bases.
Podemos definir o logaritmo na base 10 através do comando

(%i22) log10(x) := log(x) / log(10);

Result

Agora podemos calcular log_10(100)

(%i23) log10(100),numer;

Result

2.5 Usando os Resultados Anteriores

Para convertemos a saída anterior para um valor numérico podemos utilizar o comando
float(\%). Nesse caso o símbolo % nos permite acessar a última saída apresentada:

(%i24) cos(%pi/4);

Result

(%i25) float(%);

Result

2.6 Definindo Variáveis

Uma ferramenta importante no Maxima é a capacidade de atribuir e manipular


variáveis. Uma variável, em programação, é um identificador ao qual se pode atribuir valores.
No Maxima a instrução de atribuição concretiza-se empregando o símbolo :


(%i26) x:3;

Result

Para visualizar o valor da variável x, utilizamos o comando print.

(%i27) print(x);

Result

Vamos definir y=5 e calcular x+y e x^y+y^x

(%i28) y:5;

Result

(%i29) x+y;

Result

(%i30) x^y+y^x;

Result

Se desejarmos remover um valor atribuído a uma variável podemos fazer isso através do comando kill:


Esse comando sempre retorna done (i.e. feito);


Para limpar a variável x definida acima:

(%i31) kill(x);

Result

Agora, se retornarmos o valor da variável x, utilizamos o comando print, teremos

(%i32) print(x);

Result

Uma variável pode armazenar expressões.
Assim por exemplo podemos armazenar a expressão pi*a^2*h na variável V através do comando

(%i33) V:%pi*a^2*h;

Result

Usando o caractere $ podemos evitar que o máxima exiba uma sáida:

(%i34) z:y+7$

Se quisermos visualizar o valor da variavél z, :

(%i35) print(z);

Result

Uma variável pode também armazenar uma igualdade ou uma desigualdade.
 Se queremos armazenar a desigualdade 3a+5b<3 para usos futuros:

(%i36) desigualdade:3*a+5*b<3;

Result

2.7 Somátorios e Produtórios

Para calcular a soma de 1 até 30 de n^2

(%i37) sum(n^2,n,1,30);

Result

Para calcular a soma de 1 até 10 de 1/(2^n)

(%i38) sum(1/2^n,n, 1, 10);

Result

(%i39) float(%);

Result

O máxima também aceita somas infinitas:

(%i40) sum(1/x^2, x, 1, inf);

Result

Para que o máxima simplifique o somatório, temos que adicionar a opção simpsum=true:

(%i41) sum(1/x^2, x, 1, inf),simpsum=true;

Result

O máxima é manipula somatórios, mas em geral não os contraí:

(%i42) soma1: sum(1/x^2, x, 4, inf)$
soma2: sum(1/x^3, x, 2, inf) $
soma1+soma2;

Result

Para que o maxima agrupe os somatórios usamos o comando sumcontract:

(%i45) sumcontract(%);

Result

E para calcular o valor do somatório anterior:

(%i46) float(%,simpsum=true);

Result

O próxima exemplo nos retorna as fórmulas fechadas para a soma dos n primeiros números,
 dos quadrados dos n primeiros números, dos cubos, e da quarta potência. O comando simpsum=true

(%i47) [sum(i,i,1,n), sum(i^2,i,1,n), sum(i^3,i,1,n),sum(i^4,i,1,n)], simpsum=true;

Result

2.8 Listas

Definindo uma lista com os elementos $1,3,5,7,9$ nessa ordem:

(%i48) [1,3,5,7,9];

Result

Elevando todos os elementos da lista anterior ao quadrado:

(%i49) [1,3,5,7,9]^2;

Result

Somando os elementos de duas listas de mesmo tamanho:

(%i50) [2,4,6,8]+[3,5,14,22];

Result

Atribuindo uma lista a uma variável:

(%i51) lista:[2,4,6,8]$

(Note que ocultamos a saída anterior, utilizando o carácter $





Somando 3 a cada elemento da lista:

(%i52) lista+3;

Result

Calculando (a^+1)/(a^2) para cada elemento da lista

(%i53) (lista+1)/lista^2;

Result

Calcular sen(x) para os elementos da lista

(%i54) sin(lista);

Result

Convertendo os valores da saída anterior para ponto flutuante:

(%i55) %,numer;

Result

Para criar uma lista onde os elementos são definidos por uma expressão, podemos usar o comando


makelist.





Para criar a lista onde os elementos são da forma 1/n com $n$ de 1 até 8:

(%i56) makelist(1/n,n,1,8);

Result

Para criar uma lista com os 10 primeiros impares:

(%i57) makelist(2*n+1,n,0,10);

Result

Para criar a lista onde os elementos são da forma n/(n+1) com n de 1 até 5:

(%i58) makelist(n/(n+1),n,1,5);

Result

2.9 Manipulando Elementos de uma Lista

Vamos começar limpando todas as variáveis e definições, usando o comando kill(all)

(%i59) kill(all);

Result

Vamos criar uma lista:

(%i1) lista:makelist(n^2,n,1,7);

Result

Os elementos de uma lista são indexados a partir de um. Para retornar o enésimo elemento de uma lista usamos


o comando lista[n].

(%i2) lista[1];

Result

(%i3) lista[4];

Result

(%i4) lista[7];

Result

O comando rest(n) cria uma nova lista com os n primeiros elementos de uma lista removidos:

(%i5) listamenor: rest (lista, 3);

Result

Note que a lista inicial permanece inalterada:

(%i6) lista;

Result

O comando append(lista1, lista2) cria uma nova lista incluindo todos os elementos de


lista1 e lista2 seguidos, incluindo os elementos da lista mais longa.

(%i7) lista1:[a,b,c,d]; lista2:[1,2,3,4,5,6];

Result

(%i9) append(lista1,lista2);

Result

os comandos cons e endcons permitem adicionar novos elementos a uma lista, no


início e final de mesma, respectivamente;

(%i10) cons(X,lista1);

Result

(%i11) endcons(X,lista1);

Result

O comando delete apaga todas as ocorrências da entrada a em uma lista

(%i12) delete(a, [a,b,c,a,a,b]);

Result

É possível realizar operações elementares, tais como a soma, subtração, multiplicação,


com os elementos de uma lista:





Vamos calcular a soma dos 20 primeiros pares

(%i13) pares:makelist(2*n,n,1,20);

Result

Para somar os elementos da lista usamos o comando apply

(%i14) apply("+", pares);

Result

Para calcular o produto dos vinte primeiros pares:

(%i15) apply("*", pares);

Result

Para aplicar uma função a cada elemento de uma lista utilizamos o comando map:

Para calcular a raiz quadrada dos elementos da lista [1,6,9,13]:

(%i16) map(sqrt,[1,6,9,13]);

Result

Assim por exemplo se f(x)=x+sin(x) e queremos calcular os valores de f(x) para os elementos da lista [1,2,5,7]:








Começamos definindo a função f(x) (falaremos mais sobre como definir funções)

(%i17) f(x):=x+sin(x);

Result

Agora aplicamos f(x) a lista

(%i18) map(f,[1,2,5,7]);

Result

2.10 Matrizes

No Maxima define uma matriz do seguinte modo A: matrix (lista1,lista2,..,listan);

(%i19) A:matrix([1,2,3],[3,-1,0],[4,2,1]);

Result

Vamos definir outra matriz:

(%i20) B: matrix ([1, -1, 2], [2, 1, 5], [0, 1, 3]);

Result

Podemos calcular a soma $A+B$ e o produto $AB$

(%i21) A+B; A.B;

Result

Cuidado o comando A*B calcula o produto coordenada a coordenada e não o produto de matrizes:

(%i23) A*B;

Result

(%i24) C:matrix([2,1],[2,0]);

Result

(%i25) C.C;

Result

(%i26) C*C;

Result

A Matriz identidade n por n pode ser facilmente definida usando o comando ident(n)

(%i27) ident(3);

Result

Se uma matriz for invertível, sua inversa pode ser calculada através do comando invert

(%i28) Z:invert(A);

Result

(%i29) Z.A;

Result

A transposta de uma matriz pode ser calculada através do comando transpose:

(%i30) transpose(C);

Result

O determinante de uma matriz pode ser calculado atraves do comando det

(%i31) determinant(A);

Result

A entrada (2,3) da matriz A pode ser obtido através do comando:

(%i32) A[2,3];

Result

A terceira linha da matriz pode ser obtida através do comando:


(%i33) row(A, 3);

Result

A primeira coluna de uma matriz pode ser obtida através do comando:

(%i34) col(A,3);

Result

Uma matriz pode ser escalonada através do comando triangularize

(%i35) M:matrix([1,2,3,4],[5,6,7,z],[b,1,2,3]);

Result

(%i36) triangularize(M);

Result

Uma matriz pode ser escalonada com $1$ nos pivôs através do comando echelon

(%i37) echelon(M);

Result

2.11 Usando o Help

O manual on-line de utilizador do Maxima pode ser visto em diferentes formas. A partir da linha de comando interativa do Maxima, o manual de utilizador é visto em texto plano através do comando \comando(?) .

 O comando "? palavra" encontra um item com título igual a palavra, se existir tal item.

(%i38) ? limit;

Result

O comando "?? palavra" encontra todos os itens documentados que contiverem a palavra em seus títulos.
 Se existe mais de um de tal item, Maxima solicita ao utilizador selecionar um item ou mais itens para mostrar.

(%i39) ?? integ;

Result

O comando example(tópico) mostra alguns exemplos do tópico em questão:

(%i40) example(limit);

Result


Created with wxMaxima.
Inicial

Interface Gráfica


Maxima :





Daniel Miranda :

Jerônimo C. Pellegrini :