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

8

> 2*(3+1/3); resulta fra��o devido � divis�o /

20/3

> 2*(3+1/3.0); para obter resultado float, digitar com ponto

6.666666666

> 11 mod 3; mod denota m�dulo (resto de divis�o)

2

> 2*(3+(5-4)/3.0)*3;

20.00000000

> 11 mod 3: se terminar com dois pontos, o resultado N�O � listado

> 2^3; ^ denota exponencia��o

8

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 := 1.1

> x:=2.2;

x := 2.2

> x; lista o valor de x atual

2.2

> x:='x'; faz com que x "perca o valor" e volte a ser apenas o nome x

x := 'x'

> x;

x

> str:='marte'; atribui string � vari�vel

str := marte

> j:='j':x:=2; x+j; quando vari�vel n�o possui valor, o seu nome � o valor

x := 2

2+j

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;

x := 1.1

> %+1;

2.1

> x:=2.2; y:=3.3;

x := 2.2

y := 3.3

> %%+2; %% para denotar pen�ltimo valor, 2.2

4.2

RESTART para reiniciar ("esquece" TODOS os valores)

> x:=1.1; x+1; y:=2.2;

x := 1.1

2.1

y := 2.2

> restart; x; y; x e y voltam a n�o possuir valor

x

y

Lista de express�es

> restart;lis:=[a,b,c,4];

lis := [a, b, c, 4]

> nops(lis); nops() d� o comprimento da lista

4

> lis2:=[101,op(lis)]; para inserir um elemento; no caso 101

lis2 := [101, a, b, c, 4]

> lis2:=[op(lis),202];

lis2 := [a, b, c, 4, 202]

> li:=subsop(3=NULL,lis2); para remover um elemento; no caso o terceiro

li := [a, b, 4, 202]

> li[2]; para selecionar um elemento; no caso, o segundo

b

> li[3];

4

> li[3]:=prezado;

li[3] := prezado

> li[3];

prezado

> lis:=[ [a,b], [2,a,c], 2,b ]; lista de listas

lis := [[a, b], [2, a, c], 2, b]

> lis[1]; primeira lista da lista

[a, b]

> lis[1][2]; segundo elemento da primeira lista

b

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

R := -5 .. 4

ARRAY (matriz)

> restart;A:=array(0..2,-1..3); array 3 por 5 sem qualquer elemento definido; note o ( e )

A := array(0 .. 2,-1 .. 3,[])

> A[2,1]:=2.2; A[1,2]:=t; note o [ e ]

A[2,1] := 2.2

A[1,2] := t

