Escolar Documentos
Profissional Documentos
Cultura Documentos
Maple Curso Uesc
Maple Curso Uesc
UESC
Universidade Estadual de Santa Cruz
Departamento de Cincias Exatas e Tecnolgicas
Andr Nagamine
andren@uesc.br
maro de 2001
SUMRIO
I.
Introduo _______________________________________________________ 3
1.
2.
3.
1.1
Sintaxe ______________________________________________________ 5
1.2.
1.3.
1.4.
Aritmtica ___________________________________________________ 9
1.5.
1.6.
1.7.
Operaes Simblicas_________________________________________ 13
1.8.
Somatrios__________________________________________________ 14
Sequncia___________________________________________________ 15
2.2.
Lista _______________________________________________________ 16
2.3.
Conjunto ___________________________________________________ 18
2.4.
2.5.
Array ______________________________________________________ 19
3.2.
Funes de uma varivel ______________________________________ 24
3.2.1
Funes reconhecidas (usuais) _______________________________ 26
3.2.2
Funes definidas por partes ________________________________ 28
3.3.
4.
2.
33
33
35
36
36
38
1.2.
Grficos em trs dimenses ____________________________________
1.2.1
Grficos de funes _______________________________________
1.2.2
Grficos de superfcies no espao ____________________________
1.2.3
Mltiplos Grficos em 3D __________________________________
39
39
40
41
2.1.2
2.1.3
2.2. Derivadas___________________________________________________
2.2.1
Derivadas de funes de uma varivel _________________________
2.2.2
Derivadas de ordem superior ________________________________
2.2.3
Derivadas de funes de mais de uma varivel __________________
44
44
45
46
2.3.
Integrais____________________________________________________ 47
2.3.1
Integrais Mltiplas ________________________________________ 48
3.
Fundamentos________________________________________________ 50
3.2.
Estruturas de Programao____________________________________
3.2.1
O Comando for _________________________________________
3.2.2
O Comando if __________________________________________
3.2.3
O Comando while _______________________________________
3.3.
3.4.
Outros Exemplos ____________________________________________
3.4.1
Procedimentos Recursivos __________________________________
3.4.2
Procedimento com Listas ___________________________________
3.4.3
O Mtodo de Iterao de Newton_____________________________
7.
51
52
53
54
55
55
57
58
Bibliografia _____________________________________________________ 59
I. Introduo
O presente texto foi elaborado no sentido de nortear o andamento do curso intitulado
Curso de Introduo ao Software Maple, ministrado no perodo de 18/04/2001 a
07/052001, o qual parte integrante das atividades desenvolvidas pelo Grupo de
Pesquisa em Ensino e Aprendizagem da Matemtica em Ambiente Computacional
GPEMAC que vem atuando na rea de matemtica de DCET desde janeiro de 2000.
O Maple um sistema de computao algbrica desenvolvido por Waterloo Maple Inc.
(Ontrio, Canad). A expresso sistema de computao algbrica, deve-se ao fato de
que o Maple permite aos seus usurios fazer clculos no somente com nmeros, mas
tambm com smbolos, frmulas, expresses, equaes e assim por diante. Pode-se usar
essa capacidade simblica para obter solues analticas exatas para muitos problemas
matemticos, por exemplo, diferenciao, integrao, sistemas de equaes, expanso
de funes em sries, problemas em lgebra Linear, etc. Sistemas de computao
algbrica, em particular o Maple, so poderosas ferramentas para matemticos, fsicos,
qumicos, engenheiros, enfim para todos aqueles que necessitam de respostas rpidas e
precisas para determinados problemas matemticos.
O curso tem como objetivo fornecer ao participante um apanhado geral das
potencialidades de Maple em relao a diversos tpicos da matemtica. No se tem, no
desenvolvimento das atividades, a pretenso de detalhar e aprofundar os temas
propostos, mesmo porque isso seria improvvel dada a carga horria destinada ao curso
e tambm dada a extenso do software. Pretende-se, sim, fornecer ao participante os
caminhos possveis para que ele prprio possa escolher no tratamento e resoluo de
seus problemas matemticos. O curso dividido em dois mdulos, no primeiro sero
abordados os seguintes tpicos: sintaxe e comandos bsicos, seqncia , listas,
conjuntos, arrays, sistemas e expresses, funes e polinmios. No segundo mdulo
sero abordados os seguintes tpicos: grficos 2d e 3d, tpicos de clculo e tpicos de
programao.
ordem de precedncia
!
^ou**
/
*
+
fatorial
potenciao
diviso
multiplicao adio
subtrao
Por exemplo, se colocarmos:
> 2+28*3/2;
teremos como resposta 8, pois o Maple efetua primeiro a diviso 3/2 multiplica o
resultado por 8 efetua a soma 2+2 e por ltimo efetua a subtrao 412.
Para evitar confuses podemos utilizar parnteses () que necessrio para modificar a
ordem de precedncia. Porm colchetes [] e chaves {} no devem ser utilizados para este
fim.
Exemplo:
> (2+28)*3/2;
6
> (2+28*3)/2;
10
> {2+28*3}/2;
Error, use intersect for sets
O Maple trabalha com um sistema multilinha. Vrios comandos podem ser colocados
em uma mesma linha, ou um comando em vrias linhas. Exemplos:
>1+2; 2+3; 3+4;
3
5
7
Obs.: Um comando pode utilizar vrias linhas, desde que agrupadas em um
nico colchete.
6
23
>3^2*3;
27
>(8*2+4)/(10*325);
4
Obs.: Os resultados acima esto de acordo com a ordem de precedncia discutida
anteriormente.
e2
ln(2)
Em alguns casos para se obter o nmero na forma decimal basta acrescentar um ponto
aps o nmero. Isso faz com que o Maple leia o nmero em aritmtica de ponto
flutuante.
> 1/2 + 5.; 30./9; ln(2.);
5.500000000
3.333333333
.6931471806
Obs.: o ltimo nmero acima o mesmo que 0,6931471806. O Maple usa ponto no
lugar da vrgula e no mostra o nmero que est a esquerda ou a direita do ponto caso
este seja apenas o zero. Nos exemplos acima 5. o mesmo que 5,0, 30. o mesmo que
30,0 e 2. o mesmo que 2,0.
Uma forma mais geral usar o comando evalf (avaliar com ponto flutuante) para se
obter uma representao decimal de um nmero. Normalmente, o sistema utiliza dez
algarismos significativos.
>evalf(176/47);
3.744680851
Tambm podemos modificar o nmero de dgitos para quanto quisermos. Por exemplo:
>evalf(22/7, 50); #modificando localmente o nmero
dgitos para 50;
3.1428571428571428571428571428571428571428571428571
de
>evalf(Pi);
8
3.141592654
Obs.: O smbolo # utilizado acima significa comentrio. Ele utilizado quando se quer
fazer algum comentrio a respeito do comando. Tudo o que vem depois desse smbolo
ignorado pelo Maple.
O nmero de dgitos utilizado na representao float , por default, 10. Este valor est
alocado na varivel global Digits. Podemos modificar o valor dessa varivel. Por
exemplo:
>Digits := 3
>evalf(Pi);
Digits:=3
calculando o valor de com 3 dgitos (incluindo o dgito inteiro)
3.14
Para restabelecer o valor original da varivel global Digits implementamos o
comando,
>Digits:=10;
Digits:=10
>1/3;
>evalf(%);
.3333333333
O smbolo % junto com o comando evalf representa o ltimo valor calculado na
forma de nmero decimal.
1.4. Aritmtica
O comando sqrt (abreviao de square root) calcula a raiz quadrada.
> sqrt(25);
5
Se quisermos no Maple calcular o fatorial de um nmero, basta colocarmos depois do
nmero o smbolo !. Por exemplo:
> 20!;
2432902008176640000
Agora um outro comando pode contar quantos dgitos tem o resultado acima, estamos
falando do comando length. Como por exemplo:
>length(%);
19
O Maple tem muitos comandos que podem trabalhar com nmeros inteiros, citaremos
alguns importantes.
Se quisermos obter a decomposio de um determinado nmero inteiro em fatores
primos usamos o comando ifactor. Por exemplo:
>ifactor(60);
De outro modo o Maple pode determinar o mximo divisor comum entre dois ou mais
nmeros, para isso usamos o comando igcd. Por exemplo:
>igcd(123,45);
3
O comando iquo calcula o quociente da diviso entre dois nmeros inteiros, como por
exemplo:
>iquo(25,3);
8
Tambm no Maple podese calcular o resto da diviso entre dois nmeros inteiros,
basta usarmos o comando irem .
>irem(25,3);
1
Na matemtica, mas especificamente na lgebra vemos que para achar o resto da diviso
entre dois nmeros podemos aplicar o conceito de mod. No Maple tal conceito continua
existindo, podendo assim tambm acharmos o resto da diviso entre dois nmeros de
outra maneiro, usando o comando mod. Por exemplo:
>25 mod 3;
1
Obs.: O comando mod no exemplo acima tambm pode ser interpretado da seguinte
forma: 25 em ZZ3 igual a 1 (faa as contas e tente outros exemplos).
O comando isprime possibilita sabermos se um determinado nmero inteiro primo
ou no. Por exemplo:
>isprime(3345674);
false
>isprime(18002676583);
true
Para acharmos no Maple o valor absoluto de um nmero, usamos o comando abs.
>abs(5);
10
5
No Maple podemos provocar um retorno em um tipo numrico desejado, para isso
basta usarmos a funo convert.
>convert(sqrt(28),float);
5.291502622
>convert(8.66666666, fraction); convert(5/7,float);
26/3
.7142857143
>convert(247,binary); nos d o nmero 247 em representao binria
11110111
Os comando cos, sin, tan nos d o valor da funo cosseno, seno e tangente
respectivamente em um determinado ponto. Por exemplo;
>cos(Pi/3);
>sin(Pi/6);
11
>A1^2;
4x2
>2*var+var^2+var^3;
2x+ x2 + x3
>2*num+num;
13704/235
Atribuir letras ou nomes a expresses algo muito til quando voc precisa utilizar uma
determinada expresso diversas vezes.
(1 + x)2
>(1+x)+(1+x)xx^2+3*x^2;
2 + x + 2x2
Note que, expresses envolvendo apenas somas ou subtraes, so automaticamente
simplificadas.
>A2:= (xy)*(x^2+x*y+y^2);
A2:= (x y)(x2 + xy + y2)
A2 acima uma expresso qualquer definida no Maple atravs de um produto. Se
desejarmos saber o resultado usamos,
>expand(A2);
y3 + x3
O comando expand tem primariamente a funo de efetuar o produto em uma soma,
como foi visto no caso acima.
>A3:=expand(A2*(y+1));
A3:= x3y + x3 y4 y3
13
A4:=
x3 y + x3 y 4 y3
y +1
>simplify(A4);
y 3 + x3
>A5:=cos(x)^5+sin(x)^4+2*cos(x)^22*sin(x)^2cos(2*x);
A5:=cos(x)5 + sin(x)4 + 2cos(x)2 2sin(x)2 cos(2x)
>simplify(A5);
cos(x)5 + cos(x)4
O comando factor usado para fatorar expresses algbricas.
>A6:= x^2+2*x+1;
A6:= x2 + 2x + 1
>factor(A6);
(x + 1)2
>A7:= x^5x^47*x^3+x^2+6*x;
A7:=x5 x4 7x3 + x2 + 6x
>factor(A7);
x(x 1)(x 3)(x + 2)(x + 1)
Em um quociente o Maple o comando factor automaticamente simplifica os fatores
comuns no numerador e denominador.
>factor((x^21)/(x+1));
(x 1)
1.8. Somatrios
No Maple podemos usar o conceito de somatrio, para isso usamos o comando Sum ou
sum. Os somatrios podem ser colocados de forma genrica, ou seja, a variao do
ndice no necessariamente precisa ser numrica. Vejamos alguns exemplos abaixo:
>Sum(i, i=1..5);
5
i
i =1
O comando Sum quando escrito com letra maiscula, apenas representa a soma no
smbolo de somatrio, agora se este estiver escrito com a letra minscula ele nos dar o
valor da soma, por exemplo.
>sum(i, i=1..5);
15
Veremos outro exemplo:
>Sum(1/i^2, i=1..5);
14
i
i =1
Se usarmos o comando value, este tambm nos dar o valor da soma como acontece
com o comando sum.Por exemplo:
>value(%);
137/60
Vejamos agora um exemplo onde a variao do ndice no numrica.
>sum(i,i=1..n);
1
1
1
(n + 1)2 n
2
2
2
Note que esta ltima frmula bem conhecida, pois a soma de n primeiros nmeros
inteiros.
Obs.: tudo o que foi dito acima para o somatrio tambm vlido para o produtrio,
cujo comando no Maple product.
s:= 1, 2, 3, 4
>x, y, z, w;
x, y, z, w
O ponto . usado para concatenar sequncias. Por exemplo:
>b:= 1, 3, 5, 7;
b:= 1, 3, 5, 7
>a.b;
a1,a3,a5,a7
Podese tambm fazer mltiplas atribuies utilizando a notao de sequncia. Por
exemplo
>f, g, h:= 3, 6, 1;
f, g, h:= 3, 6, 1
>f;
3
>h;
1
15
No Maple ao se trabalhar com sequncias, caso os temos de uma sequncia sejam eles
prprios sequncias, este automaticamente transforma tudo em uma nica sequncia.
>s:= 1, 2, 3, 4;
s:= 1, 2, 3, 4
>b:= 1, 3, 5, 7;
b:= 1, 3, 5, 7
>c:= x, y, z, w;
c:= x, y, z, w
>s, b, c;
1, 2, 3, 4, 1, 3, 5, 7, x, y, z, w
O comando seq pode ser usado para construir sequncias da seguinte forma:
>s:= seq(i^4, i={x,y,z});
s:= x4,y4,z4
a := 4, 9, 16
2.2. Lista
Uma lista uma sequncia delimitada por colchetes, ou seja, algo do tipo:
[sequncia]
Exemplo:
>data_list := [1, 2, 3, 4, 5];
datalist:=[1, 2, 3, 4, 5]
>polynomials := [x^2+3, x^2+3*x1, 2*x];
polynomials:= [ x 2 + 3 , x 2 + 3 x 1 , 2 x ]
>participantes := [Kathy, Frank, Rene, Niklaus, Liz];
participantes:= [Kathy, Frank, Rene, Niklaus, Liz]
Citaremos aqui alguns comandos usados para trabalhar com listas:
>L := [a, b, c, d, e];
L:= [a, b, c, d, e]
>L[2]; retorna o segundo elemento da lista L
b
>nops(L); retorna o nmero de elementos da lista L
5
>op(L); extrai os elementos da lista L
a, b, c, d, e
>map(x>x^3, L); aplica a funo x x 3 aos elementos da Lista L
[a3, b3, c3, d3, e3]
Caso deseje substituir algum elemento de uma lista basta usar o comando subs.
>L := [a, b, c, d, e];
L:= [a, b, c, d, e]
16
>subs(b=2, L);
[a, 2, c, d, e]
>lista:= [sin(x), ln(x), x^2];
lista := [sin(x), ln(x), x2]
>subs(x=Pi, lista);
[sin(), ln(),2]
Obs.: Cabe observar que em uma lista ou em uma sequncia a ordem em que os
elementos so dispostos relevante, alm disso os elementos podem se repetir.
17
2.3. Conjunto
uma sequncia delimitada por chaves. As propriedades so as mesmas das dos
conjuntos em Matemtica. Exemplos:
>data_set := {1, 1, 0, 10, 2};
data_set:={ 1, 1, 0, 10, 2}
>unknows := {x, z, y}
unknows := {x, z, y}
>set1:= {a, b, c};
set2:={c, d, e};
set1:= {a, b, c}
set2:={c, d, e}
>set1 union set2; nos d a unio do conjunto set1 com o conjunto set2
{a, b, e, d, c}
>set1 intersect set2; nos d a interseco do conjunto set1 com o conjunto
set2
{c}
>nops(set1); op(set1);
3
a, b, c
>map(x>x^2, set1);
{c2, a2, b2}
O Maple no preserva a ordem dos elementos nem repetio dos mesmos. Isto ,
conjuntos para o Maple tem as mesmas propriedades que estes possuem na Matemtica..
Dessa forma os trs conjuntos abaixo so idnticos.
>{a, b, c}, {c, b, a}, {a, a, b, c, a};
{b,c,a}, {b,c,a}, {b,c,a}
18
conj2 :={5, 6, 3, 7}
>member(2, conj2); nos diz se elemento 2 est no conjunto
false
Tambm o Maple possibilita localizar qual o elemento da lista, basta usar a notao [n]
onde n identifica a posio do elemento na lista. Por exemplo:
>conj1 := [Kate, Tom, Steve];
conj1:= [Kate, Tom, Steve]
> conj1[2];
Tom
O Maple entende conjuntos e listas que no tem nenhum elementos. Por exemplo:
>empty_set :={};
empyt_set :={}
>empty_list :=[];
empty_list :=[]
No Maple podese criar um novo conjunto, usando por exemplo, o comando union.
Por exemplo:
>velho := {2, 3, 4};
velho := {2, 3, 4}
>novo := velho union {2,5};
novo := {2, 3, 4, 5}
minus {2, 5}; esse comando minus nos d todos os
>conj3:= velho
elementos que pertence ao conjunto velho e no pertence ao conjunto {2, 5}, .
conj3:= {3,4}
2.5. Array
Array uma estrutura de dados que encontra muitas aplicaes, por exemplo em
lgebra Linear. uma maneira conveniente de definir vetores e matrizes usando listas.
Array uma extenso de uma lista. Uma lista como vimos acima um grupo de itens
onde se pode associar a cada item um nmero inteiro positivo. A estrutura de dados
array uma generalizao dessa idia. Cada elemento estar associado a um ndice,
mais no necessariamente restritos a uma dimenso. Alm disso, esses ndices podero
ser zero, ou nmeros inteiros negativos. Vejamos alguns exemplos:
>array1:=array(1..3);
19
Ao realizar essa operao o Maple cria uma lista (como se fosse um vetor) de nome
array1, de trs coordenadas (devido a variao 1..3) cujos valores ainda no esto
definidos,
>array1[1];
array11
isso significa que o primeiro elemento do array1 ainda no est definido. Podemos
proceder da seguinte forma para definir os elementos de array1:
>print(array1);
[1, 2, 3]
H outra forma mais direta de definir o array1 acima. Vejamos:
>array1:=array(1..3,[1,2,3]);
array1 := [1, 2, 3]
Como foi dito acima a estrutura de dados array no necessariamente est restrita a uma
dimenso apenas. Podemos usar array para construir por exemplo matrizes. Vamos
utilizar o ltimo procedimento acima.
>array2:=array(1..3,1..3,[[1,2,3],[4,5,6],[7,8,9]]);
1 2 3
array2 := 4 5 6
7 8 9
note que os parmetros 1..3, 1..3 significam que o array2 ter dois ndices cada qual
variando de 1 at 3, da o motivo do resultado ser uma matriz 3 3. Os colchetes
representam as entradas da matriz, portanto devese tomar um certo cuidado na hora de
definilos. Podese usar esse procedimento para construir outros tipos de matrizes no
necessariamente numricas.
>array3:=array(1..2,1..3,[[feijo,arroz,carne],[1.4,1.0,6.
3]]);
>array3[1,2]; array3[2,2];
arroz
1.0
20
>seq(array3[1,i],i=1..3);
feijo, arroz, carne
da mesma forma os elementos da segunda linha,
>seq(array3[2,i],i=1..3);
1.4, 1.0, 6.3
Podese construir arrays mais gerais que no sejam matrizes, por exemplo:
>array4:=array(1..2,1..2,1..2,[[[1,2],[3,4]],[[5,6],[7,8]]
]);
>array5:=array(1..2,1..2,[[1,2],[3,4]]);
array6:=array(1..2,1..2,[[5,6],[7,8]]);
1 2
array5:=
3 4
5 6
array6:=
7 8
>evalm(array5&*array6); evalm(array5array6);
19 22
43 50
4
4
4 4
Obs.: para efetuar a multiplicao de matrizes devemos utilizar o caracter & antes de
*, alm disso o comando evalm faz com que o clculo seja efetuado. Para outros tipos
de operaes com matrizes devemos colocar o seguinte comando:
>with(linalg):
21
>evalm(array6&*%);
1 0
0 1
>charpoly(array5,x);
x2 5x 2
o comando acima calcula o polinmio caracterstico da matriz array5.
>eigenvalues(array5);
5 1
5 1
+
33 ,
33
2 2
2 2
o comando acima calcula os autovalores da matriz array5.
equa1 := x 3 + 3 x 2 4 = 0 ;
>solve(equa1);
1,2,2
Quando a equao possui mais de uma varivel, fundamental indicar ao sistema a
incgnita do problema.
>equa2 := 2*x+y=0;
equa2 := 2x+y=0;
>solve(equa2, x);
(1/2)y
>solve(equa2, y);
2x
22
I,I
Se o comando solve no conseguir apresentar exatamente as razes desejadas,
podemos ento executar o comando fsolve (resolver com ponto flutuante) para se
obter razes aproximadas.
>equa3 := x^6 2*x^2 + 2*x;
x6 2x2 + 2x
>solve(equa3,x);
0, RootOf(_Z52_Z+2)
A expresso RootOf na resposta acima uma forma simblica de o Maple dizer que as
outras solues da equao equa3 so as razes da equao z 5 2 z + 2 .
>fsolve({equa3},x);
{x = 0}, {x = 1.364430112}
Obs.: a utilizao das chaves em torno de equa3 acima faz com que as solues sejam
expressas em termos de conjuntos.
Por questes prticas, a funo fsolve no mostra automaticamente as razes
complexas. preciso adicionar a opo complex .
>fsolve({equa3},x,complex);
{x = 0}, { x = 1.364430112}, { x = .19296060491.268917574I}, { x =
.1929606049+1.268917574I}, { x = 8751756609.3519221356I}, { x =
8751756609+.3519221356I}
23
sol:={x=
>evalf(sol,13);
63
125
77
, z=
, y= }
13
39
13
s2:={z=7t(
59
70
70
635
28
527
)u( ), y=12t+( )u+
, x=7t( )u
}
13
13
13
13
13
13
{x=
643
861
220
,y=
,z=
}
13
13
13
>g:=t>2+t^2+3*t^3+6*t^4;
g:= t2+t2+3t3+6t4
Aps a entrada das expresses das funes, elas ficam memorizadas e podem ser
chamadas a qualquer instante, bastando digitar o nome da funo e o ponto ou a varivel
que se quer calcular a funo.
Chame novamente a expresso da funo f(x), e tambm o valor de g(a) e g(2.76).
Convm observar que o comando abaixo s ser executado a contento se os comandos
acima tiverem sido executados previamente.
>f(x);
x (x2)sin(x)
>g(a);
2+a2+3a3+6a4
>g(2.76);
420.8583066
Se o leitor entrar com uma nova funo com um nome j utilizado, a primeira atribuio
do nome ser apagada da memria e s ficar disponvel a nova definio da funo.
Por exemplo, se entrarmos agora com uma nova definio para o nome "g" a anterior
ser apagada. O leitor pode verificar:
>g:=h>3*h^3;
g:=h3h3
>g(1);
3
>g(2.76);
63.073728
>g(x);
3x3
>g:=x>6*x;
f := x 2 x
g := x 6 x
>m:=x>(f(x)+g(x))/2;
m:=x (f(x)+g(x))/2;
>m(x);
4x
Deste modo o leitor pode definir qualquer operao aritmtica envolvendo funes j
definidas.
Para calcular a composta de f com g , isto , (f{g)(x) podese digitar exatamente a
forma utilizada tradicionalmente na matemtica:
> f(g(x));
25
12x
Exemplo:
>g:=x>x^2;
>f:=x>2*x;
g:= x x2
f:= x 2x
>g(f(x));
4x2
Agora se quisermos definir uma nova funo como sendo a composta de f com g, ento
podemos utilizar o smbolo @ que faz o papel da bolinha na composta de duas
funes.
>h:=x>(f@g)(x);
h=f@g
>h(x);
12x
3.2.1 Funes reconhecidas (usuais)
Existe uma grande quantidade de funes reconhecidas pelo Maple. Para ver a
totalidade das funes prdefinidas utilize o Help do menu principal e dar busca no
tpico inifcn.
As funes mais usadas esto listadas abaixo. Devese lembrar que as variveis
envolvidas podem ser nomeadas pelo leitor.
>
>
>
>
>
>
>
>
>
>
>
>
O Maple, nesta verso, trabalha preferencialmente com logaritmos naturais, tanto faz
digitarmos log ou ln. Caso seja preciso o clculo em outra base, por exemplo , podese
usar o comando log[b](x) . Exemplo:
>log[3](27);
ln(27)/ln(3)
O leitor deve perceber que o Maple transforma outras bases no logartmo natural, para
ver o valor da expresso devese pedir o comando evalf na expresso anterior. O
smbolo % compreendido pelo Maple como a ltima expresso efetuada.
> evalf(%);
26
27
Em muitas situaes necessrio definirse uma funo de uma varivel com vrias
expresses algbricas diferentes, ou seja, uma funo definidas por vrias sentenas.
Neste caso, para definirse a funo utilizase o comando piecewise como nos
exemplos abaixo.
x se x < 0
Defina a funo p( x) =
.
x se x 0
A sintaxe do comando piecewise a seguinte:
piecewise(cond1,f1,cond2,f2,...,condn,fn) ou ainda
piecewise(cond1,f1,cond2,f2,...,condn1,fn1,fn)
A primeira opo utilizada quando se deseja obter cada uma das expresses
exatamente em seus respectivos domnios,
>p:=x> piecewise(x<0,x,x>=0,x);
p:= x piecewise(x < 0, x, x >= 0, x)
>p(x);
x x < 0
0 x
x
otherwise
x
Se, para construir uma nova funo, for necessrio trs definies, podese utilizar do
artifcio de definir as expresses nas componentes infinitas e deixar a definio da
componente limitada como restante. Por exemplo, para entrar com a definio de
2 x x < 0
1 x > 2
> h:=x> piecewise(x<0,2*x,x>Pi/2,1,sin(x));
p:= x piecewise(x < 0, 2x, x >/2, 1, sin(x))
>h(x);
2 x x < 0
1< x
1
2
sin ( x) otherwise
Uma outra forma de montar funes com trs ou mais variaes de domnio fazer a
descrio dos segmentos limitados do domnio utilizando duas desigualdades simples
unidas com o comando and , se por exemplo for necessrio entrar com a funo,
28
2 x
sen( x)
g ( x) =
1
x + 5
x<0
0 x < 2
x<3
x>3
x 0 and x 12 < 0
sin ( x)
x
+
5
3< x
Existe um comando que fica associado ao comando piecewise que o convert. Ele
pode ser utilizado quando se deseja transformar a expresso de uma funo onde
aparecem mdulos, por exemplo, numa expresso piecewise .
Considere o seguinte problema: seja f ( x) =| 1 | x || a funo envolvendo mdulo,
reescrevaa como uma funo definida por sentenas. Procedemos da seguinte forma:
>f:=x>abs(1abs(x));
f:= x 1 x
>convert(f(x),piecewise);
1 x
1 + x
1 x
x 1
x 1
x0
x 1
1< x
x 2
x
2
x
x2
x<2
2 x
29
O comando simplify tambm pode ser utilizado quando se deseja efetuar operaes
entre funes que so definidas por vrias sentenas. Por exemplo, suponhamos que
quisssemos multiplicar a funo w(x) com a ltima funo g(x) definida acima.
>g(x)*w(x);
2 x
sin ( x)
1
x + 5
x 0 and x 12 < 0 x
2
1 x 0 and x-3 < 0
x
2
3< x
x<0
x 2 4 < 0
otherwise
o Maple apenas deixa indicada de forma simblica a multiplicao. Agora para ver o
resultado da multiplicao usamos o simplify:
>simplify(g(x)*w(x));
2 x 3
x 2
2
x0
2 x
1
sin ( x) x x 2
x<2
x
2
x<3
x
0
x=3
3
2
3< x
x + 5 x
p1:=7 x4 3 x3 + 7 x2 3 x
p2:= 5 x5 + 3 x3 + x2 2 x + 1
30
>p1/p2;
7 x 4 3x 3 + 7 x 2 3x
5 x 5 + 3x 3 + x 2 2 x + 1
>convert(%,parfrac,x);
x+
1
1
2
x 1 x
x2 + x5 + 2x4 +1 + x
Para arrumar os termos em ordem decrescente podemos usar o comando sort
>sort(%);
x5 + 2x4 + x2 + x + 1
Dado um polinmio qualquer, o coeficiente dominante desse polinmio o coeficiente
do termo de mais alto grau. O Maple reconhece esse coeficiente, bem como todos os
outros
>p3:=17*x^6+11*x^420*x^3+13*x^23*x+20;
17 x6 + 11 x4 20 x3 + 13 x2 3 x + 20
>lcoeff(p3);
17
>coeffs(p3,x,potencias), potencias;
20, 3, 11, 20, 13, 17
1, x, x4, x3, x2, x6
31
6
Vejamos outros comandos no tratamento com polinmios,
>poly1:= x+x^2x^3+1x^4;
poly1:=x + x2 x3 + 1 x4
>poly2:= x*y+z*x*y+y*x^2z*y*x^2+x+z*x;
poly2:= xy + zxy + yx2 zyx2 + x + zx
>collect(poly2, x);
(y zy) x2 + (y + zy + 1 + z) x
>collect(poly2, z);
(xy yx2 + x) z + xy + yx2 + x
Existem vrias formas de se interpretar o polinmio poly2 acima. Por exemplo,
podemos interpretlo como um polinmio na varivel x, onde todas as outras letras so
consideradas constantes. Para proceder dessa forma utilizamos o comando collect
como no primeiro exemplo. Podemos fazer o mesmo em relao a z, como no segundo
exemplo.
O comando divide abaixo nos diz se a diviso dos polinmios considerados exata.
No caso afirmativo o Maple retorna a palavra true (verdadeiro) e caso contrrio retorna
false (falso).
>divide(x^3y3, xy);
true
>divide(x^3x, x5);
false
Dado um polinmio qualquer s vezes nos interessa saber o valor desse polinmio para
um determinado valor de x. Os exemplos abaixo ilustram como isso pode ser feito.
>poly3:= x^2+3*x4;
poly3:= x2 + 3x 4;
>eval(poly3, x=2);
6
>poly4:= 3*zz^2+2*z3*z+1;
poly4:= 3z z2 + 2z 3z + 1
>eval(poly4,z=sqrt(2));
2 2 1
>g:= x^2+x+1;
g:= x2+x+1
>q:=quo(f,g,x);
q:= x1
>r:=rem(f,g,x);
r:= 2+x
Para confirmar, fazemos gq + r e verificamos se o resultado igual a f.
>expand(g*q+r);
x3+x+1
ou ainda
>testeq(f=g*q+r);
true
o Maple retorna true indicando que a igualdade verdadeira.
Para finalizar, uma outra operao que pode ser realizada no Maple o mximo divisor
comum (greatest common divisor gcd). Dados dois polinmios f e g, um polinmio d
se diz mximo divisor comum de f e g se
d| f e d|g;
i)
ii)
se d 1 tal que d1 | f e d1 | g d1 | d
O clculo do mdc de dois polinmios pode ser efetuado de forma anloga ao processo
utilizado com nmeros inteiros, atravs do mtodo das divises sucessivas. O Maple
realiza esses clculos automaticamente atravs do comando gcd.
>f:= x^5+2*x^35*x^2+3;
f:= x 5 + 2 x 3 5 x 2 + 3
>g:= x^3+5x^2x+3;
g:= x3+5x2x+3
>gcd(f,g);
1
4. Grficos de Funes 2D e 3D
4.1. Grficos em duas dimenses
4.1.1 Grficos de funes
Consideremos uma funo qualquer de uma varivel y = f (x) . O comando para traar
o grfico de f plot o qual possui algumas variaes em sua sintaxe dependendo do
que se deseja traar. A sintaxe bsica a seguinte:
plot(f,h,v,ops)
onde,
f = expresso ou nome da funo;
h = intervalo no eixo das abscissas no qual o grfico ser visualizado;
v = intervalo no eixo das ordenadas que controla a visualizao vertical do
grfico;
ops = opes de visualizao e formatao.
33
34
35
>plot([cos(t)^3,sin(t)^3,t=-Pi..Pi],
framed, title=`curva parametrizada`);
color=blue,
axes=
Coordenadas cartesianas a forma usual utilizada pelo Maple para especificar um ponto
no plano. Existem outras maneiras, dentre elas, o uso de coordenadas polares, (r , ) .
P(r, )
r
O Polo
Eixo Polar
36
possvel no Maple traar diversos grficos de funes de uma s vez, ou seja, em uma
nica tela. Para isso, basta usar o comando plot colocando, no espao reservado para a
funo, uma lista de funes, ou seja,
plot([f1, f2,...,fn],h,v,ops)
Exemplos:
>plot([x,x^2,x^3,x^4,x^5],x=-10..10,y=-10..10);
Para podermos identificar qual funo corresponde ao seu grfico, podemos utilizar as
opes de cores, ordenadas de acordo com a ordem que as funes esto na lista dentro
do comando plot,
>plot([x,x^2,x^3,x^4,x^5],x=-10..10,y=-10..10,
color=
[black, red,blue,yellow,green]);
>plot([x,2*x,3*x,4*x,5*x], x=-5..5,y=-5..5);
>plot([sqrt(x),- sqrt(x), sqrt(-x),- sqrt(-x)],x=-5..5); (na
visualizao do grfico parece estar faltando um pedao, tente arrumar!!).
Tambm possvel utilizando a mesma sintaxe acima, misturar grficos de funes
com grficos de curvas dadas pelas suas equaes paramtricas.
Exemplos:
>plot([x^2,[t^2,t^3,t=-5..5]],x=-5..5,y=-5..5);
>plot([x,-x,[sin(x),cos(x),x=0..2*Pi]],x=-2..2,y=-2..2);
>plot([[sin(x),3*cos(x),x=0..2*Pi],
[3*sin(x),cos(x),x=0..2*Pi],
[sin(x)-cos(x),3*cos(x),
x=0..2*Pi], [3*sin(x), cos(x)+sin(x),x=0..2*Pi]],x=-4..4);
H ainda uma outra forma de traar diversos grficos, incluindo-se a os grficos em
coordenadas polares. Nesse caso temos que nomear cada grfico separadamente e, em
seguida, dar o comando
plots[display]([nomes dos grficos])
para o Maple traar todos eles.
Exemplos:
>g1:=plot(x^2,x=-5..5,y=-5..5):
>g2:=plot([sin(x),3*cos(x),x=0..2*Pi],x=-5..5,y=-5..5):
>g3:=polarplot(t,t=0..4*Pi,numpoints=200):
>plots[display]([g1,g2,g3]);
Obs.: 1) Ao atribuir os nomes dos grficos como g1, g2 e g3 importante finaliz-los
com dois pontos ao invs de ponto e vrgula, pois neste ltimo caso apareceriam na tela
todos os pontos calculados pelo Maple para que este possa traar o grfico.
2) Embora tenhamos colocado, nos grficos g1 e g2 acima, as mesmas variaes pra x e
pra y, cabe observar que o Maple utiliza sempre a maior das variaes colocadas nos
grficos. Por exemplo, se tivssemos colocado
>g1:=plot(x^2,x=-5..5,y=-2..2):
>g2:=plot([sin(x),3*cos(x),x=0..2*Pi],x=-1..1,y=-5..5):
>g3:=polarplot(t,t=0..4*Pi,numpoints=200):
>plots[display]([g1,g2,g3]);
O maple exibiria o eixo x e o eixo y variando de 5 a 5.
37
38
Antes de ver as opes grficas de funes em trs dimenses, vamos recordar a noo
de funo de duas variveis a valores reais.
Seja D um conjunto de pares ordenados de nmeros reais,
ou seja, D IR 2. Uma funo f : D IR , que a cada para
( x, y ) de D associa um nico nmero real, denotado por
f ( x, y ) , denominada funo de duas variveis.
O grfico de f , por definio, o grfico da equao z = f ( x, y ) num sistema
retangular tridimensional, sendo, assim, em geral uma superfcie S de algum tipo.
Representando D por uma regio do plano xy, consideremos um ponto qualquer
( x, y ) D , os valores funcionais f ( x, y ) so as distncias orientadas do plano xy a S.
z
( x, y, f ( x, y ))
S : z = f ( x, y )
( a, b )
( x, y )
Para
traar
o
grfico de uma
funo f ( x, y ) em trs dimenses utilizaremos o comando plot3d, o qual possui a
mesma sintaxe do comando para grficos em duas dimenses,
plot3d(f(x,y),h,v,ops)
onde,
f(x,y) expresso ou nome da funo de duas variveis;
h = intervalo no eixo das abscissas no qual o grfico ser visualizado;
v = intervalo no eixo das ordenadas no qual o grfico ser visualizado;
ops = opes de visualizao e formatao.
Ao contrrio do caso bidimensional, a variao v no comando plot obrigatria, alm
disso, as variaes h e v, caso sejam numricos, formaro um retngulo no plano xy que
ser encarado pelo Maple como a regio D da definio de grfico de funes de duas
variveis.
Exemplo:
> plot3d(9-x^2-y^2,x=-10..10,y=-10..10);
39
Procedendo de forma anloga ao que foi feito no pargrafo 1.1.2 podemos definir a
noo de superfcies no espao, as quais generalizam quelas obtidas por meio da
equao z = f ( x, y ) , ou seja, podemos obter a noo de superfcie parametrizada.
Para traarmos o grfico de uma superfcie na forma paramtrica atravs do Maple,
utilizamos a seguinte sintaxe:
40
onde,
f, g, h so expresses que dependem dos parmetros t e u;
t=a..b intervalo de variao de t;
u=c..d intervalo de variao de u;
ops opes grficas citadas acima.
Exemplos:
> plot3d([x^3,y*x,5*y-x],x=-2..2,y=-2..2);
>plot3d([sin(u),cos(u)*sin(t),sin(t)],
t=-Pi..Pi,u=Pi..Pi);
>plot3d([t*sin(t)*cos(u),t*cos(t)*cos(u),t*sin(u)],t=0..2*P
i, u=0..Pi);
>plot3d([t*sin(t)*cos(u),t*cos(t)*cos(u),t*sin(u)],t=0..2*P
i, u=0..Pi,grid=[50,40], view=[-5 ..5,-6..6,1..3]);
4.2.3 Mltiplos Grficos em 3D
No caso tridimensional tambm possvel traar vrios grficos de uma s vez. S que
neste caso usamos chaves ao invs de colchetes para a lista das expresses.
Exemplos:
>plot3d({x^2+(y^2),x+y},x=-5..5,y=-5..5);
>plot3d({x^2+1/(y^2),cos(x+y)},x=-5..5,y=-5..5,view=[5..5,-5..5,-5..20],grid=[50,50]); (note neste exemplo a necessidade da
opo view=[-5..5,-5..5,-5..20]).
Tambm possvel traar vrios grficos na forma parametrizada, utilizando-se a
sintaxe acima combinada com a sintaxe para grficos na forma paramtrica. Por
exemplo,
>c1:= [cos(x)-2*cos(0.4*y),sin(x)-2*sin(0.4*y),y]:
>c2:= [cos(x)+2*cos(0.4*y),sin(x)+2*sin(0.4*y),y]:
>c3:= [cos(x)+2*sin(0.4*y),sin(x)-2*cos(0.4*y),y]:
>c4:= [cos(x)-2*sin(0.4*y),sin(x)+2*cos(0.4*y),y]:
primeiramente definimos as equaes paramtricas acima, onde cada uma delas um
grfico diferente. O que fizemos acima apenas dar um nome para as equaes para
facilitar na hora de colocar dentro do comando plot3d. Com isso, colocamos
>plot3d({c1,c2,c3,c4},x=0..2*Pi,y=0..10,grid=[25,15]);
Uma curva espacial(no plana) pode ser traada utilizando o comando spacecurve.
O comando spacecurve no carregado pelo Maple automaticamente, ele faz parte
de um pacote especfico de comandos (packages) que devem ser carregados
manualmente quando desejamos utiliz-los e, para isso, digitamos with(plots);
em qualquer linha, onde plots o nome do package da qual o comando spacecurve
faz parte.
>with(plots);
41
>c1:=[t*cos(2*Pi*t),t*sin(2*Pi*t),2+t]:
>c2:=[ 2+t, t*cos(2*Pi*t), t*sin(2*Pi*t)]:
>c3:=[ t*cos(2*Pi*t), 2+t, t*sin(2*Pi*t)]:
>spacecurve({c1,c2,c3},x=-8..12,y=-10..12,axes=boxed,
numpoints=400);
Obs.: atribumos os nomes c1, c2 e c3 cada uma das curvas presentes no grfico
apenas por convenincia, ou ento, para possibilitar melhor visualizao e evitar erros
na digitao da expresses.
Uma outra forma de se obter vrios grficos de uma vez utilizar o comando
display. Da mesma forma este tambm um comando que consta no package plots,
no entanto, uma vez que j o carregamos para usar o comando spacecurve no
precisamos faze-lo novamente, pois o mesmo fica na memria do computador at que a
seo do Maple em que se est trabalhando seja finalizada. Em seguida nomeamos cada
um dos grficos que queremos obter e executamos o comando display. Vejamos todo
esse procedimento no exemplo,
>g1:= plot3d(x^2-y^2,x=-5..5,y=-5..5):
>g2:=plot3d([sin(x),cos(x),y],x=0..2*Pi,y=-20..20):
>display([g1,g2]);
Obs.: Ao atribuir os nomes dos grficos como g1 e g2 importante finaliz-los com
dois pontos ao invs de ponto e vrgula, pois neste ltimo caso apareceriam na tela todos
os pontos calculados pelo Maple para que este possa traar o grfico.
5. Tpicos de Clculo
5.1. Limites
5.1.1 Limites de funes de uma varivel
42
limit((x^3-
Note que neste ltimo exemplo a resposta foi undefined significando que neste caso o
limite no existe (pode-se visualizar isso graficamente).
>f:= x -> (x^(1/3)-2^(1/3))/(x-2);
>Limit(f(x),x=2); limit(f(x),x=2);
>g:= x -> (x^(1/n)-a^(1/n))/(x-a);
>Limit(g(x),x=a);
limit(g(x),x=a);
Nesse ltimo exemplo, pode-se perceber que em determinados casos o Maple tambm
calcula o limite mesmo se a funo contiver certos parmetros indefinidos.
5.1.2 Limites laterais
43
5.2. Derivadas
5.2.1 Derivadas de funes de uma varivel
Quando estamos lidando com funes de uma varivel podemos calcular suas derivadas
atravs do Maple. A sintaxe bsica para o clculo da derivada de uma funo f a
seguinte:
diff(f(x),x)
onde,
f(x) funo ou expresso que se deseja obter a derivada;
x varivel em relao a qual se deseja obter a derivada.
De forma anloga ao que ocorre com o comando de limite se colocarmos o
comando diff iniciando com letra maiscula teremos a derivada na forma simblica, ou
seja, o clculo no efetuado.
Exemplos:
>Diff(x^5-2*x^3+3*x,x);
diff(x^5-2*x^3+3*x,x);
>Diff(1/x+1/x^2+1/x^3+1/x^4,x);
diff(1/x+1/x^2+1/x^3+1/x^4,x);
>Diff(x^(sin(3*x)),x); diff((x^(sin(3*x)),x);
>Diff((1+1/x)^x,x);
diff((1+1/x)^x,x);
>Diff(tan(x)-cot(x),x);
diff(tan(x)-cot(x),x);
>Diff(exp(x^2)+ln(1/x)+sqrt(2*x-x^2),x);
diff(exp(x^2)+ln(1/x)+sqrt(2*x-x^2),x);
>Diff((a+cos(x+b)-ln(a*x))^2,x);
diff((a+cos(x+b)ln(a*x))^2,x);
44
Seja f uma funo derivvel em um certo conjunto I IR, ento podemos definir uma
nova funo f : I IR dada por x
f (x) , denominada funo derivada, ou
simplesmente derivada de f. Com isso, a derivada de f denominada derivada de 2
ordem de f e indicada por f ou f ( 2) . De modo anlogo, define-se as derivadas de
ordem superior a 2 de f.
No Maple se quisermos calcular as derivadas f , f , , f (n ) , podemos utilizar a
seguinte sintaxe:
diff(f(x),x,x,...,x)
n vezes
ou ainda
diff(f(x),x$n)
onde $n significa que a varivel x dever ser repetida n vezes.
Exemplos:
>Diff(3*x^3,x,x);
diff(3*x^3,x,x);
>diff(1/x,x$4);
>diff(sin(x),x,x,x);
>diff(cos(x),x$3);
>diff(sqrt(x),x$4);
interessante observar que dependendo da funo, a n-sima derivada pode ser obtida
de forma dedutiva. Essa deduo pode ser feita com o auxlio do prprio Maple,
vejamos alguns exemplos:
suponha que queiramos calcular f (n ) onde f ( x) = 1x . Para deduzirmos a frmula
podemos colocar algumas derivadas em seqncia para que possamos deduzir a lei de
formao,para isso podemos utilizar um comando j visto, a saber o seq:
> seq(diff(1/x,x$i),i=1..5);
1
1
1
1
1
2 , 2 3 , 6 4 , 24 5 , 120 6
x
x
x
x
x
visualizando desta forma, ou seja, as derivadas todas em seqncia no difcil ver que:
1
f ( n ) = (1) n n! n+1
x
(n )
suponha que queiramos calcular f
onde f ( x) = x . Para deduzirmos a frmula
podemos colocar algumas derivadas em sequncia juntamente com a ordem
correspondente, de forma anloga ao caso anterior utilizando o comando seq:
>seq([diff(sqrt(x),x$i),n=i],i=1..10);
45
1 1
2 x
, n = 1 , 14
1
x
, n = 2, 83
1
x
15
, n = 3, 16
1
x
, n = 4, 105
32
1
x
, n = 5,
945 1
10395 1
64 x112 , n = 6, 128 x132 , n = 7
visualizando dessa forma no difcil deduzir a lei de formao geral da derivada nsima de f ( x) = x :
n 1
( n)
= (1)
(2i 1)
n 1 i =1
1
2 n 1
x 2
2n
Outra situao onde se pode usar os recursos do Maple j vistos em relao aos
grficos, ou seja, podemos traar os grficos de uma funo e suas derivadas
simultaneamente. Por exemplo,
>f:= x-> 1/20*x^5+x^3-2*x^2-3*x+4;
f e suas derivadas (at ordem 5) podem ser colocadas em seqncia:
>f(x),seq(diff(f(x),x$i),i=1..5);
em seguida podemos traar os grficos:
>plot([f(x),seq(diff(f(x),x$i),i=1..5)],
x=-10..10,y=20..20,
color=[red,
blue,
black,
green,
yellow,
pink],numpoints=100);
as opes de cores no comando plot acima so colocadas para se identificar qual o
grfico que corresponde a cada funo e a opo numpoints, para aumentar a resoluo.
Seja f uma funo de duas ou mais variveis, podemos ento calcular as derivadas
parciais de f em relao s suas variveis. A sintaxe para o clculo das derivadas
parciais de f semelhante ao usado para funes de uma varivel:
diff(f(x1, x2,..., xn), var)
onde,
f(x1, x2,..., xn) funo ou expresso em n variveis;
var varivel(is) para (as) qual(is) se deseja calcular a(s) derivada(s) parcial(is).
Exemplo:
>f:= (x,y) -> (x^2+y^2)/(x+y);
>diff(f(x,y),x); (derivada parcial de f com relao a x)
>diff(f(x,y),y); (derivada parcial de f com relao a y)
>diff(f(x,y),x,y); (derivada parcial de f primeiro com relao a x e depois
com relao a y)
>diff(f(x,y),y,x); (derivada parcial de f primeiro com relao a y e depois
com relao a x)
Como observado anteriormente se colocarmos o comando em letra maiscula obteremos
a notao simblica da derivada:
>Diff((x^2-t^2)/(1+sin(3*y)),x,x,y);
t^2)/(1+sin(3*y)),x,x,y);
diff((x^2-
46
>Diff(ln(sqrt((t+v)/(t-v))),t,t,v,v);
diff(ln(sqrt((t+v)/(t-v))),t,t,v,v);
5.3. Integrais
Dada uma funo f de uma de uma varivel podemos utilizar o Maple para o clculo da
integral de f. Os comandos para o clculo da integral indefinida e definida so dados
respectivamente por:
int(f(x),x) e int(f(x),x=a..b)
onde,
f(x) funo ou expresso a ser integrada;
x varivel de integrao;
x=a..b limites de integrao(no caso de integrais definidas).
Nos comando acima, se o Maple encontra uma soluo para a integral ele
automaticamente retorna a soluo. Caso no seja possvel encontrar a soluo o Maple
retorna a prpria expresso digitada na forma simblica. Alis, para se obter a integral
na forma simblica usual da matemtica basta colocar os comandos com a letra inicial
em maiscula(tanto no caso de integral definida quanto indefinida).
Exemplos:
>Int(x^n,x)= int(x^n,x);
>Int(exp(n*x),x)=int(exp(n*x),x);
>Int(1/x,x)=int(1/x,x);
>Int(sqrt(a^2+u^2),u)= int(sqrt(a^2+u^2),u);
>Int(x^2/((a+b*x)^2),x)= int(x^2/((a+b*x)^2),x);
>Int(u^6*cos(u),u)= int(u^6*cos(u),u);
Podemos perceber que a presena de constantes no integrando perfeitamente possvel,
da a necessidade de se indicar a varivel de integrao. Nos exemplos acima todas as
integrais so indefinidas com isso, pode-se tambm notar que o Maple no exibe a
constante de integrao. Vejamos alguns exemplos de integrais definidas:
>Int((x^2+2*x)/(x^4+3*x^2+x),x=-0.2..3)=
int((x^2+2*x)/(x^4+3*x^2+x),x=-0.2..3);
>Int(sqrt(x),x=0..4)= int(sqrt(x),x=0..4);
>Int((1+t^2)/t^4)= int((1+t^2)/t^4);
>Int(sin(x)*cos(x)^2,x=0..Pi/3)=
int(sin(x)*cos(x)^2,x=0..Pi/3);
>Int(x^3/(16+x^4),x=-2..2)= int(x^3/(16+x^4),x=-2..2);
Sabe-se que a rea sob o grfico de uma funo f contnua em um intervalo [a, b]
definida como
>Int(1/2+1/2*cos(2*x),x=0..Pi/2)=
int(1/2+1/2*cos(2*x),x=0..Pi/2);
>plot(1/2+1/2*cos(2*x),x=0..Pi/2);
>Int(1/3*exp(3*x)+sin(3*x),x=-1..0)=
int(1/3*exp(3*x)+sin(3*x),x=-1..0);
> plot(1/3*exp(3*x)+sin(3*x),x=-1..0);
Obs.: o preenchimento na cor cinza nos grficos acima, no foi gerado pelo Maple, no
entanto a regio perfeitamente deduzida quando traamos o grfico no Maple.
Como foi dito acima quando o Maple no encontra a forma exata da soluo de uma
integral ele retorna a prpria integral.
>Int(1/x,x=-1..1)= int(1/x,x=-1..1);
>Int(x^ln(x),x):=int(x^ln(x),x);
5.3.1 Integrais Mltiplas
48
>Int(Int(2*y*cos(x),x=Pi/6..y^2),y=1..3)=
int(int(2*y*cos(x),x=Pi/6..y^2),y=1..3);
>Int(Int(x^2+4*y^2,y=x^2..-x^2+8),x=0..2)=
int(int(x^2+4*y^2,y=x^2..-x^2+8),x=0..2);
H uma interpretao geomtrica para integrais
duplas, quando se tem uma funo f ( x, y ) 0 e
contnua em toda uma regio R do plano. Denotando
por S o grfico de f e por T o slido abaixo de S e
acima de R, teremos que o volume de T dado por:
V = f ( x, y ) dA
z
S
y = t * x ^ 2 + (1 t ) * ( x ^ 2 + 8) 0 t 1
z = 0
49
6. Tpicos de Programao
6.1. Fundamentos
O Maple possui uma poderosa capacidade de programao matemtica. Um
procedimento (ou programa) no Maple essencialmente um conjunto de comandos (do
prprio Maple ou comandos usuais de programao) organizados em uma certa
estrutura lgica que so executados pelo Maple, dependendo das necessidades do
usurio. Os procedimentos implementados no Maple podem fazer uso de todos os
comandos internos (incluindo os dos packages), ou seja, voc pode construir seus
procedimentos utilizando todas as estruturas e funes do Maple.
Todo procedimento no Maple tem basicamente a seguinte configurao:
nome:= proc(...)
local x1, x2,...,xn;
global x1, x2,...,xn;
.....................
.....................
end;
ou seja, todo procedimento deve iniciar com o comando proc(...) e finalizar com o
comando end; (ou :). As reticncias nos parnteses representam as entradas de dados
os quais denominaremos de parmetros (no necessariamente precisam ser
especificados, ou seja, os parnteses podem ficar em branco). Para que se possa utilizar
um procedimento conveniente dar-lhe um nome, e isso feito utilizando a maneira
usual de atribuio de nomes no Maple.
Vejamos um exemplo,
>metade:= proc(x);
>evalf(x/2);
>end;
Esse Procedimento pega um valor de x e calcula o valor aproximado desse nmero
dividido por 2. Para executar esse procedimento basta utiliz-lo como um comando
qualquer do Maple,
>metade(1/2);
>metade (10);
>metade(sqrt(3));
Outro exemplo:
>val_e:=proc()
>a:=exp(1);
>evalf(a);
>end;
O procedimentos val_e d uma aproximao, em decimais, do nmero e,
>val_e();
Note que nesse procedimento nenhuma entrada de dados necessria.
Obs.: Dentro de um procedimento, comandos isolados devem terminar com ponto e
vrgula.
50
Quando definimos o procedimento val_e acima, note que o Maple exibe um aviso
Warning, `a` is implicitly declared local. Esse aviso refere-se ao fato de
termos usado uma varivel dentro do procedimento (no caso a varivel a). H dois tipos
de variveis que podem ser definidas no Maple, varivel local e varivel global.
Basicamente, variveis locais so aquelas que voc define dentro de um procedimento e
cujo valor usado pelo Maple apenas dentro deste procedimento, enquanto que
variveis globais so aquelas que so atribudas dentro de um procedimento e que
passam a ter esse valor atribudo mesmo fora do procedimento. Logo no incio de um
procedimento podemos definir quais variveis so locais e/ou quais so globais, basta
colocar na linha seguinte ao comando proc a opo local nome das variveis
locais e/ou global nome das variveis globais, conforme o modelo geral de um
procedimento visto acima. Quando no fazemos essa especificao o Maple decide
internamente o tipo das variveis e exibe um aviso (como ocorreu no procedimento
val_e acima).
Vejamos um exemplo, que ilustra a diferena entre os tipos de variveis:
>b:=2;
>val_e:=proc()
>local b;
>b:=exp(1);
>evalf(b);
>end;
Note que dentro do procedimento b foi definido como varivel local e lhe foi atribudo o
valor exp(1), no entanto ao usarmos novamente o valor b fora do procedimento este
permanece com o mesmo valor
>val_e();
>b;
Vejamos agora a diferena se fizermos,
>b:=2;
>val_e:=proc()
>global b;
>b:=exp(1);
>evalf(b);
>end;
Note que dentro do procedimento b foi definido como varivel global e lhe foi atribudo
o valor exp(1), com isso, ao usarmos novamente o valor b fora do procedimento este
j est com valor alterado
>val_e();
>b;
Observao: Todos os procedimentos constantes neste texto so apenas ilustrativos, ou
seja, objetivam ilustrar apenas os recursos de programao. No se tem
nenhuma preocupao com relao ao rigor dos procedimentos e em
relao preveno de erros.
51
A sintaxe geral no Maple para essa estrutura de programao, conhecida como loop,
a seguinte:
for i from a to b by c do ... od;
onde,
i a varivel do loop;
a valor inicial;
b valor final;
c o salto que a varivel sofre a cada passo do loop;
... expresso(es) a ser(erem) executadas(s) pelo loop.
Na estrutura deste comando algumas das clusulas em vermelho so opcionais. Se, por
exemplo, omitirmos o from ou o by eles sero automaticamente considerados como 1
pelo Maple. Necessariamente todo loop deve terminar com a clusula od.
Vejamos alguns exemplos:
Problema: calcular a soma dos 100 primeiros nmeros naturais.
Vejamos como resolver esse problema usando o loop.
>a:=0
>for i from 1 to 100 do
>a:=a+i;
>od;
52
>soma(100);
>soma(20);
6.2.2 O Comando if
real.
>modulo:=proc(x)
> if x>=0 then
> x;
> else
> -x;
> fi;
>end;
>modulo(-3);
>modulo(-3/2);
f ( x) =
2 x se 1 < x 2
0 se x > 2
atravs de um procedimento.
>f:=proc(x)
> if x<=0 then 0 else
> if x<=1 then x else
>
if x<=2 then 2-x else
>
if x>2 then 0
>
fi;
>
fi;
> fi;
> fi;
>end;
53
notamos que o Maple retornou um erro pois se analisarmos o algoritmo vemos que no
possvel para o Maple saber se x maior ou menor que zero. Veremos mais adiante
como controlar as entradas de parmetros dos procedimentos para evitar certos erros.
6.2.3 O Comando while
54
0
o que no a resposta correta pois o valor de x no conhecido.
Uma forma de contornar esse tipo de problema e avisar ao usurio o tipo correto de
entrada que o procedimento aceita, definir logo no incio com que parmetro o
procedimento trabalhar. Para isso, dentro do comando proc colocamos a opo ::
... logo aps o parmetro, onde no lugar das reticncias deve-se colocar a opo
desejada. Para uma lista dos tipos disponveis digite ?type; no prompt do Maple.
Por exemplo, poderamos reescrever o procedimento ndiv2 da seguinte forma:
>ndiv2:=proc(n::integer)
>local q, i;
>q:=n; i:=0
>if irem(q,2)<>0 then i else
> while irem(q,2)=0 do
>
q:=iquo(q,2);
>
i:=i+1;
> od;
>fi;
>end;
55
Obs.: A forma com que o procedimento Fibonacci foi construdo, ilustra o fato de que
podemos utilizar dentro de um procedimento o prprio procedimento que
estamos construindo.
Fibonacci(3)
Fibonacci(2)
Fibonacci(1)
Fibonacci(1)
Fibonacci(2)
Fibonacci(1)
Fibonacci(0)
Fibonacci(0)
56
Neste procedimento um erro pode ocorrer caso venhamos a colocar uma lista vazia,
media([]). Para tornar um procedimento mais expressivo no tratamento de erros
podemos utilizar o comando ERROR para especificar exatamente qual o tipo de erro
que ocorreu. Vejamos:
>media2:=proc(x::list)
>local i,n,soma;
>n:=nops(x)
>if n=0 then
>ERROR(a lista no possui nenhum elemento);
>soma:=add(i,i=x);
>soma/n;
>end;
Note que essa mesma tcnica de exibir erros tambm pode ser usada para substituirmos
a mensagem de erro que exibida pelo Maple caso x no seja uma lista, por uma
mensagem nossa. Dessa forma no precisaramos colocar a opo ::list no comando
proc.
>media2:=proc(x)
57
58
Note que um erro ocorre, pois dentro do procedimento o f lido pelo Maple como uma
constante e no uma funo. Podemos arrumar o procedimento para evitar esse tipo de
erro.
>Newton2:=proc(f::{procedure,algebraic},y,n)
>local x0,interac;
>x0:=y;
>if type(f,procedure) then
> interac:=(x->x)-eval(f)/D(eval(f));
> else
> interac:=unapply(x-f/diff(f,x),x);
>fi;
> to n do
>
print(x0);
>
x0:=evalf(interac(x0)) od;
> end:
Finalizamos ento essa seo colocando que os aspectos acima so iniciais e bsicos,
aspectos mais gerais e tcnicos podem ser consultados nas bibliografias que tratam do
assunto. Por outro lado, a exposio acima suficiente para muitos propsitos e a
aplicao ou no destes conceitos depender das necessidades de cada um.
7. Bibliografia
HEAL, K. M.,...[et al]. MAPLE V: Learnig guide. Springer-Verlag, 1998.
HECK, Andr. Introduction to Maple. New York, Springer-Verlag, 1993.
MONAGAN, M. B., [et al]. MAPLE V: Programming Guide. Springer-Verlag, 1998.
SWOKOWSKI, Earl William. O clculo com Geometria Analtica. So Paulo: McGraw-Hill.
Vol 1 e 2.
59