Cap�tulo 1
No��es b�sicas de Maple
Routo Terada
Combina��es de teclas b�sicas
ALT, F(ile), S(ave) para "salvar" o programa todo em disco
ALT, F(ile), P(rint) para imprimir o programa
ALT, E(dit), E(xecute), W(orksheet) para executar o programa todo desde o in�cio
CTRL+M para iniciar a inser��o de um comando de Maple, no local que o cursor est� (cor vermelha)
> CTRL+M cria este sinal > � esquerda
CTRL+T para iniciar a inser��o de um texto explicativo, no local que o cursor est� (cor preta)
ALT, I(nsert), S(ection) para abrir uma nova se��o com um bot�o de sinal - (menos)
ALT, I, S cria este bot�o � esquerda
CTRL+J para iniciar a inser��o de um novo grupo de comandos Maple, depois do local que o cursor est�
> CTRL+J cria um novo grupo como este
CTRL+K para iniciar a inser��o de um novo grupo de comandos Maple, antes do local que o cursor est�
ENTER para executar uma seq��ncia de comandos, depois de colocar o cursor no meio ou fim da seq��ncia
SHIFT+ENTER para criar uma linha nova no mesmo grupo de comandos
Express�es aritm�ticas
> 2*(3+1); qualquer express�o aritm�tica, como em C++, terminada com ; e ENTER
> 2*(3+1/3); resulta fra��o devido � divis�o /
> 2*(3+1/3.0); para obter resultado float, digitar com ponto
> 11 mod 3; mod denota m�dulo (resto de divis�o)
> 2*(3+(5-4)/3.0)*3;
> 11 mod 3: se terminar com dois pontos, o resultado N�O � listado
> 2^3; ^ denota exponencia��o
EXERC�CIOS:
1. Calcular a express�o 123+(25/3)
2. Calcular a mesma express�o em float
Atribui��o de valor a vari�vel com :=
> x:=1.1;
> x:=2.2;
> x; lista o valor de x atual
> x:='x'; faz com que x "perca o valor" e volte a ser apenas o nome x
> x;
> str:='marte'; atribui string � vari�vel
> j:='j':x:=2; x+j; quando vari�vel n�o possui valor, o seu nome � o valor
EXERC�CIO:
1. Atribuir o valor 12.34 � vari�vel x e depois calcular x elevado � pot�ncia 3
2. Atribuir o valor 45.678 � vari�vel y e depois calcular y multiplicado por x
�ltimo valor � denotado %
> x:=1.1;
> %+1;
> x:=2.2; y:=3.3;
> %%+2; %% para denotar pen�ltimo valor, 2.2
RESTART para reiniciar ("esquece" TODOS os valores)
> x:=1.1; x+1; y:=2.2;
> restart; x; y; x e y voltam a n�o possuir valor
Lista de express�es
> restart;lis:=[a,b,c,4];
> nops(lis); nops() d� o comprimento da lista
> lis2:=[101,op(lis)]; para inserir um elemento; no caso 101
> lis2:=[op(lis),202];
> li:=subsop(3=NULL,lis2); para remover um elemento; no caso o terceiro
> li[2]; para selecionar um elemento; no caso, o segundo
> li[3];
> li[3]:=prezado;
> li[3];
> lis:=[ [a,b], [2,a,c], 2,b ]; lista de listas
> lis[1]; primeira lista da lista
> lis[1][2]; segundo elemento da primeira lista
EXERC�CIOS:
1. Definir uma lista chamada Marte contendo os valores 1.1, 2.2, 3.3, 4.4
2. Calcular o valor do terceiro elemento da lista Marte multiplicado por 3, sem alterar o terceiro elemento.
RANGE para intervalo
> R:=-5..4; express�o que � intervalo
ARRAY (matriz)
> restart;A:=array(0..2,-1..3); array 3 por 5 sem qualquer elemento definido; note o ( e )
> A[2,1]:=2.2; A[1,2]:=t; note o [ e ]
> A(); para listar os valores da matriz
> A:=array(1..3,1..3,[ [a, b, c], [1,2,3], [1.1, x, t] ] );
lista de listas em array
> A();
> A[3,2];
> A:=array(1..2,1..3,0..2);
> A[1,1,0]:=3.333;
> A[1,1,0]+3;
EXERC�CIOS:
1. Definir uma matriz chamada M de 3 linhas e 2 colunas com todos os elementos iguais a zero usando array()
2. Colocar na linha 2 e coluna 2 de M o valor 1
Fun��o seq() para criar lista
> restart;seq(j^3,j=2..4);
> lis:=[2,3,9]; seq(j^3,j=lis); lista de valores
> R:=2..4; lis:=[seq(j^3,j=R)]; range de valores
EXERC�CIOS:
1. Definir uma lista chamada Saturno com elementos 10, 11, 12 13, usando seq()
2. Calcular o valor do terceiro elemento da lista Saturno multiplicado por 2, sem alterar a lista
Fun��es eval(), evalf(), evalb()
> restart;eval(1+3);
> evalf(1+3); resulta float
> eval(1+1/3);
> evalf(1+1/3);
> 1<>3;evalb(1<>3); resulta boolean
> evalb(1=3);
EXERC�CIOS:
1. Usando evalf(), calcular 1 dividido por 7
2. Atribuir valor 1.1 � vari�vel x e 2.2 � vari�vel y, e depois, usando evalb(), verificar se x � diferente de y
Fun��o subs() para substituir
> restart;
> expr:=p^2+q;
>
> subs(p=10,expr); subs(p=x,expr);
EXERC�CIOS:
1. Definir express�o E como sendo x ao cubo + y ao quadrado, e depois substituir x por 2 e y por 6 usando subs()
2. Definir express�o F como sendo n multiplicado por 5, e depois substituir n por 41.41 usando subs()
Cap�tulo 2
PROGRAMA��O MAPLE
Routo Terada
COMANDO DE ATRIBUI��O
> restart;
> x:=123.456;
COMANDO while e for-while
> j:=-1: while j<=4 do j:= j+2; j od;
FORMA GERAL do for-while:
for <nome> in <lista> while <expr> do <seq-comandos> od;
OUTRA FORMA GERAL do for:
for <contador> from <expr-inicial> by <expr-passo> to <expr-final>
while <expr-condicional> do <seq-comandos> od;
> for j in [3,12,-1] do j od;
> for j in [3,12,-1, 11] while j<>-1 do j od;
> for j from -1 by 2 to 5 do j od;
COMANDO IF
FORMA GERAL: do if:
if <expr> then <seq-comandos>
elif <expr> then <seq-comandos>
elif <expr> then <seq-comandos>
...
else <seq-comandos>
fi
> i:=20: if i<10 then i elif i>3 then i+10 else i+20 fi;
> if i>40 then 40
> elif i mod 2 = 1 then i:=7; se i for �mpar
> else i:=i*4+1;
> fi;
COMANDOS break e next
Comando break dentro de la�o provoca sa�da da execu��o do la�o.
Comando next dentro de la�o provoca "pulo" da execu��o do la�o para pr�xima itera��o.
Problema 1: criar uma seq��ncia de n�meros e achar o seu m�nimo
> u:=rand(-10..20)/2.0; define a fun��o u() p/ gerar n�mero em -10/2.0..20/2.0
> k:=[seq(u(),j=1..5)]; cria uma seq��ncia na lista k
> minimo:=20/2.0: m�nimo tempor�rio
> for j in k do
> if j>=minimo then next else minimo:=j fi note next nesta linha
> od;
> minimo; valor do m�nimo
Problema 2: criar uma seq��ncia de inteiros e verificar se cont�m o n�mero 15
> u:=rand(-10..20);k:=[seq(u(),j=1..10)];
> achou:=0: posicao:=1:
> for j in k do procurar um elemento na lista k
> if j = 5 then achou:=1; break;
> else posicao:=posicao+1;next;
> fi;
> od;
> achou;posicao;
COMANDO printf
> printf(`%d %c \n`,2001,'X'); %d de Decimal, %c de Caractere
2001 X
> printf(`%g %g %g\n`,123,123/456,123456789);
%g de Geral. Note que / � divis�o em real
123 .269737 1.234568e+08
> x := 23;y := -x^2/x+0.123456;
> printf(`x ao quadrado = %d, y = %f y = %6.2f \n`,x^2,y,y);
>
x ao quadrado = 529, y = -22.876544 y = -22.88
PROCEDIMENTOS ou FUN��ES e VARI�VEIS LOCAIS
Como definir procedures ou procedimentos
Procedimentos s�o muito �teis para estender a capacidade computacional do Maple.
A grosso modo, uma defini��o de procedure � uma express�o v�lida � qual podemos associar um nome.
O comando a seguir atribui o nome
ao procedimento definido pelo usu�rio. Ele soma os seus dois argumentos,
e
.
> f := proc( x, y )
x + y;
end;
Para calcular
com os argumentos 3 e 5.
> f( 3, 5 );
Podemos calcular
com argumentos simb�licos.
> f( gato, rato );
> ImparPar:=proc(n) declara��o da fun��o ImparPar
entrada: n; sa�da: 1 se n �mpar, ou 0 se n par
> if( n mod 2=0 ) then RETURN (0) note o = 0 para comparar com zero
> else RETURN(1)
> fi;
> end; fim de ImparPar
Agora uso a fun��o:
> for k from 1 to 5 do
> ImparPar(k)
> od;
Vari�vel local existe s� durante a execu��o do procedimento dentro do qual
foi declarada.
A seguir o procedimento que calcula os polin�mios de Chebyshev de grau 0 at�
>
Chebyshev := proc( n )
local p, k;
p[0] := 1;
p[1] := x;
if n<=1 then
RETURN(eval(p))
fi;
for k from 2 to n do
p[k] := expand( 2*x*p[k-1] - p[k-2] )
od;
RETURN(eval(p))
end;
Usando a fun��o podemos calcular os primeiros 5 polin�mios de Chebyshev.
> x:='x';; tab := Chebyshev(5);
> eval(tab);
> lis:=entries(tab); contr�i lista com os elementos da tabela
> lis[4];
.
Exemplos de n�meros primos e n�meros aleat�rios com rand()
Exemplo com n�mero primo.
> ithprime(10); # d�cimo primo
> p:=29;
> while p>2 do p:=prevprime(p) od;
N�meros aleat�rios com rand()
> u:=rand(1..2); # ou 1 ou 2 � sorteado
> s:=[seq(u(),j=1..6)];
> conta:=0:
> for j in s do if j=2 then conta:=conta+1 fi od;
> conta;
Gera��o de n�meros pseudo-aleat�rios e fun��es fundamentais como sqrt, 2^x, exp(),etc..
Para gerar um n�mero entre 1 e 52, executar gera() conforme defini��o a seguir
> gera:=rand(1..52); gera() � definida como fun��o
> lis:=gera(); para gerar um n�mero
> j:=1; while j<=3 do
> outro:=gera(); lis:=[outro,op(lis)];j:=j+1; para gerar v�rios n�meros e inclu�-los na lista lis
> od;
> gera:=rand(1..100); altera intervalo para 1 at� 100
> lis2:= []; inicializa��o de lista vazia
> j:=1; while j<=4 do
> outro:=gera()/10.0: lis2:=[outro,op(lis2)];j:=j+1;
> od:
> lis2;
> for x in lis2 do sqrt(x) od; raiz quadrada
> for x in lis2 do ln(x) od; log natural
> for x in lis2 do exp(x) od; exponencial de x na base e (const. de Euler), isto � e elevado a x
> for x in lis2 do 2^x od; 2 elevado a x
EXERC�CIOS:
1. Gerar 5 n�meros aleat�rios entre -10 e 10
2. Gerar 5 n�meros aleat�rios fracion�rios (float) entre -1.0 e 2.0
Cap�tulo 3
EXERC�CIOS MAPLE
Routo Terada
FORMA GERAL do for-while:
for <nome> in <lista> while <expr> do <seq-comandos> od ;
OUTRA FORMA GERAL do for
for <contador> from <expr-inicial> by <expr-passo> to <expr-final>
while <expr-condicional> do <seq-comandos> od;
FORMA GERAL: do if:
if <expr> then <seq-comandos>
elif <expr> then <seq-comandos>
elif <expr> then <seq-comandos>
...
else <seq-comandos>
fi
Produto de valores
Problema: Dada uma seq��ncia de valores, calcular o seu produto.
Entrada � uma lista de valores.
Saida � o numero de valores e o seu produto.
> produto:=1.0; no in�cio o produto � 1.0
> conta:=0; contador de valores
> valores:=[5.1, -2.2, 3.3, -4.4, 5.5, 6.6];
> for valor in valores do
> conta:=conta+1;produto:=produto*valor;
> od;
> produto; conta;
EXERC�CIOS:
1. Definir uma lista de 6 valores e calcular a sua soma.
2. Definir uma lista de 6 valores e calcular a soma dos elementos de �ndice �mpar apenas.
Empr�stimo
Problema: Calcular valor total a ser pago por um empr�stimo
Entrada: valor do empr�stimo, taxa de juro anual em porcento,
e o n�mero de anos do empr�stimo.
Saida: valor total a ser pago pelo empr�stimo
.
> emprest:=10000; TaxaAnual:=2.5; NumAnos:=10;
> TotalPagar:= emprest+emprest*TaxaAnual*NumAnos/100;
Para m�ltiplos empr�stimos:
> for emprest in [20000,33000,55400]
> do TotalPagar:= emprest+emprest*TaxaAnual*NumAnos/100;
> if TotalPagar>60000 then
> printf(`*** Houston: n�o vou conseguir pagar R$%f,00 ! ***`, TotalPagar);
> fi
> od;
*** Houston: n�o vou conseguir pagar R$69250.000000,00 ! ***
> emprest:=5000;
> while emprest<=30000 c�lculo para empr�stimos crescentes
> do emprest:= emprest+10000;
> TotalPagar:= emprest+emprest*TaxaAnual*NumAnos/100;
od;
EXERC�CIOS:
(1) Calcular atrav�s de um s� la�o do tipo while o TotalPagar de empr�stimo de 5 mil
para 3 valores de TaxaAnual: 1.5%, 2.5% e 3.3%.
(2) Calcular o TotalPagar de empr�stimo de 5 mil, e 7 mil, para 3 valores
de TaxaAnual: 1.5%, 2.5% e 3.3%.
Problema: dada uma lista de valores, criar lista invertida
> gera:=rand(1..100); inteiro de 1 at� 100
> lis:= [];N:=6; inicializa��o de lista vazia e N
> j:=1: while j<=N do
> outro:=gera(); lis:=[outro,op(lis)];j:=j+1;od:
> lis;
> lisinv:=[]; lista invertida vazia no in�cio
> for j from 1 to N do
> lisinv:=[op(lisinv),lis[N-j+1]]; coloca os elementos da direita p/ esquerda
> od;
EXERC�CIOS:
1. Gerar uma lista de 4 n�meros aleat�rios entre 20 e 40, e invert�-la
2. Gerar uma lista de 4 n�meros aleat�rios fracion�rios (float) entre -1.0 e 1.0, e invert�-la.
Procedimento que cria uma lista de comprimento vari�vel
> gera:=rand(0..9);
> CriaLista:= proc(Ncomprim)
> local j, lista; lista:=[];
> j:=1; while j<=Ncomprim do
> j:=j+1;
> lista:=[gera(),op(lista)]; cria mais um elemento na lista
> od:
> RETURN(lista);
> end; fim do proc CriaLista
>
> listex:= CriaLista(5);
> listex:= CriaLista(8);
Contagem de freq��ncia de valores
Problema: criar uma lista de valores de 0 a 9, e contar a freq��ncia de cada valor
> N:=10: lista:= CriaLista(N);
> for j from 0 to 9 do ContaFreq[j]:=0; od: inicializa contadores
> for j from 1 to N do ContaFreq[lista[j]]:= ContaFreq[lista[j]]+1; od;
> for j from 1 to 9 do printf(`%d ocorreu %d vezes \n`, j, ContaFreq[j]); od;
1 ocorreu 1 vezes
2 ocorreu 0 vezes
3 ocorreu 3 vezes
4 ocorreu 0 vezes
5 ocorreu 2 vezes
6 ocorreu 0 vezes
7 ocorreu 1 vezes
8 ocorreu 1 vezes
9 ocorreu 2 vezes
EXERC�CIO:
1. Calcular a freq��ncia dos inteiros na lista [8, 5, 5, 8, 7, 9, 7, 7, 9, 3, 2, 4]
Matriz sim�trica
Problema: Verificar se uma matriz � sim�trica
Entrada: uma matriz
Sa�da: mensagem "matriz dada � sim�trica" ou "matriz dada n�o � sim�trica"
> restart; Nlin:=4; Ncol:=4;
> A:=array(1..Nlin,1..Ncol,[ [0, 1, 2, 4], [1, 6, 8, 9], [2, 8, 0, 4], [3, 9, 4, 1] ]);
> AchouDifer:= 0; no in�cio, zero
> for ilin from 1 to Nlin do
> for icol from ilin+1 to 4 do
> if A[ilin,icol]<>A[icol,ilin] then note <>
> AchouDifer:=1; printf(`** Achou diferente na linha %d, coluna %d `,ilin,icol);
> break;
> fi;
> od; fim for icol
> if AchouDifer = 1 then break;
> fi;
> od; fim for ilin
** Achou diferente na linha 1, coluna 4
> AchouDifer;
EXERC�CIO:
1. Verificar se a matriz A seguinte � sim�trica.
> A:=array(1..4,1..4,[ [3, 1, 2, 4], [1, 8, 8, 9], [2, 8, 8, 4], [4, 9, 4, 3] ]);
Gera��o de vetor e matriz pseudo-aleat�rios: randvector e randmatrix
Gera��o de vetor
> restart;with(linalg): carrega o pacote linalg de Algebra Linear
> N:=5;
> vetor:=randvector(N, entries=rand(-20..30)); 5 elementos de -20 at� 30
Warning, the protected names norm and trace have been redefined and unprotected
> vetor[1]; vetor[3]+10; refer�ncia a elementos do vetor - �ndice entre [ e ]
Para obter elementos fracion�rios (float)
> j:=1: while j<=N do vetor[j]:=vetor[j]/3.0; j:=j+1; od;
Gera��o de matriz
> matriz:= randmatrix(4,5, entries=rand(-2..5)); 4 linhas e 5 colunas
> matriz[1,3];matriz[2,3]+10; refer�ncia a elementos da matriz
EXERC�CIO:
1. Gerar uma matriz aleat�ria com elementos entre -1.0 e 1.0, de 5 linhas e 5 colunas,
usando randmatrix.
Sistema linear e Digits:=
> M := matrix(3,3,[2.2,5.5,-8.8,1.1,5.12,6.0,4.,4.9, 1.123]);
> b:= vector([4.4,-4,3.77]);
Podemos resolver o sistema M x = b usando linsolve()
> Digits:=15;
este comando para aumentar a precis�o de 10 algarismos (default) para 15
> x:=linsolve(M,b);
> soma:=0: calcular soma de cada elemento da linha 1 de M por c/ elemento de x
> for icol from 1 to 3 do
> soma:= soma+ M[1,icol]*x[icol]
> od:
> soma-b[1]; soma deve ser igual a b[1]; note que � pr�ximo
> Digits:=50;
este comando para aumentar mais a precis�o
> x:=linsolve(M,b);
> soma:=0: calcular soma de cada elemento da linha 1 de M por c/ elemento de x
> for icol from 1 to 3 do
> soma:= soma+ M[1,icol]*x[icol]
> od:
> soma-b[1]; soma deve ser igual a b[1]
> Digits:=120;
> x:=linsolve(M,b);
> soma:=0: calcular soma de cada elemento da linha 1 de M por c/ elemento de x
> for icol from 1 to 3 do
> soma:= soma+ M[1,icol]*x[icol]
> od:
> soma-b[1]; soma deve ser igual a b[1]
> Digits:=10;
EXERC�CIOS :
1. Definir um sistema linear de 3 equa��es e 3 inc�gnitas tal que: o vetor b � [5.5, 6.6, 7.7]
e a matriz M � [ [1.1, 2.2, 3.3], [4.4, 5.5, 6.6], [7.7, 8.8, 9.9] ] e resolv�-la com linsolve(),
(a) com 20 algarismos significativos e
(b) com 30 algarismos significativos
2. Verificar as solu��es (1a) e (1b) dada por linsolve() usando comandos for, como foi feito acima