> A(); para listar os valores da matriz

ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...
ARRAY([0 .. 2, -1 .. 3],[(0, -1) = `?`[0,-1], (0, 0...

> A:=array(1..3,1..3,[ [a, b, c], [1,2,3], [1.1, x, t] ] );

lista de listas em array

A := matrix([[a, b, c], [1, 2, 3], [1.1, x, t]])

> A();

matrix([[a(), b(), c()], [1, 2, 3], [1.1, x(), t()]...

> A[3,2];

x

> A:=array(1..2,1..3,0..2);

A := array(1 .. 2,1 .. 3,0 .. 2,[])

> A[1,1,0]:=3.333;

A[1,1,0] := 3.333

> A[1,1,0]+3;

6.333

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

8, 27, 64

> lis:=[2,3,9]; seq(j^3,j=lis); lista de valores

lis := [2, 3, 9]

8, 27, 729

> R:=2..4; lis:=[seq(j^3,j=R)]; range de valores

R := 2 .. 4

lis := [8, 27, 64]

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

4

> evalf(1+3); resulta float

4.

> eval(1+1/3);

4/3

> evalf(1+1/3);

1.333333333

> 1<>3;evalb(1<>3); resulta boolean

1 <> 3

true

> evalb(1=3);

false

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;

>

expr := p^2+q

> subs(p=10,expr); subs(p=x,expr);

100+q

x^2+q

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;

x := 123.456

COMANDO while e for-while

> j:=-1: while j<=4 do j:= j+2; j od;

j := 1

1

j := 3

3

j := 5

5

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;

3

12

-1

> for j in [3,12,-1, 11] while j<>-1 do j od;

3

12

> for j from -1 by 2 to 5 do j od;

-1

1

3

5

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;

30

> if i>40 then 40

> elif i mod 2 = 1 then i:=7; se i for �mpar

> else i:=i*4+1;

> fi;

i := 81

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

u := .5000000000*proc () local t; global _seed; _se...
u := .5000000000*proc () local t; global _seed; _se...
u := .5000000000*proc () local t; global _seed; _se...
u := .5000000000*proc () local t; global _seed; _se...
u := .5000000000*proc () local t; global _seed; _se...

k := [5.500000000, 0., -2.000000000, -1.500000000, ...

-2.000000000

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

u := proc () local t; global _seed; _seed := irem(4...
u := proc () local t; global _seed; _seed := irem(4...
u := proc () local t; global _seed; _seed := irem(4...
u := proc () local t; global _seed; _seed := irem(4...
u := proc () local t; global _seed; _seed := irem(4...

k := [-5, 7, 5, 0, 11, 15, 14, -7, 5, -2]

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

1

3

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 := 23

y := -22.876544

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 f ao procedimento definido pelo usu�rio. Ele soma os seus dois argumentos, x e y .

> f := proc( x, y )

x + y;

end;

f := proc (x, y) x+y end proc

Para calcular f com os argumentos 3 e 5.

> f( 3, 5 );

8

Podemos calcular f com argumentos simb�licos.

> f( gato, rato );

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;

ImparPar := proc (n) if `mod`(n,2) = 0 then RETURN(...

1

0

1

0

1

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� n

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

Chebyshev := proc (n) local p, k; p[0] := 1; p[1] :...
Chebyshev := proc (n) local p, k; p[0] := 1; p[1] :...
Chebyshev := proc (n) local p, k; p[0] := 1; p[1] :...
Chebyshev := proc (n) local p, k; p[0] := 1; p[1] :...
Chebyshev := proc (n) local p, k; p[0] := 1; p[1] :...
Chebyshev := proc (n) local p, k; p[0] := 1; p[1] :...
Chebyshev := proc (n) local p, k; p[0] := 1; p[1] :...
Chebyshev := proc (n) local p, k; p[0] := 1; p[1] :...

Usando a fun��o podemos calcular os primeiros 5 polin�mios de Chebyshev.

> x:='x';; tab := Chebyshev(5);

x := 'x'

tab := TABLE([0 = 1, 1 = x, 2 = 2*x^2-1, 3 = 4*x^3-...

> eval(tab);

TABLE([0 = 1, 1 = x, 2 = 2*x^2-1, 3 = 4*x^3-3*x, 4 ...

> lis:=entries(tab); contr�i lista com os elementos da tabela

lis := [1], [x], [2*x^2-1], [4*x^3-3*x], [8*x^4-8*x...

> lis[4];

[4*x^3-3*x]

.

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;

29

p := 29

p := 23

p := 19

p := 17

p := 13

p := 11

p := 7

p := 5

p := 3

p := 2

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;

u := proc () local t; global _seed; _seed := irem(4...
u := proc () local t; global _seed; _seed := irem(4...
u := proc () local t; global _seed; _seed := irem(4...
u := proc () local t; global _seed; _seed := irem(4...
u := proc () local t; global _seed; _seed := irem(4...

s := [2, 1, 2, 2, 2, 1]

4

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

gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...

> lis:=gera(); para gerar um n�mero

lis := 11

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

j := 1

outro := 35

lis := [35, 11]

j := 2

outro := 26

lis := [26, 35, 11]

j := 3

outro := 42

lis := [42, 26, 35, 11]

j := 4

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

gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...

lis2 := []

j := 1

[7.400000000, 6.700000000, 7.500000000, 8.200000000...

> for x in lis2 do sqrt(x) od; raiz quadrada

2.720294102

2.588435821

2.738612788

2.863564213

> for x in lis2 do ln(x) od; log natural

2.001480000

1.902107526

2.014903021

2.104134154

> for x in lis2 do exp(x) od; exponencial de x na base e (const. de Euler), isto � e elevado a x

1635.984430

812.4058252

1808.042414

3640.950307

> for x in lis2 do 2^x od; 2 elevado a x

168.8970126

103.9683067

181.0193360

294.0667789

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

produto := 1.0

> conta:=0; contador de valores

conta := 0

> valores:=[5.1, -2.2, 3.3, -4.4, 5.5, 6.6];

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;

conta := 1

produto := 5.10

conta := 2

produto := -11.220

conta := 3

produto := -37.0260

conta := 4

produto := 162.91440

conta := 5

produto := 896.029200

conta := 6

produto := 5913.792720

> produto; conta;

5913.792720

6

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;

emprest := 10000

TaxaAnual := 2.5

NumAnos := 10

> TotalPagar:= emprest+emprest*TaxaAnual*NumAnos/100;

TotalPagar := 12500.00000

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;

TotalPagar := 25000.00000

TotalPagar := 41250.00000

TotalPagar := 69250.00000

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

emprest := 5000

emprest := 15000

TotalPagar := 18750.00000

emprest := 25000

TotalPagar := 31250.00000

emprest := 35000

TotalPagar := 43750.00000

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

gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...

> lis:= [];N:=6; inicializa��o de lista vazia e N

lis := []

N := 6

> j:=1: while j<=N do

> outro:=gera(); lis:=[outro,op(lis)];j:=j+1;od:

> lis;

[39, 12, 1, 94, 92, 43]

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

lisinv := []

lisinv := [43]

lisinv := [43, 92]

lisinv := [43, 92, 94]

lisinv := [43, 92, 94, 1]

lisinv := [43, 92, 94, 1, 12]

lisinv := [43, 92, 94, 1, 12, 39]

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

gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...
gera := proc () local t; global _seed; _seed := ire...

> 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

>

CriaLista := proc (Ncomprim) local j, lista; lista ...
CriaLista := proc (Ncomprim) local j, lista; lista ...
CriaLista := proc (Ncomprim) local j, lista; lista ...
CriaLista := proc (Ncomprim) local j, lista; lista ...
CriaLista := proc (Ncomprim) local j, lista; lista ...
CriaLista := proc (Ncomprim) local j, lista; lista ...
CriaLista := proc (Ncomprim) local j, lista; lista ...

> listex:= CriaLista(5);

listex := [1, 5, 4, 0, 3]

> listex:= CriaLista(8);

listex := [7, 3, 2, 2, 0, 9, 4, 5]

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

lista := [7, 9, 3, 5, 3, 3, 8, 1, 5, 9]

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

ContaFreq[7] := 1

ContaFreq[9] := 1

ContaFreq[3] := 1

ContaFreq[5] := 1

ContaFreq[3] := 2

ContaFreq[3] := 3

ContaFreq[8] := 1

ContaFreq[1] := 1

ContaFreq[5] := 2

ContaFreq[9] := 2

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

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

A := matrix([[0, 1, 2, 4], [1, 6, 8, 9], [2, 8, 0, ...

AchouDifer := 0

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

1

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

A := matrix([[3, 1, 2, 4], [1, 8, 8, 9], [2, 8, 8, ...

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

N := 5

vetor := vector([-14, -3, 22, 24, -4])

> vetor[1]; vetor[3]+10; refer�ncia a elementos do vetor - �ndice entre [ e ]

-14

32

Para obter elementos fracion�rios (float)

> j:=1: while j<=N do vetor[j]:=vetor[j]/3.0; j:=j+1; od;

vetor[1] := -4.666666666

j := 2

vetor[2] := -.9999999999

j := 3

vetor[3] := 7.333333333

j := 4

vetor[4] := 7.999999999

j := 5

vetor[5] := -1.333333333

j := 6

Gera��o de matriz

> matriz:= randmatrix(4,5, entries=rand(-2..5)); 4 linhas e 5 colunas

matriz := matrix([[0, 3, -2, -1, -1], [5, 1, -1, -2...

> matriz[1,3];matriz[2,3]+10; refer�ncia a elementos da matriz

-2

9

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

M := matrix([[2.2, 5.5, -8.8], [1.1, 5.12, 6.0], [4...

> b:= vector([4.4,-4,3.77]);

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

Digits := 15

> x:=linsolve(M,b);

x := vector([1.88086178058867, -.664063205133095, -...

> 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

.2e-13

> Digits:=50;

este comando para aumentar mais a precis�o

Digits := 50

> x:=linsolve(M,b);

x := vector([1.880861780588670274598220003074079877...
x := vector([1.880861780588670274598220003074079877...
x := vector([1.880861780588670274598220003074079877...

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

-.1e-48

> Digits:=120;

Digits := 120

> x:=linsolve(M,b);

x := vector([1.880861780588670274598220003074079877...
x := vector([1.880861780588670274598220003074079877...
x := vector([1.880861780588670274598220003074079877...
x := vector([1.880861780588670274598220003074079877...
x := vector([1.880861780588670274598220003074079877...

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

-.2e-118

> Digits:=10;

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