Escolar Documentos
Profissional Documentos
Cultura Documentos
CCET UFRN
Apostila
Introduo
O uso do computador como ferramenta no ensino, hoje bastante utilizado em quase todas
as reas. A informtica uma das alternativas mais poderosas no ensino moderno,
principalmente aqueles que envolvem modelos matemticos. Foram desenvolvidos vrios
softwares nessa direo. Um deles o Maple que tem uma capacidade extraordinria de
lidar com os mais diversos contedos matemticos. Neste mini-curso, apresenta-se um
pouco do software maple e sua utilizao em alguns importantes contedos de matemtica
bsica. Os principais objetivos so:
1 - Utilizar um ambiente computacional para ensinar o aluno a realizar atividades de
matemtica manipulando o software maple;
2 Ajudar o aluno na compreenso e assimilao de importantes contedos de matemtica
usando o computador como ferramenta;
3 - Atravs da utilizao do maple, mostrar ao aluno um caminho que certamente facilitar
sua vida acadmica de um modo geral;
Os contedos matemticos abordados sero divididos em quatro partes. Na parte 1
Iniciamos com os primeiros passos da utilizao do software maple, apresentando tambm
algumas informaes a respeito desse pacote matemtico. Na parte 2 vamos apresentar
algumas formas de se trabalhar com funes bem como a visualizao grfica de alguns
tipos de funes, incluindo animao. Na parte 3 usaremos um pacote especial do maple o
LINALG, que especfico para se trabalhar com lgebra linear. Estudaremos vetores,
matrizes, determinantes e sistemas de equaes lineares. Finalmente, na parte 4, faremos
uma breve introduo de programao com o maple.
2
Estes aspectos, de uma certa forma esto integrados. Veja por exemplo que, a partir de um
resultado algbrico, uma anlise numrica ou grfica pode imediatamente ser feita. Em
geral, na anlise de um problema, vrias ferramentas so necessrias.
Os aspectos novos trazidos por esse software juntamente com outros sistemas algbricos
so a computao algbrica e a programao simblica. A computao algbrica uma rea
que teve um forte desenvolvimento nas dcadas de 60 e 70, quando foram encontrados
importantes algoritmos para integrao analtica e fatorao de polinmios.
MAPLE
sistema matemtico simblico interativo, possuindo recursos extraordinrios
para resolver questes como clculo algbrico, interpretao de conceitos,
visualizao grfica, modelagem de problemas, etc.
Para escrever textos v na barra de ferramenta acima e clique com o cursor em " T ". Para
escrever expresses matemticas clique em . Para execuo de comandos matemticos
clicar em [> .
Observe que o resultado um nmero racional. Para obter uma aproximao decimal,
devemos usar o comando
evalf (evaluate in floating point):
> evalf(123/71);
3
Observe que o resultado tem 10 dgitos (valor default), porm possvel aproximar o
resultado com quantos dgitos quisermos, por exemplo, com 40 dgitos:
> Digits;
> Digits := 40;
Obs. Maple reconhece vrios tipos numricos, dos quais destacamos os tipos integer,
fraction, float e complex. Ao digitarmos no prompt do Maple uma expresso aritmtica,
por default, o valor numrico da expresso calculado no tipo numrico mais abrangente
usado na expresso. Exemplos:
> 23 + 67; 23 + 57.2; 1/2 + 5;
>30/9;
O Maple , por default, simplifica fraes de inteiros
Listamos a seguir os smbolos das operaes aritmticas; um smbolo esquerda de outro
tem precedncia na avaliao de expresses. O uso de parnteses necessrio para
modificar a ordem de precedncia.
! ^ ou ** / * +
fatorial potenciao diviso multiplicao adio subtrao
> sqrt(28);
Vemos como o Maple conserva o tipo numrico dos dados de entrada. Por outro lado,
possvel provocar um retorno em um tipo numrico desejado. Uma forma usar a funo
convert.
> convert(sqrt(28), float);
Nmeros irracionais:
> ((2+sqrt(3))/2)^2;
Pedimos para o Maple calcular sin(2 n) e dividir por fatorial de 5. Podemos pensar que o
resultado zero, j que o seno de um mltiplo de zero. Porm,
n uma letra sobre a qual nada foi dito sobre ela.
Para o Maple n uma varivel como qualquer valor real. Isso
pode ser mudado com o seguinte comando:
> assume(n,integer);
> sin(2*Pi*n)/5!;
> cos(Pi*n);
4
De agora em diante, o Maple tratar n como uma varivel inteira. Ela passa a ser mostrada
na tela com um til, da forma n~, para o usurio saber que essa varivel tem uma
determinada propriedade atribuda pelo comando assume.
Antes de continuar, vamos reiniciar o trabalho com o comando
> restart
Assim, o maple reinicia como se nada tivesse sido feito antes e a varivel n agora volta a
ser uma letra que posse assumir qualquer valor.
Podemos ver que o Maple nada fez, ou melhor, no houve nenhuma simplificao do
resultado. Dessa forma, vamos pedir explicitamente:
> simplify(z);
A varivel I representa 1 .
Outro exemploexemplo:
> (3+4*I)/(1+I);
2 2
Ex.2 9 x + 1 4 x5 +
x 3 3
> 9*sqrt(x+1) 4*x^5 2/(x^3) 2/3;
> -3<=x<=5;
Para grafar intervalos deste tipo necessrio que utilizemos os conectivos lgicos and e or.
Por exemplo,
> 3<=x and x<=5;
> x<=-3 or x>=5;
Expand: O comando "expand " serve para expandir expresses incluindo tambm
expresses na forma trigonomtrica, logartmica etc.
Exemplos:
> (x-1)^5;
> expand((x-1)^5);
> cos(alpha+beta) = expand(cos(alpha+beta));
> ln(3*x^2*y^2) = expand(ln(3*x^2*y^2));
Ex.
> factor((x-1)^5);
Combine
6
o comando combine requer maior ateno que os comandos anteriores, pois para us-lo
com eficincia necessrio conhecer as opes que devem ser fornecidas como segundo
argumento. A sintaxe : combine( expresso, opo ). A opo pode ser: exp, ln, power,
trig, Psi, polylog, radical, abs, signum, plus, atatsign, conjugate, plot, product ou range
entre outras. A opo trig engloba todas as funes trigonomtricas e a opo power,
expresses que envolvem potenciao.
Exemplos:
> (x^a)^2*x^b = combine((x^a)^2*x^b, power);
> 4*sin(x)^3 = combine(4*sin(x)^3, trig);
> exp(x)^2*exp(y) = combine(exp(x)^2*exp(y), exp);
Convert
A sintaxe deste comando : convert( expresso, tipo)
onde tipo pode ser um dos seguintes nomes: trig, tan, ln, exp, expln, expsincos, rational,
parfrac, radians, degree, GAMMA, factorial, entre outros, no caso de ser tratar
de converso de uma expresso algbrica em outra expresso algbrica. Vejamos alguns
exemplos:
> expr := (1+I)*(exp(-I*x)-I*exp(I*x))/2;
> convert(cosh(x),exp);
> convert(arcsinh(x),ln);
> binomial(n,k) = convert(binomial(n,k), factorial);
Solve
Com esse comando obtm-se a soluo de equaes
A sintaxe : solve(equao,varivel)
Ex.
> solve(x^3-2*x^2-x,x);
Com o comando solve voc pode tambm solucionar sistemas de vrias equaes e vrias
incgnitas
Exemplo:
Nesse caso convm atribuir um nome as expresses, para depois pedir a soluo
> eqns := {x+y+2*z=1, 3*x+2*y=2, x-2*y-z=0};
> solve( eqns );
Do mesmo modo que o solve(exp.,var.) utilizado para resolver equaes (achando as suas
razes) ele tambm pode ser usado para resolver desigualdades. Por exemplo:
> solve(x-3>=5,x);
> solve(x^2-1>=-1,x);
> solve(x^2-1>=0,x);
> solve(x^2-1>=0 and x^2-1<2,x);
> solve(x^2-1<-2,x);
Observe que no caso de no haver soluo, ou seja, o conjunto soluo ser o conjunto
vazio, nada produzido pelo Maple. Portanto, cuidado com a leitura das respostas obtidas
> Sum('a[k]','k'=0..10);
Como podemos ver, cada um desses pacotes diz respeito a determinados contedos
matemticos. Por exemplo, linalg um pacote especfico para se trabalhar com lgebra
linear. Detools, pacote para trabalhar com equaes diferenciais.
1.7 Atividades 1
Parte 2
Funes e seus Grficos
> S: = (t 2 4) 2 2t 3
Funes polinomiais
Um polinmio de grau n uma funo da forma
P( x) = a n x n + a n 1 x ( n 1) + ... + a 2 x 2 + a1 x + a 0
> plot([x^9,x^9+3*x^6+7*x^4-x],x=-3..3,y=-40..40);
Observe agora o que acontece com estes grficos quando os valores de x aumentam.
> plot([x^9,x^9+3*x^6+7*x^4-x],x=-100..100);
10
Exerccios
1) Examine, abaixo, os grficos das funes x10 e x10 + 3 x 7 + 7 x 4 , traados na mesma
janela. Proceda como no exemplo 4.
2) Escreva um polinmio de grau 7 que possua razes reais e complexas; Calcule essas
razes com o maple.
Funes Racionais
Os polinmios podem ser, evidentemente, multiplicados por constantes, somados,
subtrados e multiplicados, e os resultados sero novamente polinmios. No entanto, se
dividirmos polinmios nem sempre obteremos outro polinmio. Esse quociente chamado
de funo racional, isto , uma funo racional f(x) do tipo
onde p(x) e q(x) so polinmios. Se o denominador q(x) for uma constante no nula, esse
quociente ser ele prprio um polinmio. Assim, os polinmios esto includos entre as
funes racionais.
Evidentemente, nos pontos onde q(x) = 0, a funo f no est definida e portanto, o maior
domnio de uma funo racional constitudo pelo conjunto dos nmeros reias excetuando-
se esses pontos. Os zeros de q(x) so chamados de polos ou pontos singulares da funo f .
1 1
Exemplo 1: Estudar o comportamento das funes e 2
x x
a) Plotar o grfico
plot(1/x^2,x=-2..2,y=-1..10);plot(1/x,x=-2..2,y=-10..10);
Repare que, nos dois casos, o polo das duas funes o ponto x = 0 e que os valores das
duas funes se tornam ilimitados quando x se aproxima de 0.A reta y = 0 uma assntota
vertical ao grfico das funes .
x
Exerccio: Considere a funo g ( x) = .
x 1
2
Exponencial de base a: y = a
x
> y=3^(x)
Exponencial de base e : y = e
x
> y:exp(x)
Logaritmo de base a: y = log a x
> y=log[a](x);
Logartmo de base e: y = ln x
> y=ln(x)
Exemplos:
1 - Calcule o valor de e x para valores x =5; x = 17; x =295; x = -5; x= -123 e x =-3/11;
2 - Calcule o valor de ln( x ) para valores x =10; x = 27; x =300;
Funes Trigonomtricas
A seguir, vamos apresentar alguns exemplos de como obter grficos de funes de uma
varivel.
Em geral, grficos bi-dimensionais no Maple so obtidos atravs do comando "plot" e a
sintaxe mais simples : plot(expresso, x = a..b) ou plot(expresso, x = a..b,y = c..d)
Exemplos:
1) Obtenha o grfico da funo y = x 6 x + 2 x 3 x
3 3 2
Observe que o grfico pode ser melhor visualizado se especificarmos tambm um intervalo
para o eixo y.
> plot(x^3-6*x+2*x^2-3*x,x=-5..5,-10..20);
Observao. Conforme voc viu, para plotar um grfico com o Maple, necessrio que
especifiquemos um intervalo para x. Algumas vezes isso suficiente, porm, em alguns
casos, se no especificarmos tambm uma janela (ou intervalo) para y, no teremos uma
boa visualizao do grfico. Mas, ATENO! cuidado com esses intervalos, eles so
fundamentais para uma boa visualizao grfica.
Ex.2 Grficos de funes trigonomtricas
> plot(cos(3x+5), x=0..2*Pi);
> plot(tan(x), x=-Pi..Pi,-20..20);
13
Ex. 4
> plot({exp(x),ln(x),x},x=-5..5,-10..10,color=[red,blue,black]);
O que acontece com o grfico de uma funo quando somamos uma constante?
Exemplo:
Plote o o grfico das funes y = x , y = x + 1 y = x 1 no intervalo [-2, 2] em um
2 2 2
b) sen( x + y ) = 2 x
Para obter grficos de funes implcitas, necessrio chamar o pacote with(plots) e usar o
comando "implicitplot".
Exemplo:
obter o grfico de x + y = 4
2 2
A sintaxe with(plots):
> implicitplot(x^2 + y^2 = 4, x = -3..3,y = -3..3);
Ex.
> implicitplot({x^2 - y^2 = 1,y = ln(x), y^2-exp(2*x)=0},x = -Pi..Pi,y = -Pi..Pi);
Importantes consideraes
2.6 Atividades 2
3 x + 3 ( x2 + 10 )
1) Escreva a funo p( x ) = e calcule o valor dela para x = -1/3, 0, 35/23
3x
e . Para obter o resultado em decimal, use o comando evalf.
2
2) Escreva a expresso L(x): = ln(x); e com o comando subs calcule o valor de ln para x =
1, x = 3, x 10. O que acontece quando voc tenta calcular o valor de ln(0)?
3) Com o comando evalf, calcule o valor de sen( ), cos( ), tg( ); sen(3).
2 4 2
4) Escreva a funo exponencial de base 5 e calcule alguns valores para x. x pode ser
negativo? Se assim for, calcule valores da funo para x negativo. O que voc observa?
15
x
( x ) 1
e use o comando subs para calcular o
(2 x)
5) Escreva a funo f( x ) = e +3
2
valor da funo para x = 2 .
6) Com o comando solve, resolva as equaes:
10 x + 5
7) Considere a funo f( x ) =
x + x3 + 2 x 4
4
os com maple.
12) Plot o grfico das funes tangente, cotangente, secante e cossecante no intervalo de 0 a
2. Exemplo:
> plot( sec(x), x= 0..2*Pi,y= -3..3,title=`Secante`);
13) Considere a funo p( x ) = 7 x 2 x + 2 x + 13 x 6
3 4 2
d) Escreva um polinmio de grau 5 que tenha 0, 1 2, 3 e -2.5 como razes e plote seu
grfico
19) Plote o grfico das funes abaixo em janelas convenientes.
x3 + 3 x2 x 3 x2 3 x 4
a) f( x ) = ; b) g ( x ) =
x2 + 4 x + 3 x2 1
20) Considere a funo f( x ) = cos( x )
a) Obtenha os grficos de f( x ) , f( 2 x ) , f( 3 x ) em um mesmo sistema de eixos;
b) Use o comando animate (veja aula 5) para visualizar o grfico da funo cosseno com
animao considerando x variando de -5 at 5, t de 1 at 3 e frames = 100.
c) Com o comando animate, obtenha o grfico da funo y = 1 + 2 em uma janela
x
conveniente.
21) Use o comando implicitplot para plotar os seguintes grficos:
a) Crculo trigonomtrico de raio 3;
b) Elipse de semieixos 2 e 4 e do crculo de raio 2 em um mesmo sistema de eixos.
17
Parte 3 :
Vetores, Matrizes, Determinantes
e Sistemas de Equaes Lineares
3.1 Vetores
Definindo vetores
Para definirmos vetores utilizamos o comando array ou o comando vector:
G := vector (8, x -> x^3); define um vetor com 8 elementos onde cada posio recebe o
cubo do n da posio.
Exemplos:
with(linalg):
> v := vector([3,0,1]); v[3];
> w:=linalg[vector](4,[1,x,1/x,sqrt(x)]);
3.2 Matrizes
Definindo matriz
Para definir matrizes utilizamos o comando matrix ou o comando array:
Do mesmo modo que vetores, existe mais de uma maneira de se definir uma matriz com o
maple
Exemplos:
A := matrix ([[1,2],[3,4]]); define uma matriz quadrada de ordem 2 onde a 1 linha tem os
nmeros 1 e 2 e a 2 linha, os nmeros 3 e 4;
18
B := matrix (2, 4, [1,2,3,4,5,6,7,8]); define uma matriz de duas linhas e quatro colunas;
C := array (1..3, 1..2, [[1,2],[3,4],[5,6]]); define uma matriz de trs linhas e duas colunas; e
H := matrix (3, 3, (i,j) -> i * j); define uma matriz quadrada de ordem 3 onde cada elemento
recebe o produto do n da sua linha com o n da sua coluna.
Sendo A uma matriz qualquer, denotaremos um elemento da matriz A por ai, j onde i
corresponde a linha e j a coluna da matriz.
> with(linalg):
> A:=matrix([[a[1,1],a[1,2]],[a[2,1],a[2,2]]]);
> A[2,1]; retorna o elemento que fica na linha 2 e coluna 1
ou
> C:=array(1..2, 1..2, [[2,0], [3,5]]);
C:= matrix ([[a,b,c],[d,e,f],[g,h,i]]); define um matriz quadrada de ordem 3
Tipos de Matrizes
Matriz zero
Matriz cujos elementos ai, j so todos nulos.
Exemplo
> Z:=matrix([[0,0,0],[0,0,0]]);
Matriz identidade
Matriz quadrada que tem todos os elementos da diagonal igual a 1.
> L:=matrix([[1,0],[0,1]]);
19
> R:=array(1..3,1..3,[[1,0,0],[0,1,0],[0,0,1]]);
Exerccio resolvido:
Dada a matriz
> G:=matrix([[x,3,2],[5,x,1],[1,3,1]]);
Resolva a equao dada por det (G) = 12
Soluo:
> det(G)=12;
> solve(x^2-5*x+6);
Resposta: x = 2 ou x = 3
20
> solve(S_1);
Para visualizarmos o ponto encontrado, plote o grfico das equaes em uma janela
conveniente
Para plotar o grfico use o comando implicitplot.
>
21
> S_2:={2*x+4*y-6*z=10,4*x+2*y+2*z=16,2*x+8*y-4*z=24};
> solve(S_2);
possvel a visualizao grfica de S_2?
Sim possivel, entretanto, observe que cada equao do sistema acima representa um plano
no espao, portanto a visualizao grfica deve ser em 3d (espao tridimensional).
Para obter o grfico com o maple, utiliza-se o comando implicitplot3d (equaes, variao
das variveis x, y, z). No caso do sistema S_2, proceda do seguinte modo:
> with(plots):
> implicitplot3d(S_2, x = x1 .. x2 , y = y1 .. y2 , z = z1 .. z2 );
( -1 )
Um outro modo de encontrar a soluo de um sistema considerando a matriz A
( -1 )
inversa da matriz A dos coeficientes e resolvendo a equao: X = A B onde B a
matriz dos termos independentes.
Obs. Uma matriz coluna uma matriz da forma:
> matrix(3,1,[x,y,z]);
Exemplo: Usar o mtodo da matriz inversa para resolver o sistema dado pelas equaes:
2 x + 3 y + 7 z = 25
x + 3 y + 2 z = 11
5 x + 3 y + 4 z = 5
Soluo:
Seja C a matriz dos coeficientes que dada por:
> C:=matrix([[2,3,7],[1,3,2],[5,3,4]]);
Calcular agora a inversa de C
> inverse(C);
Considerando a matriz dos termos independentes B, resolver a equao X = C B
> B:=matrix(3,1,[25,-11,-5]);
O resultado matriz
> X:=evalm(C&*B);
A soluo x = -18, y = -18 e z = 72
3.6 Atividades 3
1) Com o Maple, obtenha os seguintes vetores:
a) m = [-2,3,5]; n = [1,0,-1,3] ; Determine a segunda coordenada de m e a terceiro de n;
b) um vetor 3D e escreva-o de duas maneiras: Usando o comando array; usando o
comando vector.
2) Escreva uma matriz de ordem 3 x 5 e retorne o elemento da linha 3 e coluna 2;
3) Defina com o maple a matriz quadrada L de ordem 4, de modo que seus elementos sejam
da forma i * j
.4) Dada a matrix
> H:=matrix([[2,x-2,1],[1,x+3,4],[3,x+1,5]]);
Resolva a equao dada por: 2det(H) = 56 2 det( H ) = 56
5) Dada as matrizes
> A:=matrix([[1,5,2,-3],[-3,9,-1,10],[0,7,-2,3]]);
B:=matrix([[8,10,-5,12],[-7,4,5,1],[6,2,4,11]]);
23
Calcule
a) verifique se det(A + B) = det(A) + det(B);
b) Verifique se det(AB)= det(A)det(B);
t
c) Calcule det( AB )
6) Considere a matrix A dada por:
> A:=matrix([[4,5,2*x],[3,9,-x],[5,-2,3*x]]);
Resolva a equao dada por: 3 det( 2 A ) = 145
7) A condio para que uma matriz A admita inversa que det( A ) 0 .
Verifique se as matrizes abaixo admitem inversa, calculando seus determinantes. Caso elas
admitam inversas, determine-as.
> L:=matrix([[2,1,3],[4,2,2],[2,5,3]]);S:=matrix([[1,3,1,0],[-2,1,0,0],[0,0,3,0],[2,0,1,0]]);
8) Use a condio do exerccio 6, para resolver o seguinte exerccio:
Determine o valor de x para que a matriz dada abaixo no tenha inversa
> C:=matrix([[2,3,1],[6,x,2],[1,2*x,3]]);
9) Defina com o maple a matriz quadrada L de ordem 4, de modo que seus elementos sejam
da forma i / j .
10) D exemplo de uma matriz linha e de uma matriz coluna;
11) Encontre a inversa da matriz A (chame-a de C) do exerccio 4 e mostre que o produto
da matriz A C = I.
12) dada as matrizes
E := array( [ [ 2, 3, 1 ], [ -1, 3, 2 ], [ 2, 0, 4 ] ] ) ;
F := array( [ [ 0, 1, 2 ], [ 3, 2, 5 ], [ 1, 2, 3 ] ] ) ;
b) Calcule ( E + F )
2
d) Verifique se E F = F E ;
e) Mostre que ( E F ) = E F ;
t t t
f) Verifique se ( E F ) = E F ;
t t t
x y + 2 z = 3
5x+3y4z=8
7 x + 2 y + z = 10
a) Usando o comando solve;
b) resolvendo a equao da forma AX = B;
c) Pelo mtodo da matriz inversa.
Parte 4:
Introduo a Programao com Maple
lembrando que
> op(2..3, [a,b,c]);
exceto quando no h ndices:
> [a,b,c][];
NULL representa a sequncia vazia, que til para inicializar sequncias e deletar
elementos:
> S := NULL;
> S := S,a,b;
> subsop(2=NULL, [a,b,c]);
Note que NULL utilizado somente para entrada e nunca aparece na sada.
x := a: # primeiro elemento
n := 5: # nmero de elementos
# Loop principal:
to n do
S := S + x; # soma
P := P * x; # produto
Q := Q , x; # sequncia
x := f(x) # prximo elemento
end do:
# Resultados:
'S' = S;
'P' = P;
'Q' = Q;
# Fim do grupo de execuo
Note que
> mul(el, el=L);
> add(el, el=L);
> seq(e1,e1=L);
Comando map
> restart:
Aplica uma funo a cada operando de uma expresso:
> map(f, [a,b,c]);
> map(f, {a,b,c});
> map(x -> x^2, x+y+z);
> map(x -> x^2, {a,b,c});
27
Iterao
Ns repetimos os passos anteriores at o jogo acabar
Comeo:
> game :=
> proc(Joo, Maria)
28
4.3 Procedimentos:
um programa em Maple na sua forma mais simples.
Exemplo 1
f:=proc(< >)
<comandos>
end
> ?proc;
> metade:=proc(x)
> evalf(x/2);
> end;
metade(3);
> divi:=proc(p,q)
> p/q;
> end;
divi(2,3);
> divi(2,3.0);
> divi(2-3*I,2+I);
> divi(2-3*I,2.+I);
> on := proc( )
> global switch;
> switch := true
> end:
> state := proc( )
> global switch;
> switch
> end:
> on( ):
> state( );
>
O que aconteceria se voc esquecesse da declarao na definio do procedimento? Veja
abaixo.
Exemplo 1.
Soma dos n primeiros nmeros:
> soma:=proc(n)
local total,i;
> total:=0;
> for i from 1 to n do
> total:=total+i
> od;
> total;
> end:
> soma(10^6);time(soma(10^6));
30
> add(i,i=1..10^6);time(add(i,i=1..10^6));
Exemplo 2.
Sequncia de Fibonacci, com condies iniciais f0 e f1: f(n) = f(n-2) + f(n-1)
> fibon:=proc(n,f0,f1)
f(0):=f0;
f(1):=f1;
> for i from 2 to n do
> f(i):=f(i-1)+f(i-2)
> od;
> end:
>
> fibon(5,1,0);fibon(400,1,0);
Obs. 1 Existem trs formas particulares do comando for que so seq, add e mul. A sintaxe
desses comandos so iguais, de forma que vamos apenas descrever o comando add que
executa um somatrio. A sua sintaxe uma das seguintes formas
add ( f, i = a .. b )
add ( f, i = L )
onde f uma expresso que geralmente depende do ndice i . Na primeira forma, o ndice
i assume valores inteiros de a at b , onde a e b tem que ser numricos. Na segunda
forma o ndice assume valores da expresso ou estrutura de dados L . Por exemplo
> restart:
> add( a[i]*x^i, i=0..5 );
> add( sin(i), i=[theta,omega,tau]);
> seq( i^2, i=1..5 );
> mul(x*i,i=1..5);
> L := [seq(i, i=1..6)];
> add(i,i=L);
> mul( x-i, i=L );
Exemplo 3
O exemplo que se segue calcula o quociente de uma diviso com resto o. Consideraremos
inicialmente a varivel i sem especificar o incremento
> for i from 1 to 17 do
> if i mod 3=0 then
> print(i);
> fi;
> od;
31
Exerccio especial
A funo rand( ) do Maple gera nmeros aleatrios (teste e verifique no help do Maple
como ela o faz).
Escreva um programa que gera nmeros aleatoriamente com rand( ), para quando
encontrar um nmero menor que k devolver a quantidade de nmeros gerados com rand( )
at obter um nmero menor que k .
> randk:=proc(k::integer)
local n,conta;
> n:=k+1;
conta:=0;
while n >= k do
32
n:=rand();
conta:=conta+1;
od;
> print(`O nmero obtido foi n =`, n, `e foram necessrios gerar` , conta, `
nmeros`) ;
> end:
randk(10000000000);
> ? if
> divi:=proc(p,q)
if q=0 then
ERROR(`Denominador nulo`);
fi;
> p/q;
> end;
> divi(2,0);
Funo chapu:
> chap:=proc(x)
> if x<=0 then 0
else
if 0<x and x<=2 then
x
else
if x>2 and x<=4 then
4-x
else
0
fi;
fi;
fi;
> end:
> chap(1);
Alternativamente:
> chap:=proc(x)
> if x<=0 then 0
elif 0<x and x<=2 then x
elif x>2 and x<=4 then 4 - x
33
else 0
fi;
> end;
> ABS:=proc(x)
> if x >= 0 then x
> else -x
> fi;
> end;
plot(ABS,-5..5);
Exerccio 7: Certifique-se que a funo rand( ) do Maple gera nmeros aleatrios (teste e
verifique no help do Maple como ela o faz).
Escreva um programa que gera nmeros aleatoriamente com rand( ), para quando encontra
um nmero menor que k e devolve a quantidade de nmeros gerados com rand( ) at obter
um nmero menor que k .
> randk:=proc(k::integer)
local n,conta;
> n:=k+1;
conta:=0;
while n >= k do
n:=rand();
conta:=conta+1;
od;
> print(`O nmero obtido foi n =`, n, `e foram necessrios gerar` , conta, `
nmeros`) ;
34
> end:
randk(10000000000);
Exemplo: Um Programa que usa o algoritmo de Euclides para calcular o mximo divisor
comum (MDC) entre dois nmeros naturais m e n. (O mtodo de Euclides, basicamente,
divide m por n (se m > n), encontrando um resto r1. Se r1= 0, n o m.d.c. Seno, divide n
por r1 encontrando r2. Se r2 = 0, r1 o mdc. Seno, divide r1 por r2, dando r3. Se r3 = 0,
ento r2 o mdc e assim por diante, at dar diviso exata. Demonstre que o mtodo acima
sempre funciona, escreva o algoritmo correspondente, bem como um programa para Maple
que calcula o mdc. Calcule o mdc entre 44559431 e 4619832
> restart;
mdc:=proc(m,n)
local resto,div,aux;
> resto:=irem(m,n);
div:=n;
while resto>0 do
aux:=resto;
resto:=irem(div,resto);
div:=aux;
od;
> div;
end:
mdc(12,8);
4. 9 Atividades 4
1. Atribua a lista [a,b,c] varivel L1 e [d,e,f] varivel L2. Ento, usando somente as
variveis L1 and L2, atribua varivel L a lista [a,b,c,d,e,f], ou seja, junte as listas L1 e
L2. Sugesto: Use o comando op.
2. Delete de L o segundo e o terceiro elemento, inclusive, com e sem subsop. [Veja help
para mais detalhes de subsop.]
9 Faa um procedimento que calcule a diferena entre dois nmeros dividido por 2, c = (a
- b) / 2. Declare c como varivel "local" e chame o procedimento de dif2. Calcule c para:
a =12 e b = 18; a = 56 e b =17; a= -32 e b 45; a = 259 e b = - 123
10 Escreva e teste um programa para a soma dos n primeiros termos de uma P.G. de
termo inicial a0 e razo r.
11 Como se define uma iterao usando o comando for do od que executa a mesma
tarefa que o comandos seq 1:=seq(termo(a+i*n), i=0..(b-a)/n); onde a, b e n so nmeros.
[3] Heal, K. M., Hansen, M., Rickard, K., Maple V Learning Guide, Springer-Verlag,
New York, 1997.
[4] Monagan, M., Geddes, K., Heal, K., Labahn, G., Vorkoetter, S., Maple V Programming
Guide, Springer-Verlag, New York, 1997.
[5] Heck, A., Introduction to Maple, Second edition, Springer-Verlag, New York, 1996.
[6] Wright, F., Computing with Maple, Chapman & Hall/CRC, 2001.
[8] Introduo Programao em Maple, III Semana da Fsica, Fernando Deeke Sasse,
UDESC-Joinville, 25-29/8/2003