Você está na página 1de 85

Aplicaes de Maple em Clculo e lgebra Linear

Fernando Deeke Sasse fsasse@alumni.uwaterloo.ca Departamento de Matemtica, UDESC - Joinville

1 Introduo
O Maple foi criado nos anos 80 pelos matemticos Keith Geddes e Gaston Gonnet, na Universidade Waterloo e considerado uma plataforma de computao algbrica genrica com slida base matemtica. Computao algbrica o mesmo que computao simblica, ou seja, computao envolvendo a manipulao de smbolos. A computao numrica tambm pode ser realizada pelo Maple, embora de forma mais lenta do que programas tradicionais, como Fortran e C. A integrao numrica/simblica e a excelncia da sua linguagem de programao, fazem com que o Maple sirva muito bem como uma ferramenta de criao de prottipos de programas. H vrios anos o Maple vem sendo desenvolvido em vrias partes do mundo, graas ao fato dele ser construdo sobre sua prpria linguagem, no compilada. Somente um pequeno ncleo bsico compilado, por razes de velocidade.

2 Grficos
Esta seo foi baseada em parte nas worksheets de Peter Stone, School of Life and Physical Sciences, RMIT. 2.1 plot,implicitplot,with(plots),display,seq O comando do Maple plot pode ser utilizado para traar grficos. Sua versatilidade reside no fato de que ele pode lidar com vrias formas de parmetros de entrada. Os seguintes comandos fazem o grfico da funo y = x4 K4 x3 C3 de x = K a x = 2. 2 O intervalos que a varivel x pode assumir especificada na forma mostrada, utilizando dois pontos .. e constitui uma estrutura de dados do Maple denominada range. Inicialmente definimos a expresso: O restart: O y:=x^4-4*x^3+3; y := x4 K4 x3 C3 (2.1.1) O plot(y,x=-2..2);

50 40 30 20 10

K 2

K 1 K 10

1 x

Para rotular tambm o eixo vertical com um y, digitamos: O plot(y,x=-2..2,'y');

50 40 30 y 20 10

K 2

K 1 K 10

1 x

Podemos restringir ou estender o grfico na direo vertical digitando o intervalo de valores para y: O plot(y,x=-2..2,'y'=-10..10);

10

K 2

K 1

1 x

K 5

K 10
Podemos escolher a cor do grfico adicionando uma opo do tipo color=??. ou colour=??. O plot(y,x=-2..2,'y',colour=magenta);

50 40 30 y 20 10

K 2

K 1 K 10

1 x

As escolhas para a opo colour so: aquamarine, black, blue, coral, cyan, brown, gold, green, grey, khaki, magenta, maroon, navy, orange, pink, plum, red, sienna, tan, turquoise,

violet, wheat, white, yellow. Podemos escolher a cor definindo-a em termos de componentes de vermelho, verde e azul (RGB) . O plot(y,x=-4..4,color=COLOR(RGB,.7,0,0.8));

500 400 300 200 100

K 4

K 3

K 2

K 1

2 x

Podemos dar nome cor: O purpura := COLOR(RGB,.7,0,1); plot(x^2,x=-4..4,color=purpura); purpura := COLOR RGB, 0.7, 0, 1

16 14 12 10 8 6 4 2 K 4 K 3 K 2 K 1 0 1 2 x 3 4

Alternativamente possvel usar uma macro.

O macro(darkgreen=COLOR(RGB,0,0.6,0)); plot(x^2,x=-4..4,color=darkgreen); darkgreen

16 14 12 10 8 6 4 2 K 4 K 3 K 2 K 1 0 1 2 x 3 4

Grficos simultneos podem ser construdos definindo uma lista de expresses, cujos grficos queremos traar: O [x^2,x+1]; 2 x , x C1 (2.1.2) O plot([x^2,x+1],x=-2..2,'y');

4 3 y 2 1

K 2

K 1

0 K 1

1 x

Podemos escolher as cores dos grficos definindo a respectiva lista de cores: . O plot([x^2,x+1],x=-2..2,'y',color=[blue,green]);

4 3 y 2 1

K 2

K 1

0 K 1

1 x

Note que usamos aspas simples para retardar a avaliao de y, que j tem um valor atribudo. O seguinte exemplo mostra um tipo de erro devido ao fato da varivel j ter um valor atribudo: O x := 5; plot(2*x-x^2,x=-1..3); x := 5
Error, (in plot) unexpected option: 5 = -1 .. 3

Este problema pode ser resolvido removendo a atribuio de x: O x := 'x': plot(2*x-x^2,x=-1..3);

K 1

0 K 1

1 x

K 2

K 3
Podemos atribuir nomes aos grficos, para depois exibi-los. Antes disso devemos carregar a bibliteca plots: O with(plots): O g1:=plot(sin(x)^2,x=-Pi..Pi,color=blue): O g2:=plot(sin(x^2),x=-Pi..Pi):

O display([g2,g1]);

1 0.8 0.6 0.4 0.2 K 3 K 2 K 1 K 0.2 K 0.4 K 0.6 K 0.8 1 x 2 3

Os grficos so desenhados com a espessura de um pixel, a menos que uma espessura maior que 1 seja especificada com a opo "thickness" . O plot(2*x-x^2,x=-1..3,thickness=2);

K 1

0 K 1 K 2 K 3

1 x

Para plotar funes parametrizadas o procedimento o seguinte: O plot([t*cos(2*Pi*t), t*sin(2*Pi*t), t=0..4], scaling= constrained, axes=box);

3 2 1 0 K 1 K 2 K 3 K 3 K 2 K 1 0 1 2 3 4

Grficos de funes definidas implicitamente podem ser traados com o comando implicitplot: O implicitplot(sin(x*y)+y=2,x=-6..6,y=0..4);

4 3 x4 K4 x3 C3 2 1 0

1.5

2 x

2.5

3.5

O implicitplot(sin(x*y)+y=2,x=-6..6,y=0..4,numpoints=10000);

4 3 x4 K4 x3 C3 2 1 0

1.5

2 x

2.5

3.5

As coordenadas de um ponto podem ser representadas em Maple por meio de uma lista com dois nmeros. Por exemplo, o ponto (1,2) escrito como [1,2]. Definimos a seguir a lista de pontos dados por K 2 , K K , 1, 2 , 2, 3 . 2, 1, 2 O mypoints := [[-2,2],[-1,-2],[1,2],[2,3]]; mypoints := K 2 , K K , 1, 2 , 2, 3 2, 1, 2 Podemos plotar estes pontos em grfico usando plot. O plot(mypoints,style=point);

(2.1.3)

K 2

K 1

0 K 1

K 2
As escolhas das cores so as mesmas que foram definidas para plotar grficos. Os smbolos podem ser escolhidos como box, cross, circle, point, e diamond. Voc pode tambm digiter estes tipos de pontos em maisculas, BOX,CROSS,CIRCLE, POINT,DIAMOND, mas no misture maisculas e minsculas. O plot(mypoints,style=point,colour=blue,symbol=circle);

K 2

K 1

0 K 1

K 2
Mais informaes sobre as opes para o procedimento plot podem ser obtidas na pgina help associada. .

Os trs modos de acesso pgina de ajuda para as opes de plot so Clique no hyperlink: plot[options]. Selecione a palavra plot[options] com o mouse e escolha Help on "plot[options]" que deve aparecer na segunda linha do menu help. Digite ?plot[options] em uma linha de comando e execute. O ?plot[options] A sequncia de nmeros 1, 4, 9, 16, 25, . . . , 100 de todos os quadrados dos nmeros de 1 a 10 podem ser construdos usando o procedimento seq. O seq(i^2,i=1..10); 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

(2.1.4)

Esta sequncia pode ser transformada em uma lista colocando colchtes em torno do comando O [seq(i^2,i=1..10)]; 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

(2.1.5)

O seguintes comandos plotam os pontos 0, 1 , 1, 3 , 2, 5 , 3, 7 , 4, 9 , 5, 11 , 6, 13 . Estes pontos tem a forma k, 2 k C1 onde os parmetro k toma valores todos os valores inteiros de t 0 a 6 inclusive, de modo que podemos usar seq. A opo view pode ser utilizada para especificar o intervalo vertical a ser empregado no plot. O point_list := [seq([k,2*k+1],k=0..6)]; point_list := 0, 1 , 1, 3 , 2, 5 , 3, 7 , 4, 9 , 5, 11 , 6, 13 (2.1.6)

O plot(point_list,style=point,symbol=box,color=brown,view=0. .13);

12 10 8 6 4 2 0 0 1 2 3 4 5 6

2.2 pointplot,pointplot3d Outro modo de fazer grfico com pontos atravs do comando pointplot: O restart: O with(plots): O pointlist:=[[1,2],[2,6],[4,4],[3,2]]; pointlist := 1, 2 , 2, 6 , 4, 4 , 3, 2

(2.2.1)

A opo connect=true pode ser utilizada para conectar os pontos por segmentos ou curvas: O pointplot(pointlist,color=blue,connect=true);

6 5 4 3 2

Tambm podemos fazer grficos de pontos em trs dimenses:

O points:= [ seq([cos(Pi*T/40),sin(Pi*T/40),T/40],T=0..40) ]: O pointplot3d(points,axes=boxed,connect=true);

0.0 0.5 1.0 1.0 -1 0.5 0 0.0 1

2.3 plot3d,implicitplot3d Maple pode tambm plotar grficos em 3D. A superfcie pode ser girada com o mouse. O restart: O plot3d(x^2+y^2,x=-2..2,y=-2..2,axes=boxed);

8 6 4 2 0 2 -2 -1

0 y 0 x

1 -1

2 -2

Quando temos uma funo definida implicitamente, podemos utilizar o comamdo implictplot3D: O implicitplot3d(sin(x*y)+y*z^2-z,x=-1..1,y=-1..1,z=-1..1, axes=boxed); implicitplot3d sin x y Cy z2 Kz, x = K ..1, y = K ..1, z = K ..1, axes = boxed 1 1 1 (2.3.1) O implicitplot3d(x^3+y^3+z^3+1=(x+y+z+1)^3, x=-2..2, y=-2..2, z=-2..2, grid=[10,10,10],axes=frame); 3 3 3 3 implicitplot3d x Cy Cz C1 = x Cy Cz C1 , x = K ..2, y = K ..2, z = K ..2, grid (2.3.2) 2 2 2 = 10, 10, 10 , axes = frame No seguinte exemplo utilizamos coordenadas esfricas: O implicitplot3d(r=(3)^x*sin(y), r=0.1..5, x=-1..2*Pi, y=0.. Pi, coords=spherical); implicitplot3d r = 3x sin y , r = 0.1 ..5, x = K ..2 , y = 0 .., coords = spherical 1 (2.3.3)

Agora utilizamos coordenadas cilndricas: O implicitplot3d(r^2+z^2=1, r=0..1, theta=-Pi..Pi, z=-1..1, coords=cylindrical,axes=frame); implicitplot3d r2 Cz2 = 1, r = 0 ..1, = K .., z = K ..1, coords = cylindrical, axes 1 (2.3.4) = frame No seguinte exemplo tivemos que aumentar o nmero mnimo total de pontos utilizado para gerar grfico para a obteno de um resultado satisfatrio (default 625 = 25^2): O implicitplot3d([y=sin(x*z+6), y=cos(-x*z)], x=-Pi..Pi, y=Pi..Pi, z=-1..1,color=[blue,red],axes=frame, numpoints= 2000); implicitplot3d y = sin x z C6 , y = cos x z , x = K .., y = K .., z = K ..1, color 1 (2.3.5)

= blue, red , axes = frame, numpoints = 2000 No prximo exemplo usamos a opo scaling=constrained que faz com que as escalas dos diferentes eixos sejam as mesmas. O implicitplot3d([(x+2)^3+(y+2)^2+(z+2)^2=9, (x-2)^2+(y-2)^2+ (z-2)^2=15], x=-5..7, y=-8..8, z=-8..7, color=[blue,green], scaling=constrained, axes=boxed); implicitplot3d x C2 3 C y C2 2 C z C2 2 = 9, x K2 2 C y K2 2 C z K2 2 (2.3.6) = 15 , x = K ..7, y = K ..8, z = K ..7, color = blue, green , scaling = constrained, 5 8 8 axes = boxed Para ver a diferena, modifique esta opo para scaling=unconstrained (default). 2.3 polygonplot,polygonplot3d,with(plottools),animate O procedimento polygonplot, que logo abaixo utilizado para plotar o tringulo (cheio) com

vrtices em 0, 0 , 0, 1 , 1, 1 and 1, 0 : O with(plots); animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d, conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d, densityplot, display, dualaxisplot, fieldplot, fieldplot3d, gradplot, gradplot3d, graphplot3d, implicitplot, implicitplot3d, inequal, interactive, interactiveparams, intersectplot, listcontplot, listcontplot3d, listdensityplot, listplot, listplot3d, loglogplot, logplot, matrixplot, multiple, odeplot, pareto, plotcompare, pointplot, pointplot3d, polarplot, polygonplot, polygonplot3d, polyhedra_supported, polyhedraplot, rootlocus, semilogplot, setcolors, setoptions, setoptions3d, spacecurve, sparsematrixplot, surfdata, textplot, textplot3d, tubeplot O triangle := [[0,0],[0,1],[.5,1]]: polygonplot(triangle,axes=none,color=orange);

(2.4.1)

O ngon := n -> [seq([cos(2*Pi*i/n), sin(2*Pi*i/n)], i = 1..n) ]; 2i 2i ngon := n/ seq cos , sin , i = 1 ..n (2.4.2) n n O display([polygonplot(ngon(5)), textplot([0,0,`Octagon`])], color=magenta);

0.8 0.6 0.4 0.2 K 0.8K 0.4 0.6K Octagon 0.2 0.4 0.6 0.8 1 K 0.2 K 0.4 K 0.6 K 0.8

O pacote plots tambm contm o procedimento polygonplot3d que pode ser usado da seguinte forma pra traar um cubo: O plots[polygonplot3d]([[[0,0,0],[1,0,0],[1,1,0],[0,1,0]], [[0,0,1],[1,0,1],[1,1,1],[0,1,1]], [[0,0,0],[0,1,0],[0,1,1],[0,0,1]], [[1,0,0],[1,1,0],[1,1,1],[1,0,1]], [[0,0,0],[1,0,0],[1,0,1],[0,0,1]], [[0,1,0],[1,1,0],[1,1,1],[0,1,1]]], lightmodel=light4,scaling=constrained,style=patchnogrid);

Alguns objetos geomtricos em 3D, assim como as operaes de reflexo, rotao e translao destes objetos so encontrados no pacote plottools. Note que este pacote deve ser carregado junto plots. O with(plottools); arc, arrow, circle, cone, cuboid, curve, cutin, cutout, cylinder, disk, dodecahedron, (2.4.3) ellipse, ellipticArc, hemisphere, hexahedron, homothety, hyperbola, icosahedron, line, octahedron, parallelepiped, pieslice, point, polygon, project, rectangle, reflect, rotate, scale, semitorus, sphere, stellate, tetrahedron, torus, transform, translate, vrml O C1 := cone([0,0,0], 1/2, 2): O display( C1,axes=frame );

-0.5 0.0 2.0 1.5 1.0 0.5 0.0 0.5 0.0 0.5 -0.5

Note que a manipulao do grfico admite dois graus de liberdade de rotao. No caso acima, no conseguimos fazer o vrtice do cone apontar na direo horizontal. No entanto, ao aplicar uma rotao de com relao a um dos eixos do plano ortogonal ao eixo de simetria do cone temos 2 O C2:=rotate(C1,Pi/2,0,0): O display(C2,axes=frame,scaling=unconstrained);

0.0 0.5 1.0 0.5 0.25 0.0 -0.25 0.25 -0.5 0.5 0.0 -0.25 1.5 2.0 -0.5

Mesmo com dois graus de liberdade somente podemos agora fazer o vrtice apontar em qualquer uma das trs direes espaciais . Por qu ? Faamos um objeto composto: O sorvete := cone([0,0,-2],0.7,2,color=tan), sphere([0,0,0.1],0.68,color=wheat): O plots[display](sorvete, scaling=constrained);

O f := dodecahedron([0,0,0],0.8), torus([1,1,1], 0.5, 1.4): plots[display](f,orientation=[45,0],scaling=constrained);

Tente colocar o dodecaedro no centro do toro. 2.4 animate

Grficos podem ser animados. O animate( 3*exp(-0.2*t-x^2)*sin(Pi*(x+t)),x=-5..5,t=0..20, view=[-3..3,-3..3],axes=normal, frames=50,numpoints=500);

3 2 1

K 3

K 2

K 1

0 K 1 K 2 K 3

1 x

Este comando pode ser utilizado tambm em 3D: O animate( plot3d, [sin(t)*(x^2+y^2), x=-2..2, y=-2..2], t=0. .2*Pi,axes=boxed );

t = 0.

-2 -1 0 7 2 -1 -3 1 -8 2 0 x y 1 2 -2

O ; 2.5 Exerccios 4 3 2 1. Plote a curva y = x K4 x Kx C5 x K1 para mostrar as principais caractersticas do grfico. Em particular, certifique-se que todas as interseces e pontos de retorno apaream no figura. A 4 3 2 equao x K4 x Kx C5 x K1 = 0 possui alguma soluo inteira? Explique. 2. (a) Plote o grfico de y = x sin 60 x no intervalo de x = 0 a x = 3 usando a opo "numpoints" , se necessrio, para obter um bom resultado. (b) Plote as curvas y = x sin 60 x , y = x e y = K x simultaneamente para mostrar como a curva y = x sin 60 x est "presa" entre as curvas y = x e y = K x . 3. Plote the grficos dados pelas equaes abaixo. Em cada caso escolha um intervalo conveniente que mostre as principais caractersticas do grfico. I (a) y = x2 K5 x K3 (b) y = x3 Kx (c) y2 = x (d) x2 Ky2 = 2 Para o grfico em (d), mostre tambm as assntotas y = x e y = K . x

juntas. Experimente diferentes intervalos x K2 2 para y de modo que ambos grficos sejam mostrados de forma satisfatria. 5. Faa o mesmo com f x = sec x C4 no intervalo 0, 2 . 6. Estime graficamente onde as funes definidas por f x = 20 Kx e h x = 1.012 se interceptam. n 7. Faa grficos comparativos das funes y = x , para diferentes valores de n. Faa uma animao. 8. Faa o grfico simultneo das superfcies definidas por sin x y Ccos z C2 = 0 e x C2 y Kx = 3. 9. Faa o grfico das seguintes funes parametrizadas: t2 K1 2t (a) r t = 2 , 2 , para t pertencendo a K ..N . N t C1 t C1 4 t3 14 t2 t 4 t3 t2 14 t (b) r t = K C C1, K K C , para t pertencendo a (0,1) 9 9 9 9 9 9 10. Desenhe um pentgono inscrito numa circunferncia. 11. Desenho um toro que possa ser interativamente orientado em qualquer direo espacial. 12. Plote o Folium, que definido como o grfico em coordenadas polares de seguinte funo radial: cos 4 sin K1 . Utilize a opo coords=polar (veja exemplos no menu help) para traar o grfico em coordenadas polares.
2 x

4. Plote as funes y = x K5 x C6 e y =

3 Expresses e Funes 3.1 Seta, eval


Ao usar Maple importante distinguir cuidadosamente expresses e funes. Por exemplo, x2 K4 x C3 and x C2 so funes na varivel x. Elas so introduzidas como j fizemos antes, atribuindo nomes se necessrio: O x^2-4*x+3;h:=sqrt(x)+2; x2 K4 x C3 h := x C2 (3.1.1) Em matemtica utilizamos tais expresses para definir funes, como f x = x2 K4 x C3 e g x = x C2. Em Maple as funes f e g devem ser entendidas agora de uma forma bastante precisa, como nomes de aes ou procedimentos associados com valores computados destas expresses para um dado nmero de entrada x. No Maple funes so facilmente definidas utilizado a seta. Por exemplo, O f := x -> x^2-4*x+3; f := x/x2 K4 x C3 (3.1.2)

Uma vez que tal comando foi executado a funo f pode ser utilizada durante a seo como qualquer outra funo definida previamente. Assim, O f(1/2); 5 (3.1.3) 4 O f(3); 0 (3.1.4)

Entradas simblicas tambm podem ser utilizadas. O f(s); 2 s K4 s C3 O f(s+1); s C1 A funo pode plotada: O plot(f(x),x=0..4);
2

(3.1.5) (3.1.6)

K4 s K1

2 x

K 1
ou O plot(f,0..4);

K 1
Outras funes podem ser definidas em termo de f: O g := x -> f(x-1); h := x -> f(x-2); g := x/f x K1 h := x/f x K2 (3.1.7)

O plot([f(x),g(x),h(x)],x=0..6,y=-1..3,color=[red,aquamarine, gold],thickness=2);

2 y 1

3 x

K 1
Uma vez que a funo foi definida, o Maple lembrar desta funo durante toda a seo. possvel sobrescrever a definio de uma funo com uma nova definio. Por exemplo, se queremos mudar a definio da funo f x = executar o comando: x , devemos digitar e x C1
2

O f := x -> x/(x^2+1); f := x/ x x C1
2

(3.1.8)

A presente (nova) definio da funo f pode ser confirmada da seguinte forma: O f(x); x x C1
2

(3.1.9)

ou, utilizando o comando de avaliao, O eval(f); x/ x x C1


2

(3.1.10)

Digitando simplesmente f; em uma linha de comando no suficiente: O f; f Note: Note que com a nova definio de f, g e h tamb, mudam: O g(x); x K1 x K1 2 C1 O h(x); x K2 x K2
2

(3.1.11)

(3.1.12)

C1

(3.1.13)

No entanto, a aplicao de eval a g confirma as definies de g in termos de f, mas no diz nada sobre f: O eval(g); x/f x K1 (3.1.14) O plot([f(x),g(x),h(x)],x=-5..7,color=[red,aquamarine,gold], thickness=2);

0.4 0.2

K 4

K 2

0 K 0.2 K 0.4

2 x

Para limpar a atribuio de f sem redefini-lo fazemos O f := 'f'; f := f

(3.1.15)

Um certo nmero de funes, digamos, f, g, h, podem ter suas atribuies limpadas simultaneamente: O unassign('f','g','h'); Para economizar memria sempre bom limpar as atribuies de funes e variveis, ao iniciar um novo problema. Alternativamente podemos sempre usar restart; para limpar tudo da memria.

3.2 unapply, map


Uma expresso como O F:= x^2-4*x+3; F := x2 K4 x C3 (3.2.1)

pode ser transformada em uma funo com o comando unapply: O f:=unapply(F,x); f := x/x2 K4 x C3 Podemos calcular o valor da funo em x = 3, por exemplo, de dois modos. O f(3); 0 O eval(F,x=3); 0

(3.2.2)

(3.2.3) (3.2.4)

O comando subs pode ser tambm usado para avaliar a expresso num dado ponto: O subs(x=3,F); 0

(3.2.5)

O procedimento de Maple map um exemplo de procedimento que funciona somente com funes e no expresses. O g := x -> x^2; map(g,[1,2,3,4,5,6]); 2 g := x/x 1, 4, 9, 16, 25, 36 (3.2.6) O comando evalf avalia um nmero em dgitos flutuantes at uma preciso especificada. Vamos ento construir a funo: O evalf15 := x -> evalf(x,15); evalf15(Pi); evalf15 := x/evalf x, 15 3.14159265358979 (3.2.7)

3.3 proc
Outro modo de definir funes atravs de procedimentos: O h:=proc(a,b) if a<0 then print(erro) else O plot(sqrt(x)+1,x=a..b) end if; O end; h := proc a, b if a ! 0 then print erro else plot sqrt x C1, x = a ..b end if end proc O h(0,1);

(3.3.1)

1.8

1.6

1.4

1.2

0.2

0.4 x

0.6

0.8

O h(b);
Error, (in h) cannot determine if this expression is true or false: b < 0

Podemos tambm definir funes de vrias variveis: O g:=(x,y)->x*y^2+x-y^2; 2 2 g := x, y /x y Cx Ky ou O F:=proc(x,y) O x*sin(y)+x^2 O end; O F(1,2);

(3.3.2)

F := proc x, y x * sin y Cx^2 end proc sin 2 C1

(3.3.3) (3.3.4)

O Ff:=proc(x,y) O evalf(x*sin(y)+x^2) O end; Ff := proc x, y evalf x * sin y Cx^2 end proc O Ff(Pi,Pi); 9.869604404

(3.3.5) (3.3.6) (3.3.7)

O seq(map(Ff, [1,2,3], 1+i),i=1..3); 1.909297427, 5.818594854, 11.72789228 , 1.141120008, 4.282240016, 9.423360024 , 0.2431975047, 2.486395009, 6.729592514

3.4 Exerccios 2
1 (a) Construa a funo f x = x3 C3 x2 K1 x C4
4

usando a notao seta.

(b) Determine f K , f 0 e f 1 . 1 (c) Faa o grfico de f sobre o intervalo de x = K a x = 4. 4 x3 C3 x2 K1 (d) Use o procedimento eval para avaliar a expresso para x = K x = 0 e x = 1. 1, 4 x C4 2 Construa uma funo cuja entrada uma lista qualquer e cuja sada uma lista que avalia o seno de cada elemento da lista de entrada.

4. Soluo de Equaes Algbricas 4.1 solve, fsolve


O restart: Vamos agora considerar equaes algbricas do tipo O eq1:=a*x^2+b*x+c=0; eq1 := a x2 Cb x Cc = 0 Podemos resolver esta equao para x: O sol:=solve(eq1,x); 1 KC b sol := 2 O sol[1]; 1 KC b 2 O sol[2]; K 1 bC 2 b K4 a c a
2

(4.1.1)

b2 K4 a c 1 bC ,K a 2 b2 K4 a c a

b2 K4 a c a

(4.1.2)

(4.1.3)

(4.1.4)

Consideremos algumas equaes mais especficas, dando valores s constantes a, b e c : O eq2:=subs(a=1,b=3,c=-4/5,eq1); 4 eq2 := x2 C3 x K =0 5 O sol:=solve(eq2,x); sol := K Em pontos flutuantes, O evalf(sol); 3 1 C 2 10 3 1 K 2 10

(4.1.5)

305 , K

305

(4.1.6)

0.246424920, K 3.246424920

(4.1.7)

Poderamos ter escrito desde o incio, O evalf(solve(eq2,x)); 0.246424920, K 3.246424920 ou O fsolve(eq2,x); O printlevel:=1;

(4.1.8)

K 3.246424920, 0.2464249197 printlevel := 1

(4.1.9) (4.1.10)

Estas duas formas no sempre equivalentes, no entanto. Consideremos, por exemplo, O eq3:=x^3-x^2+1; 3 2 eq3 := x Kx C1

(4.1.11)

O evalf(solve(eq3)); K 0.7548776667, 0.8774388331 K0.7448617670 I, 0.8774388331 C0.7448617670 I (4.1.12) O fsolve(eq3); K 0.7548776662 (4.1.13)

Para que o comando fsolve possa encontrar tambm razes complexas o argumento complex deve ser dado: O fsolve(eq3=0,x,complex); K 0.7548776662, 0.8774388331 K0.7448617666 I, 0.8774388331 C0.7448617666 I (4.1.14) Vejamos outro exemplo com uma equao no polinomial: O eq4:=sin(x)+x^(1/2)-3/2; eq4 := sin x C x K O evalf(solve(eq4,x)); O fsolve(eq4);

3 2

(4.1.15)

0.7141134004 3.530173727

(4.1.16) (4.1.17)

Para esclarecer este dilema faamos um grfico: O plot(eq4,x=0..14);

6 x

10

12

14

K 1
Portanto, ambos comandos do resultados corretos mas incompletos. O conhecimento do grfico nos d uma indicao da localizao das razes e fsolve pode ser utilizado para determinar os seus valores exatos: O r1:=fsolve(eq4,x,0..2); r1 := 0.7141134004 (4.1.18) O r2:=fsolve(eq4,x,2..4); r2 := 3.530173727 O r3:=fsolve(eq4,x,4..6); r3 := 5.338242169 (4.1.19) (4.1.20)

4.2 Exerccios 3
Resolva as equaes abaixo e ilustre graficamente 1 1 sin x Csin 2 x Kx C = 0, 2 2 x 3 Kex = 0, 4 3 x5 K3 x4 K7 x3 C4 x2 Kx C3=0.

5. Simplificando Expresses
O problema de simplificao de expresses um problema clssico de computao algbrica, e tambm um dos mais difceis. Embora heuristicamente seja fcil ter uma noo sobre o que a forma mais simples de uma expresso, quando se trata de traduzir este procedimento em termos de algoritmos, formidveis dificuldades de programao aparecem. Em Maple h certos comandos destinados a simplificao de expresses. Como veremos nas Sees seguintes, cabe ao usurio decidir qual comando de simplificao utilizar em cada momento. Comando factor

Vamos supor que temos a seguinte expresso algbrica: O restart: O q:=(x^2-x-2); q := x2 Kx K2 O comando factor, como o nome sugere, fatoriza esta expresso: O factor(q); x C1 x K2 Do mesmo modo, se O p:=(x^2-1); temos O factor(p); Portanto, numa expresso tal como O f:=p/q; f :=

(5.1.1)

(5.1.2)

p := x2 K1

(5.1.3)

x K1

x C1

(5.1.4)

x2 K1 x2 Kx K2

(5.1.5)

O comando factor produz uma simplificao: O factor(f); x K1 x K2 Consideremos agora a expresso O ex1:=(x^2-2*x+1)^2+(y^2+2*y+1)^2; ex1 := x2 K2 x C1
2

(5.1.6)

C y2 C2 y C1

(5.1.7)

Aplicando o comando factor obtemos O factor(ex1); x4 K4 x3 C6 x2 K4 x C2 Cy4 C4 y3 C6 y2 C4 y o que no simplificou o problema. Notemos agora o seguinte: O op(1,ex1); x2 K2 x C1 O op(2,ex1); y2 C2 y C1
2

(5.1.8)

(5.1.9) (5.1.10)

Ou seja, o comando op extrai os operandos da expresso. Portanto, podemos fatorar ex1 eficientemente fazendo O factor(op(1,ex1))+factor(op(2,ex1)); x K1 4 C y C1 4 (5.1.11)

Se tivssemos uma expresso muito longa este mtodo seria trabalhoso. Um modo mais eficiente para resolver este problema utilizando o comando map : O map(factor,ex1); 4 4 x K1 C y C1 (5.1.12) O comando factor aplicado expresso definida por O g:=(x^30-1)/(x-1); x30 K1 g := x K1 produz consequncias desastrosas: O factor(g); 2 2 x C1 x Cx C1 x Kx C1 Kx Cx Kx Cx Kx C1
7 5 4 3

(5.1.13)

x Cx Cx Cx C1
8 7 5 4 3

x Kx Cx Kx C1

x (5.1.14)

x Cx Kx Kx Kx Cx C1

Resolveremos este problema atravs do comando normal. Comando normal O comando normal similar ao comando factor. A diferena que normal, ao encontrar uma razo entre duas expresses, limita-se a procurar fatores comuns entre numerador e denominador. Por exemplo, O q; x2 Kx K2 (5.2.1) O normal(q); O p; O normal(p); Entretanto, O p/q; x Kx K2 x2 K1 x2 K1
2

(5.2.2) (5.2.3) (5.2.4)

x2 K1 x2 Kx K2 x K1 x K2

(5.2.5)

O normal(p/q);

(5.2.6)

produzindo neste caso o mesmo resultado que factor. No entanto, a diferena reaparece se no caso mais geral O g; x30 K1 (5.2.7) x K1 O normal(g);

1 Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx Cx
15 14 13 12 11 10 9 8 7 2 4 3 6

29

28

27

26

25

24

23

22

21

20

19

18

17

16

(5.2.8)

Ou seja, normal procurou no numerador o fator comum ao denominador e expandiu o fator restante. Em quais casos h vantagem de se usar normal em lugar de factor ? Consideremos o seguinte exemplo: O h:=1/(1-x^20)+1/(1-x^10); 1 1 h := C (5.2.9) 20 10 1 Kx 1 Kx O factor(h); 10 K x C2 x K1 C1
8 6 4

x C1
2

x Cx Cx Cx C1

x Kx Cx Kx C1

(5.2.10)

x Kx Cx Kx C1 x10 C2 K Cx 1
10

O normal(h); K

x C1

10

(5.2.11)

Como podemos ver, factor obteve o mnimo mltiplo comum entre os denominadores e fatorizou cada expresso em termos de fatores irredutveis. O comando normal fez o mesmo, mas no tentou fatorizar os termos no denominador, gerando uma expresso mais simples. Comando expand Quando uma expresso gerada em Maple, por meio de uma entrada do usurio, ou por meio de um clculo, esta expresso mantida na sua forma original, at que o usurio determine o contrrio. Ou seja, expresses algbricas so mantidas na forma em que foram fornecidas. Por exemplo, uma expresso fatorada mantida nesta forma at que sua expanso seja ordenada: O f1:=(x-a)^6; f1 := x Ka 6 (5.3.1) O expand(f1); 6 5 4 2 3 3 2 4 5 6 x K6 x a C15 x a K20 x a C15 x a K6 x a Ca O factor(%); a Kx
6

(5.3.2) (5.3.3)

O comando factor pode ser usado tambm para expandir funes trigonomtricas, logartmicas exponenciais, especiais, etc.: O f2:=cos(omega*t+delta); f2 := cos t C (5.3.4) O expand(f2); cos t cos Ksin t sin O f3:=ln(x^2*y); O expand(f3); f3 := ln x2 y ln x2 y (5.3.5) (5.3.6) (5.3.7)

O Psi(4*x); 4x O expand(%); 1 1 1 2 ln 2 C x C xC 4 4 4 1 1 xC 4 2 1 3 xC 4 4 (5.3.8)

(5.3.9)

onde x a funo digamma. Em determinados casos desejamos expandir somente parte de uma expresso. Vamos supor que O f4:=(sin(alpha+beta)+x)^2; f4 := sin C Cx O expand(f4); sin
2 2

(5.3.10) (5.3.11)

cos
2

C2 sin cos cos sin C2 sin cos x


2

Ccos

sin

C2 cos sin x Cx2

Caso no queiramos expandir a funo sin, procedemos da seguinte forma: O expand(f4,sin); sin C
2

C2 sin C x Cx2

(5.3.12)

Vejamos outro exemplo: O f5:=sin(omega*(t-t0)+delta); f5 := sin t Kt0 C O expand(f5); sin t cos t0 cos Csin t sin t0 sin Kcos t sin t0 cos Ccos t cos t0 sin O expand(f5,t-t0); sin t Kt0 cos Ccos t Kt0 sin

(5.3.13) (5.3.14)

(5.3.15)

Consideremos agora a atuao de expand sobre funes racionais: O f6:=(x-y)^2/(x+y)^3; x Ky 2 f6 := x Cy 3 O expand(f6); x2 x Cy 2xy x Cy y2 x Cy

(5.3.16)

(5.3.17)

Ou seja, o denominador no foi expandido. Para fazer isso devemos proceder da seguinte forma: O normal(f6,expanded); x2 K2 x y Cy2 (5.3.18) x3 C3 x2 y C3 x y2 Cy3

Comando combine A operao realizada por expand baseada num algoritmo simples. Por outro lado, a operao inversa de fatorizao um processo complexo baseado em um longo e complexo procedimento envolvendo tcnicas sofisticadas de lgebra. Portanto, embora seja fcil obter a expanso de qualquer funo, a fatorizao requer maior cuidado e interao do usurio com o sistema. Por exemplo, O g1:=sin(alpha+beta)+cos(omega+delta); g1 := sin C Ccos C (5.4.1) O expand(g1); sin cos Ccos sin Ccos cos Ksin sin O factor(%); sin cos Ccos sin Ccos cos Ksin sin (5.4.2) (5.4.3)

Ou seja, factor no foi capaz fazer com que pudssemos recuperar a expresso original. Para isso necessrio especificar o tipo de fatorizao que desejamos. O comando combine til neste caso: O combine(%,trig); sin C Ccos C (5.4.4) Vejamos outros exemplos: O g2:=(x+a)^n*(x+a)^s; g2 := x Ca O combine(g2,power); x Ca O g3:=exp(2*x)*exp(b); O combine(g3,exp);

x Ca

(5.4.5) (5.4.6) (5.4.7) (5.4.8) (5.4.9) (5.4.10) (5.4.11)

n Cs

g3 := e2 x eb e2 x C b

O g4:=exp(sin(alpha)*cos(beta))*exp(cos(alpha)*sin(beta)); g4 := esin cos ecos sin O combine(g4,exp); O combine(%,trig); esin


cos C cos sin

esin C

Podemos executar a simplificao acima, de uma s vez, da seguinte forma: O combine(g4,[trig,exp]); esin C

(5.4.12)

Simplificaes envolvendo ln necessitam o parmetro adicional "simbolic". Por exemplo, O g5:=3*ln(x)+2*ln(y); g5 := 3 ln x C2 ln y (5.4.13)

O combine(g5,ln,symbolic);

ln x3 y2

(5.4.14)

Comando convert Embora o comando convert seja de utilidade mais geral, ele pode ser utilizado em simplificaes, como veremos nos prximos exemplos. Sua sintaxe convert(expresso, forma) onde onde argumento "forma" pode ser um dos seguintes: trig, tan, ln, exp expln, expsincos, rational, parfrac, radians, degree, GAMMA, factorial, etc. Por exemplo, O m1:=(exp(I*theta)+exp(-I*theta))/2; 1 I 1 K I m1 := e C e (5.5.1) 2 2 O convert(m1,trig); cos O convert(%,exp); 1 I 1 K e C e I 2 2 m2 := arcsinh x
2

(5.5.2)

(5.5.3)

O m2:=arcsinh(x); O convert(m2,ln);

(5.5.4)

ln x C O convert(n!,GAMMA);

x C1

(5.5.5) (5.5.6) (5.5.7) (5.5.8)

n C1 O convert(%,factorial); n! O expand(%); n! O convert(binomial(n,k),factorial); n! k! n Kk !

(5.5.9)

Comando simplify O comando simplify um comando geral de simplificao, que busca funes dentro de uma expresso que podem ser simplificadas utilizando propriadades pr-definidas no sistema. Entretanto, podemos usar este comando de forma selecionada, como no exemplo: O n1:=(sin(x)^2+2*cos(x)^2)*exp(y)/exp(y+x); sin x 2 C2 cos x 2 ey n1 := (5.6.1) ex C y O simplify(n1); O simplify(n1,trig);
x eK cos x 2 C1

(5.6.2)

cos x C1 ex C y

(5.6.3)

Ou seja, somente simplifcaes trigonomtricas foram efetuadas no ltimo comando. Os argumentos em simplify podem ser trig, hypergeom, radical, power, exp, ln, sqrt, Bessel, BesselJ, BesselK, BesselY, Ei, GAMMA, RootOf, LambertW, dilog, polylog, pg, pochhammer e atsign. O comando simplify pode muito til na simplificao de expresses envolvendo vnculos. Por exemplo, vamos supor que a expresso O n2:=x^2+2*x*y+y^3; 2 3 n2 := x C2 x y Cy (5.6.4) est sujeita aos vnculos O vinculos:={x+y+z=3, x^2+y=1, x-y+z^2=0}; 2 2 vinculos := x Cy = 1, x Ky Cz = 0, x Cy Cz = 3 O simplify(n2,vinculos); K x2 C23 x C17 x3 K14 35

(5.6.5) (5.6.6)

Outra utilidade de simplify na substituio de produtos em expresses por outras expresses ou mmeros. Por exemplo, suponhamos que O n3:=x^2*y^5*z; 2 5 n3 := x y z (5.6.7) Se queremos examinar o resultado da substituio z = 1 na expresso acima utilizamos o comando subs O subs(z=1,n3); 2 5 x y (5.6.8) Entretanto, se quisermos substituir x y = z sin z na expresso n3, o comando subs inefetivo: O subs(x^2*y^4=sin(z)*z,n3); 2 5 x y z (5.6.9) Podemos utilizar simplify onde x y = z sin z considerado como um vnculo: O simplify(n3,{x^2*y^4=sin(z)*z}); z2 y sin z
2 4 2 4

(5.6.10)

Podemos fazer com que o comando simplify assuma as hipteses feitas utilizando o comando assume. Por exemplo, O p1:=(x^2*y^4)^(1/2); p1 := O simplify(p1,assume=nonneg); x2 y4 Acima, a opo assume=nonneg fez com que todas as variveis sejam declaradas temporariamente no-negativas. (5.6.12) x2 y4 (5.6.11)

6. Clculo Diferencial e Integral

6.1 Limites, Somatrios e Produtrios


O comando que calcula o limite de uma funo quando ela tende a algum valor feito pelo comando limit. Ele capaz de realizar o clculo de limites mesmo quando a direta insero do valor crtico na funo um resultado indefinido (por exemplo, executado com a primeira letra maiscula (Limit), ele assume a forma inerte e nenhum clculo feito. Esta forma muito usada para visualizar a expresso antes que o clculo seja realmente feito com a auxlio do value. O Limit((sqrt(1+x)-1)/x,x=0); 1 Cx K1 lim (6.1.1) x/0 x O value(%); 1 2

N N ). Quando o comando

(6.1.2)

O Limit(tan(Pi/4+x)^cot(2*x),x=0)=limit(tan(Pi/4+x)^cot(2*x), x=0); cot 2 x 1 lim tan Cx =e (6.1.3) x/0 4 O Limit(x!/x^x,x=infinity)=limit(x!/x^x,x=infinity); x! lim =0 x/N x x

(6.1.4)

O resultado avaliado simbolicamente sempre que possvel, mesmo quando a expresso possui variveis desconhecidas. O f:=(x^a-x^(-a))/(x-1/x); a xa KxK f := (6.1.5) 1 xK x O limit(f,x=1); a (6.1.6)

O limite tambm pode ser calculado com funes multivariveis. Para isso o coordenada em que se quer calcular o limite deve ser especificada da forma {x=x0,y=y0,...}. O limit( (x+y)/x + (x+y)/y , {x=0,y=1} ); undefined (6.1.7) Quando queremos calcular o limite da funo de dizer que N, porm para a funo 1 quando x/0 o Maple no encontra dificuldade x2

1 veja o resultado: x O Limit(1/x^2,x=0)=limit(1/x^2,x=0);

(6.1.8)

lim

x/0

1 =N 2 x

(6.1.8)

O Limit(1/x,x=0)=limit(1/x,x=0); 1 lim = undefined x/0 x

(6.1.9)

O motivo deste resultado que o Maple reconhece que o limite desta funo para este valor depende da direo de aproximao. O Limit(1/x,x=0,left)=limit(1/x,x=0,left); 1 lim =K N (6.1.10) x/0K x O Limit(1/x,x=0,right)=limit(1/x,x=0,right); 1 lim =N x/0C x

(6.1.11)

Para representar somatrios usa-se o comando sum: o primeiro parmetro representa a funo e o segundo contm o intervalo da varivel do somatrio. Assim como no limite este comando tambm possui a sua forma inerte. O Sum(1/x^n,n=1..5);
n=1

> x1

(6.1.12)

O value(%);

1 1 1 1 1 C 2 C 3 C 4 C 5 x x x x x

(6.1.13)

Se a varivel j possui um valor previamente associado ento esta varivel deve estar entre aspas simples (') e o todo primeiro parmetro tambm. O z:=10; z := 10 (6.1.14) O Sum(1/z^3,z=1..5)=sum(1/z^3,z=1..5);
Error, (in sum) summation variable previously assigned, second argument evaluates to 10 = 1 .. 5

O Sum('1/z^3','z'=1..5)=sum('1/z^3','z'=1..5);
z= 1

> z1

256103 216000

(6.1.15)

Quando se desejar fazer um somatrio infinito basta especificar no intervalo. O Sum(1/2^n,n=1..infinity)=sum(1/2^n,n=1..infinity);


n= 1

> 21

=1

(6.1.16)

Se voc quiser construi somatrios de algumas variveis pode-se colocar um somatrio dentro de outro. O exemplo seguinte mostra como o sum usado para construir uma frmula que usa elementos de uma matriz como coeficiente. O Sum(Sum(k[i,j]*y^(i+j),i=1..3),j=1..3);

> >k
j=1 i= 1

i Cj i, j y

(6.1.17)

O value(%); 2 3 4 3 4 5 4 5 6 k1, 1 y Ck2, 1 y Ck3, 1 y Ck1, 2 y Ck2, 2 y Ck3, 2 y Ck1, 3 y Ck2, 3 y Ck3, 3 y A mesma sintaxe do sum pode ser usada para o comando product que calcula o produtrio especificado no primeiro parmetro. O Product(x,x=1..5);

(6.1.18)

?x
x= 1

(6.1.19)

O value(%);

120
10

(6.1.20)

O Product(1+1/x^2,x=1..10)=product(1+1/x^2,x=1..10);

1C

x= 1

1 x2

2200962205 658409472

(6.1.21)

O product( 1+1/x^2 , x=1..infinity ); sinh O evalf(%); 3.676077910

(6.1.22)

(6.1.23)

6.2 Diferenciao
Esta seo trata dos comandos relacionados ao clculo de derivadas. O comando que calcula a derivada o diff. Funes definidas por equaes tambm podem ser derivads pelo comando implicitdiff. O operador relacionado com a derivada a letra d maiscula (D). Para o comando de derivada deve-se passar a funo e a varivel de derivao como argumentos tanto para a forma normal como para a forma inerte. O restart; O Diff(x^3+x^2+x,x); d dx x3 Cx2 Cx (6.2.1)

O value(%);

3 x2 C2 x C1

(6.2.2)

O Diff(x^3+x^2+x,x,x)=diff(x^3+x^2+x,x,x); d2 x3 Cx2 Cx = 6 x C2 2 dx

(6.2.3)

Para derivadas de ordem superiores a dois convm utilizar o operador dlar ($) responsvel pelas repeties. O Diff(x^3+x^2+x,x$3)=diff(x^3+x^2+x,x$3); 3 d 3 2 x Cx Cx = 6 (6.2.4) 3 dx Obviamente o Maple conhece todas as regras de derivao como regra da cadeia, regra do produto e da diviso de derivadas. O Diff(sin(cos(x)),x)=diff(sin(cos(x)),x); d sin cos x = K cos x sin x cos (6.2.5) dx Para funes no definidas, o operador D usado no resultado. O Diff(f(g(x)),x)=diff(f(g(x)),x); d d f g x =D f g x g x dx dx possvel derivar em funo de qualquer varivel da epresso. O Diff((x^2+y^3)^4,x,y)=diff((x^2+y^3)^4,x,y); v2 2 3 4 2 3 2 2 x Cy = 72 x Cy x y vy vx

(6.2.6)

(6.2.7)

Para derivadas de funes definidas implitamente poderia ser feito o seguinte procedimento: O diff(x^2+y(x)^2=1,x); d 2 x C2 y x y x =0 (6.2.8) dx O solve(%,diff(y(x),x)); K x y x (6.2.9)

Porm o comando implicitdiff j resolve diretamente. O implicitdiff(x^2+y^2=1,y,x); x K y

(6.2.10)

Enquanto o diff usado para funes, o D usado para calcular a derivada de operadores. O D(sin); cos (6.2.11)

O D(sin@cos);

K 2 sin cos

(6.2.12)

Quando a funo tem vrios parmetros devemos colocar entre colchetes o nmero correspondente vrivel sobre a qual se deseja derivar. O f:=(x,y)->sin(x)+cos(y)+sin(x*y); f := x, y /sin x Ccos y Csin y x O D[1](f); O D[2](f); x, y /cos x Ccos y x y x, y /K y Ccos y x x sin

(6.2.13) (6.2.14) (6.2.15)

Podemos, ainda, passar novos valores a serem substitudos na expresso do resultado. O D[2](f)(alpha,beta); K Ccos sin

(6.2.16)

Algumas vezes o formato D mais desejado, outras o diff se torna mais conveniente. Para mudar de um para outro pode ser usado o comando convert. E o lprint auxilia na visualizao da estrutura interna da expresso. Sendo que no Release 5 este comando se torna obsoleto, pois a estrutura interna de uma expresso no format output pode ser obtido no format input posicionando o cursor no prprio resultado e pressionando [Enter]. O restart; O diff(f(x,y,z),x,y,z$2); v4 f x, y, z (6.2.17) vz2 vy vx O convert(%,D); O lprint(%);
(D[1, 2, 3, 3](f))(x, y, z)

D1, 2, 3, 3 f

x, y, z

(6.2.18)

O convert(%,diff);

v4 f x, y, z vz2 vy vx

(6.2.19)

O lprint(%);
diff(diff(diff(diff(f(x, y, z), x), y), z), z)

6.3 Integrao
Do ponto de vista matemtico, a integrao simblica mais complexa do que a derivao pois no h um mtodo nico que resolva todas as integrais. Existem regras de integrao capazes de reduzir expresses em formas de integrais conhecidas ou tabeladas. O Maple possui um extenso acervo de soluo algbrica de integrais, mas certamente no resolve todas aquelas existentes na

matemtica. Quando encontrarmos uma dessas possvel encontrar a sua soluo numrica. Para fazer uma integrao simblica o comando utilizado o int sendo que, assim como nos comandos vistos neste captulo, quando a primeira letra maiscula, o comando assume a sua forma inerte. O Int(x^2+x^3,x); x2 Cx3 dx (6.3.1) O value(%);

1 3 1 4 x C x 3 4
b

(6.3.2)

O Int(x^2+x^3,x=a..b)=int(x^2+x^3,x=a..b); x Cx
a 2 3

dx =

1 3 1 3 1 4 1 4 b K a C b K a 3 3 4 4

(6.3.3)

Para fazer a integral numrica, od limites devem estar definidos O Int(x^2+x^3,x=2..3)=int(x^2+x^3,x=2..3);


3

x2 Cx3 dx =

271 12

(6.3.4)

O Maple no encontra dificuldade quando o integrando possui uma descontinuidade no intervalo de integrao. O f:=cos(x)/sqrt(1-sin(x)); cos x f := (6.3.5) 1 Ksin x O plot(f,x=0..2*Pi,discont=true,color=black);

1 0.5 0 K 0.5 K 1

3 x

O Int(f,x=0..2*Pi)=int(f,x=0..2*Pi); (6.3.6)

cos x 1 Ksin x

dx = 0

(6.3.6)

O Maple reconhece a funo degrau (Heaviside) e a funo delta de Dirac (Dirac) durante o processo de integrao O Int(g(x)*Heaviside(x-2),x=0..5)=int(g(x)*Heaviside(x-2),x= 0..5);
5 5

g x Heaviside x K2 dx =
0 2

g x dx

(6.3.7)

O Diff(Heaviside(x),x)=diff(Heaviside(x),x); d Heaviside x = Dirac x dx

(6.3.8)

O Int(sin(x)*Dirac(x-Pi/4),x=-infinity..infinity)=int(sin(x)* Dirac(x-Pi/4),x=-infinity..infinity);
N

sin x Dirac x K
K N

1 1 dx = 4 2

(6.3.9)

Para representar integrais mltiplas necessrio colocar um comando de integral dentro de outro. O Int(Int(x^2,x=0..2),x=0..3)=int(int(x^2,x=0..2),x=0..3);
3 2

x2 dx dx = 8

(6.3.10)

0 0

Freqentemente encontramos integrais que no possuem soluo algbrica. Quando o Maple no consegue encontrar uma soluo algbrica retornado a integral na forma inerte. Para encontrar a soluo numrca utiliza-se o copmando evalf. O int(sin(1/x^3),x=1..2);
2

sin
1

1 x3

dx

(6.3.11)

O evalf(%);

0.3548334332

(6.3.12)

6.4 Expanso em Sries


O comando que faz a expanso em sries series. Dependendo da expresso do primeiro parmetro, este comando pode gerar expanso em Taylor, Laurent ou sries de potncia genrica. O segundo parmetro o ponto de expanso e o terceiro, a mxima potncia da srie. Este ltimo opcional e ser for omitido, o Maple usa o valor da varivel global Orderque inicializado com 6.

O series(log(x),x=1); 1 1 2 x K1 K x K1 C x K1 2 3

1 4

x K1

1 5

x K1

CO

x K1

(6.4.1)

O series(sin(x),x=0,10); 1 3 1 1 1 5 7 9 10 xK x C x K x C x CO x 6 120 5040 362880


6

(6.4.2)

O tipo da sada obtido series que caracterizado por um truncamento (O x K1 ). Por este motivo, os resultados obtidos pelo comando serires no podem ser processados em seguida. Para converter a expanso para um polinmio usa-se o comando convert. O whattype(%); series (6.4.3) O pol:=convert(%%,polynom); 1 3 1 1 1 pol := x K x C x5 K x7 C x9 6 120 5040 362880 O grfico seguinte mostra a funo sin x e a sua expanso em sries at potncia 9. O plot([pol,sin(x)],x=0..2*Pi,-1..1,color=black);

(6.4.4)

0.5

3 x

K 0.5

K 1
O comando mtaylor calcula a expanso em srie de Taylor para funes multi-variveis, pois o series s efetua o clculo para apenas uma. As suas sintaxes so iguais, sendo que para a expanso com muitas variveis o segundo parmetro deve ser uma lista de pontos sobre os quais se deseja realizar a expanso. Antes de usar o comando necessrio carreg-lo com readlib. O ### WARNING: persistent store makes one-argument readlib obsolete readlib(mtaylor); proc ... end proc (6.4.5)

O mtaylor(log(x+y),[x=1,y=Pi],3); y K x K1 1 ln 1 C C C K 2 1 C 1 C x K1 1 C
2 2

y K

x K1
2

1 C

1 K 2

y K 1 C

2 2

(6.4.6)

O pacote powseries contm comandos auxiliares para o processamento de sries. Pode ser usado para manipular series que possuem uma regra geral de expanso realizando adies, subtraes, multiplicaes, divises, derivaes e inverses destas sries. Devemos carregar o pacote com o comando with. O with(powseries); compose, evalpow, inverse, multconst, multiply, negative, powadd, powcos, powcreate, (6.4.7) powdiff, powexp, powint, powlog, powpoly, powsin, powsolve, powsqrt, quotient, reversion, subtract, tpsform Suponha que queremos calcular a srie cuja frmula geral : O p(n)=(1+(-1)^(n+1))/2*(-1)^((n-1)/2)/n!; p n = 1 2 1C K 1
n C1

K 1

1 1 nK 2 2

n!

(6.4.8)

O comando que cria a srie o powcreate que no mostra nenhuma sada mas faz a atribuio a varivel p que no pode ter nenhum contedo neste momento. O comando tpsform usado para visualizar a srie gerada. O powcreate(%);tpsform(p,x,9); 1 3 1 1 xK x C x5 K x7 CO x9 (6.4.9) 6 120 5040 Veja como executar uma operao matemtica ou uma inverso com a srie criada e compare o resultado obtido com o comando series. O q:=evalpow(p*p):tpsform(q,x,9); 1 4 2 6 1 x2 K x C x K x8 CO x9 (6.4.10) 3 45 315 O series(sin(x)^2,x,9); 1 4 2 6 1 x2 K x C x K x8 CO x10 3 45 315 O r:=reversion(p):tpsform(r,x,9); 1 3 3 5 5 xC x C x C x7 CO x9 6 40 112 O series(arcsin(x),x,9); 1 3 3 5 5 xC x C x C x7 CO x9 6 40 112

(6.4.11)

(6.4.12)

(6.4.13)

6.5 O Pacote student: Ferramentas de Clculo


O pacote student possue ferramentas teis para o aluno iniciante de clculo pois demonstram conceitos elementares e fundamentais para o seu apredizado. Ele deve ser carregado com o comando with, que seguido de ponto-e-vrgula imprimie todos os seus comandos. O with(student); D, Diff, Doubleint, Int, Limit, Lineint, Product, Sum, Tripleint, changevar, (6.5.1) completesquare, distance, equate, integrand, intercept, intparts, leftbox, leftsum, makeproc, middlebox, middlesum, midpoint, powsubs, rightbox, rightsum, showtangent, simpson, slope, summand, trapezoid O exemplo abaixo soluciona uma integral pelo mtodo de substituio de varivel que o Maple no consegue resolver sem esta manipulao. Porm outras integrais podem ser resolvidas com este comando para mostrar o procedimento do mtodo. O A:=Int(tan(1/3*arctan(x)),x=0..1);
1

A :=
0

tan

1 arctan x 3

dx

(6.5.2)

O value(%);

tan
0

1 arctan x 3

dx

(6.5.3)

O changevar(1/3*arctan(x)=theta,A,theta);
1 12

tan
0

3 C3 tan 3

(6.5.4)

O value(%); 1 1 2 18 5 sin 4 sin 12 C32 ln 4 sin K24 ln 4 sin K9 5 12 5 12

5 12
2

K sin 60 K3 5 12 5 12
4

5 12

C69 sin

5 12

(6.5.5)

K3 sin
2

C48 ln sin
2

5 12 5 12

sin sin

5 12 5 12

K3 sin

K64 ln sin

Foi visto anteriormente que uma integral dupla pode ser definida pela insero em cascata do comando int. No pacote student existem os comandos Doubleint e Tripleint para representar integrais duplas e triplas respectivamente. O inter:=-infinity..infinity; (6.5.6)

inter := K ..N N O Doubleint(exp(-x^2-y^2),x=inter,y=inter);


N N
K2 K y2 x

(6.5.6)

dx dy

(6.5.7)

K K N N

O value(%); (6.5.8)

Para mostrar como uma aproximao numrica de integrais opera podemos utilizar os comando leftbox, middlebox ou rightbox. Com eles pode-se visualizar os retngulos representando as reas que sero somadas na aproximao. O leftbox(sqrt(x),x=1..3,8);

1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 1 1.5 2 x 2.5 3

O valor da aproximao calculado com leftsum, middlesum ou rightsum que pode ser expresso por um somtrio e por ponto flutuante. Compare o resultado com a integrao numrica do Maple. O leftsum(sqrt(x),x=1..3,8)=evalf(leftsum(sqrt(x),x=1..3,8)); 1 4

>

1C

i=0

1 i = 2.704829825 4

(6.5.9)

O 1/4*Sum(sqrt(1+1/4*i),i = 0 .. 7) = 2.704829825827190957978159653324903678488; 1 4

>1 2
i= 0

4 Ci = 2.704829825827190957978159653324903678488

(6.5.10)

O Int(sqrt(x),x=1..3)=int(sqrt(x),x=1..3.0);
3

x dx = 2.797434948
1

(6.5.11)

6.6 Clculo Vetorial


As operaes gradiente, divergente, rotacional e laplaciano esto programadas no Maple como as funes grad, diverge, curl e laplacian. Estes comandos devem ter no mnimo dois argumentos, onde o primeiro uma funo, ou melhor, uma expresso que depende de certas variveis, e o segundo uma lista de variveis que representam as coordenadas. O sistema de coordenadas default o sistema cartesiano. Vamos dar uma apelido para a expresso f(x,y,z), e calcular o gradiente, divergente o laplaciano desta funo: O restart;with(linalg): O alias(f=f(x,y,z)); f (6.6.1) O v:=[x,y,z]; O grad(f,v); v v v f f f vx vy vz O diverge(%,v); v2 v2 v2 fC 2 fC 2 f vx2 vy vz v2 v2 v2 fC 2 fC 2 f vx2 vy vz (6.6.3) # lista das coordenadas v := x, y, z (6.6.2)

(6.6.4)

O laplacian(f,v);

(6.6.5)

O rotacional deve ser aplicado a uma funo vetorial. Assim, vamos dar apelidos para g(x,y,z) e h (x,y,z): O alias(g=g(x,y,z),h=h(x,y,z)); f, g, h (6.6.6) O curl([f,g,h],v); v v hK g vy vz v fK vz v h vx v gK vx v f vy

(6.6.7)

Podemos confirmar que o divergente do rotacional zero: O diverge(%,v); 0 e, da mesma forma, confirmar que o rotacional do gradiente o vetor nulo: O curl(grad(f,v), v); 0 0 0

(6.6.8)

(6.6.9)

Todas estas operaes podem ser feitas em sistemas de coordenadas no-cartesianos. Vamos ver um exemplo de clculo de gradiente no sistema de coordenadas esfricas:

O f1 := r^2*sin(theta)*cos(phi); f1 := r2 sin cos O v:= [r, theta, phi]; v := r, , O grad(f1, v, coords=spherical); 2 r sin cos r cos cos K sin r

(6.6.10) (6.6.11)

(6.6.12)

Alm de coordenadas cartesianas, esfricas e cilndricas que so as mais utilizadas, o Maple conhece mais de 40 sistemas de coordenadas em 2 e 3 dimenses. Para ter acesso a lista completa destes sistemas, pedimos ajuda da forma ?coords.

6.7 Exerccios
1. Explique porque os seguintes comandos chegam a zero em vez de 2 x C2 y C2 z O F:=[x^2,y^2,z^2]: O X:=[x,y,z]: O sum('diff(F[i],X[i])',i=1..3); 2 x C2 y C2 z O for i to 3 do diff(F[i],X[i]); od; 2x 2y 2z (6.7.2) (6.7.1)

2. Seja f x = x3 Csin arctan x Ktan arcsin x . (a) Encontre a primeira e a segunda derivadas de menores ordens que possuem um valor no nulo em x = 0 e os seus valores correspondentes. O f:= x^3+sin(arctan(x))-tan(arcsin(x)); x x 3 f := x C K (6.7.3) 2 2 1 Cx 1 Kx O i:=1; O f[0]:=f; f0 := x3 C O g:=0: O while g=0 do f[i]:=diff(f[i-1],x): O g:=subs(x=0,f[i]): O i:=i+1: O x 1 Cx
2

i := 1 x 1 Kx
2

(6.7.4)

(6.7.5)

O od: O 'i'=i-1;

i=7

(6.7.6)

O f[i+1]:=diff(f[i],x): O diff('f(x)',x$i)=f[i-1]; 8 4 291060 x6 d 198450 x f x = K C 2 13 /2 2 11 /2 dx8 1 Cx 1 Cx K 135135 x 1 Cx K O O O O O O O O 1 Kx 135135 x


8 2 15 /2 8

44100 x 1 Cx
4

2 9/2

1575 1 Cx
2 7/2 2

(6.7.7) 1575 1 Kx
2 7/2

291060 x 1 Kx

2 13 /2

198450 x 1 Kx

2 11 /2

44100 x 1 Kx

2 9/2

2 15 /2

i:=9: g:=0: while g=0 do f[i]:=diff(f[i-1],x): g:=subs(x=0,f[i]): i:=i+1: od: 'i'=i-1; i=9 (6.7.8)

(b) Deduza a regra geral para a ordem das derivadas no nulas em x = 0. (c) Plote f x nos intervalo x=-10..10 e x = K 0.001 ..0.001. 3. Com o auxlio do Maple resolva as seguintes integrais: (a) 1 x Kx
1 5 1 3

dx

(b) x ln 2 x C

1 Cx2

dx 1 Cx2

O A:=int(x*ln(2*x+sqrt(1+x^2)),x); A := x ln 2 x C dx (6.7.9)

O u:=op(1,A)/x; u := ln 2 x C 1 Cx2 (6.7.10)

O diff(u,x); 2C 2 xC O v:=x^2/2; v := x 1 Cx
2 2

(6.7.11)

1 Cx 1 2 x 2

(6.7.12)

O A2:=u*v-int(v*diff(u,x),x); 1 1 2 1 1 A2 := ln 2 x C 1 Cx2 x2 K x K ln 3 x2 K1 C arcsinh x 2 4 12 3 3 1 C arctanh 4 12 8 2 K 3 3 9 xC 1 3 K arctanh 12 4 1 3 3 3


2

(6.7.13)

xC 3

1 3

3 xC 1 3

3 3 3 1 3 3 C12 C12

K6 3
2

2 8 C 3 3 9 xK 1 3 3

xK 3

1 3

3 xK

C6

Outro procedimento utilizando o pacote student: O with(student); D, Diff, Doubleint, Int, Limit, Lineint, Product, Sum, Tripleint, changevar, completesquare, distance, equate, integrand, intercept, intparts, leftbox, leftsum, makeproc, middlebox, middlesum, midpoint, powsubs, rightbox, rightsum, showtangent, simpson, slope, summand, trapezoid

(6.7.14)

O intparts(Int(x*ln(2*x+sqrt(1+x^2)),x),ln(2*x+sqrt(1+x^2))); x x2 2 C 1 1 1 Cx2 ln 2 x C 1 Cx2 x2 K dx (6.7.15) 2 2 2 2 x C 1 Cx O value(%); 1 ln 2 x C 1 Cx2 2 1 3 C arctanh 12 4

x2 K

1 2 1 1 x K ln 3 x2 K1 C arcsinh x 4 12 3 8 2 K 3 3 3
2

(6.7.16)

xC 3

1 3

3 xC 1 3

3 3 C12

9 xC

1 3

K6

3 1 arctanh 4 12

8 2 C 3 3 9 xK 1 3 3

3
2

xK 3

1 3

3 xK 1 3

3 3 C12

C6

(c)
K 1

x Kx dx

4. Use o Maple para decidir se as sries convergem ou divergem: (a)


n=2

> ln 1n
n=2

O sum(1/ln(n),n = 2 .. infinity);

> ln 1n > ln 1n
N

(6.7.17)

O value(%);

(6.7.18)

n=2

(b)

n=1

>

n! 2n !

O S:=Sum(n!/(2*n)!,n = 1 .. infinity); S := O value(S); 1 K 4 4 e


n= 1

>

n! 2n !

(6.7.19)

1 4

K Cerfc 1

1 2

(6.7.20)

(c)

n=1

> sin

1 n

O S:=Sum(sin(1/n),n = 1 .. infinity); S := O value(S);


n=1

> sin
1 n

1 n

(6.7.21)

n=1

> sin

(6.7.22)

5. calcule a derivada da funo f x = max x , x . O f:=max(x^3,x); O plot(f,x=-2..2);

f := max x, x3

(6.7.23)

8 6 4 2

K 2

K 1

0 K 2

1 x

O diff(f,x); 1 undefined 3x 1 undefined 3 x2


2

x!K 1 1 x=K x !0 x=0 x !1 x=1 1 !x (6.7.24)

undefined

6. Seja a funo y x definida implicitamente por x C y = 1. Calcule a derivada y' e a segunda derivada y''. O eq:=sqrt(x)+sqrt(y) = 1; eq := x C y = 1 (6.7.25) O implicitdiff(eq,y,x); K y x 7. Seja a funo de duas variveis z x, y implicitamente definida por h x, y, z = 0, para uma funo de trs variveis h. Determine a frmula para (6.7.26)

v v2 ze z. Qual o resultado para vx vy vx h = x C y C z K1? O restart: O d1:=implicitdiff(h(x,y,z),z(x,y),x); D1 h x, y, z d1 := K D3 h x, y, z O d2:=implicitdiff(h(x,y,z),z(x,y),x,y); 1 2 d2 := K 1, 2 h x, y, z D3 h x, y, z CD1, 3 h D 3 D3 h x, y, z y, z D3 h z D3, 3 h x, y, z CD1 h x, y, z D2 h x, y, z D2, 3 h x, y, z D3 h (6.7.27)

x, y, z D2 h

x, x, y,

(6.7.28)

x, y, z KD1 h

x, y, z

O h := sqrt(x)+sqrt(y)+sqrt(z)-1: O d1:=implicitdiff(h,z,x); d1 := K O d2:=implicitdiff(h,z,x,y); d2 := 2 z x 1 x y (6.7.29)

(6.7.30)

8. Calcule as seguintes integrais definidas:


10

(a)
1

4 x4 C4 x3 K2 x2 K10 x C6 dx x5 C7 x4 C16 x3 C10 x2

O Int((4*x^4+4*x^3-2*x^2-10*x+6)/(x^5+7*x^4+16*x^3+10*x^2),x = 1 .. 10);
10

4 x4 C4 x3 K2 x2 K10 x C6 dx x5 C7 x4 C16 x3 C10 x2

(6.7.31)

O value(%); 27 308 159 308 19 14 C arctan 4 K ln 2 K arctan 13 K ln 5 C ln 11 50 25 50 25 50 5 O evalf(%); 2.366004897

(6.7.32)

(6.7.33)

(b)
0 1 5

x sin x cos x dx

(c)
1 7 K 1

1 x 5 x K6 x C1
2

dx

(d)
K 2 1

1 dx x 1

9. Calcule as seguintes integrais definidas: (a)


0 2

dx
2

1 Kx

(b)

a eK x cos b x

dx, para um nmero real positivo a.


N

O Int(exp(-a*x)*cos(b*x)^2,x = 0 .. infinity); e
0 Kx a

cos b x

dx

(6.7.34)

O assume(a>0): O value(%);

a~2 C2 b2 a~2 C4 b2 a~

(6.7.35)

(c)

N
0

x eK ln x dx

O int(exp(-x)*ln(x),x = 0 .. infinity); K O evalf(%); O restart:


N

(6.7.36) (6.7.37)

K 0.5772156649

(d)
0

eK t
1 4

dt
t

1 KeK

O int(exp(-sqrt(t))/(t^(1/4)*sqrt(1-exp(-sqrt(t)))),t = 0 .. infinity); (6.7.38)

e
0

K t

dt
K t

(6.7.38)

1/4

1 Ke

(e)
1

1 x K1
4

dx

O int(1/sqrt(x^4-1),x = 1 .. infinity); 1 1 2 EllipticK 2 2 2


2

(6.7.39)

(f)
0

tan x dx

O int(sqrt(tan(x)),x = 0 .. Pi/2); 1 2 2
N

(6.7.40)

(g)
0

1 cosh a x
N
0

dx, para um nmero real positivo a. ln x x Ca x K1 dx, para a positivo.

10. Calcule

O int(ln(x)/((x+a)*(x-1)),x = 0 .. infinity); undefined 1 Cln a 1 2 1 Ca


2 2

a !0 (6.7.41) otherwise

11. Calcule

ln x2 C1 dx. x2 C1 O A:=Int(ln(x^2+1)/(x^2+1),x); ln x2 C1 A := x2 C1 O with(student): O intparts(A,ln(x^2+1),x);

dx

(6.7.42)

(6.7.43)

ln x C1 arctan x K

2 x arctan x 2 x C1

dx

(6.7.43)

12. Calcule o produto dos primeiros 32 nmeros primos. O nextprime(2); 3 O restart: O product(ithprime(i),i=1..32); 525896479052627740771371797072411912900610967452630

(6.7.44)

(6.7.45)

13. Calcule os seguintes limites: sin x (a) lim x/0 x O limit(sin(x)/x,x = 0);
1 x

(6.7.46)

(b) lim sin x


x/0

O limit(sin(x)^(1/x),x = 0); undefined (c) lim 1 Kcos x x/0 x O limit((1-cos(x))/x,x = 0);


x

(6.7.47)

(6.7.48)

(d) x/N 1 C lim x O limit((1+Pi/x)^x,x = infinity); e (e) lim x


x/0 sin x

(6.7.49)

O limit(x^sin(x),x = 0);
1 x x

(6.7.50)

(f) x/N 2x C3 lim

14. Calcule os seguintes limites: ln x (a) x/N lim x ln x (b) x/N lim ex x2 Csin x (c) x/N lim 2 x2 Ccos 4 x

(d) lim

1
K 1 x

x/0

1 Ce O limit(1/(1+exp(-1/x)),x = 0); undefined (e) x/N sinh tanh x lim Ktanh sinh x

(6.7.51)

O limit(sinh(tanh(x))-tanh(sinh(x)),x = infinity); 1 1 K eK e 1 K1 2 2

(6.7.52)

7. lgebra linear 7.1 Introduo


Os comandos de lgebra Linear formam um pacote chamado linalg, que deve ser carregado com o comando with: O restart; O with(linalg): Normalmente, terminarmos o comando de carregar pacotes com dois pontos para que as funes do pacote no sejam mostradas. Somente as mensagens de aviso de redefinio de comandos sero mostradas. Isto o que acontece com os comandos norm e trace, que servem primeiramente para calcular norma de polinmios e para correo de procedimentos, respectivamente. Aps o pacote linalg ser carregado, eles passam a calcular norma de vetores e trao de matrizes. No presente contexto, queremos saber quais so estas funes: O with(linalg); BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, (7.1.1) addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, coldim, colspace, colspan, companion, concat, cond, copyinto, crossprod, curl, definite, delcols, delrows, det, diag, diverge, dotprod, eigenvals, eigenvalues, eigenvectors, eigenvects, entermatrix, equal, exponential, extend, ffgausselim, fibonacci, forwardsub, frobenius, gausselim, gaussjord, geneqns, genmatrix, grad, hadamard, hermite, hessian, hilbert, htranspose, ihermite, indexfunc, innerprod, intbasis, inverse, ismith, issimilar, iszero, jacobian, jordan, kernel, laplacian, leastsqrs, linsolve, matadd, matrix, minor, minpoly, mulcol, mulrow, multiply, norm, normalize, nullspace, orthog, permanent, pivot, potential, randmatrix, randvector, rank, ratform, row, rowdim, rowspace, rowspan, rref, scalarmul, singularvals, smith, stackmatrix, submatrix, subvector,

sumbasis, swapcol, swaprow, sylvester, toeplitz, trace, transpose, vandermonde, vecpotent, vectdim, vector, wronskian

7.2 Definindo matrizes


Os comandos do pacote linalg para definir matrizes so: matrix, entermatrix, genmatrix, randmatrix, band e diag. A ttulo de exemplo, vamos definir duas matrizes e grav-las nas variveis A e B: O A := matrix( [ [1,2,3], [4,5,6] ] ); A := 1 2 3 4 5 6 (7.2.1)

O B := matrix(3, 2, [a,1,1,d,e,1] ); a 1 B := 1 d e 1 Na primeira matriz, entramos os elementos fornecendo cada linha na forma de uma lista. Neste caso, no necessrio especificar as dimenses da matriz. Na segunda, primeiro estipulamos as dimenses da matriz como sendo 3x2, depois fornecemos todos os elementos numa nica lista. O prprio Maple separa as linhas de acordo com as dimenses da matriz. Podemos declarar C como matriz e depois definir as componentes: O C:=matrix(2,2); C := array 1 ..2, 1 ..2, O C[1,1]:=1;C[1,2]:=3;C[2,2]:=4;C[2,1]:=-2; C1, 1 := 1 C1, 2 := 3 C2, 2 := 4 C2, 1 := K 2 (7.2.4) (7.2.2)

(7.2.3)

Aps a matriz ter sido definida, possvel trocar um elemento. Temos que atribuir o novo valor ao elemento correspondente. Por exemplo, vamos trocar 1/6 por 1/7 na posio <2,2> da matriz C: O C[2,2] := 1/7; 1 C2, 2 := (7.2.5) 7 Vamos verificar que a mudana foi feita com sucesso. Para ver os elementos de uma matriz temos que usar algum comando de avaliao, por exemplo evalm: O evalm(C);

1 K 2

3 1 7 (7.2.6)

As operaes de soma e potenciao de matrizes so feitas com os operadores ``+'' e ``^'' usuais de soma e potenciao de nmeros. A multiplicao de matrizes, no sendo comutativa, feita pelo operador ``&*'' (ampersand vezes). As expresses matriciais devem ser envolvidas pelo comando evalm, acrnimo de evaluate in matrix context. Por exemplo: O evalm((A&*B + C)^(-1)); 71 C35 d K , (7.2.7) 125 a C21 a d K66 K63 d C81 e K21 e d 7 7 C2 d , 125 a C21 a d K66 K63 d C81 e K21 e d 7 4 a C3 C6 e , 125 a C21 a d K66 K63 d C81 e K21 e d K 7 a C3 C3 e 125 a C21 a d K66 K63 d C81 e K21 e d

A potenciao por um nmero negativo, quer dizer a inverso da matriz, e subseqente potenciao pelo mdulo do nmero. A inversa tambm pode ser encontrada atravs do comando inverse: O inverse(matrix([[a,b],[c,d]])); d a d Kb c c K a d Kb c K b a d Kb c (7.2.8)

a a d Kb c

Quando uma matriz tem uma regra de formao, possvel repassar esta regra como terceiro argumento do comando matrix. Os dois primeiros argumentos devem ser as dimenses da matriz. Suponha que queiramos definir uma matriz de dimenso 3x4, onde o elemento <i,j> dado por i : j O matrix(3, 4, (i,j) -> i/j); 1 1 1 1 2 3 4 2 3 1 3 2 2 3 1 1 2 3 4 (7.2.9)

Existem vrias matrizes especiais que so usadas com frequncia em lgebra Linear. Muitas delas tm comandos especficos para ger-las. Por exemplo, as matrizes diagonais quadradas

podem ser geradas atravs do comando diag. Neste caso, bem mais econmico entrar os elementos atravs deste comando do que com o comando matrix, pois neste ltimo, teramos que fornecer os zeros fora da diagoanal. Vejamos alguns exemplos: O diag(1,2,3,4); 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 O diag(a$3); a 0 0 0 a 0 0 0 a O comando a$3 gera uma sequncia de trs elementos a, de forma que o ltimo comando dado acima equivalente a diag(a,a,a). Podemos tambm criar matrizes diagonais em bloco. Vamos usar a matriz C, definida acima com o comando entermatrix, para criar a seguinte matriz: O diag(C,C); 1 3 0 0 K 2 0 0 1 7 0 0 0 1 K 2 0 3 1 7 (7.2.12) (7.2.11) (7.2.10)

Um caso particular de matriz diagonal a matriz identidade. Ela pode ser criada com o comando diag, da seguinte forma: diag(1$n), onde n a dimenso da matriz identidade. Existem outras formas no equivalentes de definir a matriz identidade. Podemos defin-la com o comando array com a funo de indexao identity. Por exemplo: O ID := array(identity, 1..3, 1..3); ID := array identity, 1 ..3, 1 ..3, (7.2.13) O evalm(ID); 1 0 0 0 1 0 0 0 1 Existe uma forma mais abstrata da matriz identidade no Maple que ``&*( )''. Esta forma assume a repesentao usual dependendo do contexto. Por exemplo: O evalm(C - &*()*lambda); (7.2.15) (7.2.14)

1 K K 2

3 1 K 7 (7.2.15)

Neste exemplo, a matriz ``&*( )'' assumiu a dimenso 2 porque ela est somada a matriz C que tem dimenso 2. Na maioria dos casos, no necessrio usar a matriz identidade, pois o Maple assume que, quando um nmero est somando a uma matriz, este nmero est multiplicado pela matriz identidade de dimenso conveniente. De forma que o comando acima equivalente ao comando evalm(C-lambda). Vamos ver outras matrizes especiais. Se a matriz for uma faixa em torno da diagonal, podemos usar o comando band: O band([-1,1,2],4); 1 2 0 0 K 1 0 1 2 0 1 2 0 K 1 (7.2.16)

0 K 1 1

O ltimo argumento a dimenso da matriz. O primeiro argumento a lista dos elementos da faixa. A matriz de Toeplitz gerada pelo comando toeplitz: O toeplitz([alpha,1,beta,2]); 1 2 1 1 1 1 2 1 A matriz Jacobiana criada pelo comando jacobian. O exemplo a seguir mostra claramente como os elementos so calculados. O comando alias foi usado para expressar a dependncia das funes f, g e h em relao s variveis x, y e z. O alias(f=f(x,y,z),g=g(x,y,z),h=h(x,y,z)); f, g, h (7.2.18) O jacobian([f,g,h],[x,y,z]); v v f f vx vy v v g g vx vy v v h h vx vy v f vz v g vz v h vz (7.2.17)

(7.2.19)

Para criar matrizes com valores randmicos o comando randmatrix usado. Como parmetro adicional pode ser usado sparse, symmetric, unimodular e entries. No exemplo abaixo limitamos o intervalo de escolha aleatria dos nmeros de 0 a 10, quando esta opo omitida os valores podem estar entre -99 e 99. O randmatrix(2,2,entries=rand(0..10)); 6 9 (7.2.20) 5 1

O comando hilbert cria a matriz de Hilbert. O comando sylvester cria a matriz de Sylvester a partir de dois polinmios, e o comando frobenius cria a matriz na forma cannica racional de outra matriz. Podemos citar ainda os comandos como hessian, hermite e smith entre outros.

7.3 Manipulao de matrizes


Os principais comandos para manipulao estrutural com matrizes so: addcol, addrow, augment, col, row, coldim, rowdim, concat, copyinto, delcols, delrows, extend, mulrow, mulcol, stack, submatrix, swapcol e swaprow. A maioria dos nomes dos comandos falam por si s. As terminaes ou prefixos row e col se referem a linha e coluna, respectivamente. O comando coldim, por exemplo, fornece o nmero de colunas da matriz. O comando swaprow troca duas linha de uma matriz. Vejamos alguns exemplos. Primeiro, vamos criar duas matrizes genricas A e B: O A := matrix(2,3, (i,j) -> A.i.j);
Error, recursive assignment

O B := matrix(2,3, (i,j) -> beta.i.j); B := 2 3 2 4 6 (7.3.1)

Podemos juntar as matrizes A e B lateralmente com o comando augment, e verticalmente com o comando stackmatrix: O augment(A,B); 1 2 3 2 3 4 5 6 2 4 6 O stackmatrix(A,B); 1 4 2 5 3 6 (7.3.3) (7.3.2)

2 3

2 4 6 Podemos extrair uma sub-matriz de uma matriz com o comando submatrix: O submatrix(%,2..3,1..2); (7.3.4)

2 Podemos multiplicar uma determinada coluna de uma matriz por um escalar: O mulcol(A,1,alpha); 2 3 4 5 6 Usando o ltimo resultado, podemos apagar uma ou mais linha com o comando delrows: O delrows(%,2..2); 2 3 A manipulao aritmticas de matrizes, alm dos comandos de soma e ponteciao vistos, abrange os comandos transpose, det, trace, rank e map entre outros. O A:=matrix([[1,2,3],[4,-5,6],[9,8,7]]); 1 2 3 A := 4 K 6 5 9 O comando transpose calcula a transposta. O transpose(A); 1 3 O determinante calculado pelo det. O det(A); 8 7

(7.3.4)

(7.3.5)

(7.3.6)

(7.3.7)

4 9 (7.3.8) 6 7

2 K 8 5

200

(7.3.9)

O trace retorna o trao da matriz. O trace(A);

(7.3.10)

A matriz inversa de A pode ser obtida da seguinte forma: O evalm(A^(-1));

(7.3.11)

83 200

1 20 K 1 10

27 200 3 100 K 13 200 (7.3.11)

13 100 77 200

1 20

O rank mostra o nmero de linhas ou de colunas linearmente indepententes existentes na matriz (posto): O rank(A); 3 (7.3.12) O rank([[1,2],[3,6]]); 1 (7.3.13)

O map ser visto em maiores detalhes na parte de programao mas por enquanto nos serve para realizar a mesma operao para todos os elementos da matriz. O map(x->x^2,A); 1 4 9 16 25 36 81 64 49 O maple tambm capaz de resolver um sistemas de equao em forma de matriz. O comando o linsolve que encontra o vetor soluo x do sistema A*x = b. O b:=vector([14,12,46]); b := 14 12 46 (7.3.15) O linsolve(A,b); 1 2 3 (7.3.16) (7.3.14)

8. Programao bsica
A linguagem de programao do Maple e a linguagem que o usurio emprega quando est fazendo um clculo para resolver um certo problema, so as mesmas. Os comandos para resolver um problema especfico podero ser usados no momento da elaborao de um programa. E vice-versa, qualquer comando de programao pode ser usado no modo interativo. Existem alguns comandos que so frequentemente utilizados em programas e que raramente so utilizados de modo interativo. Por exemplo, o comando for do od para gerar iteraes, em geral, s empregado em programao. O Maple uma linguagem interativa, porque ele permite que cada comando venha imediatamente acompanhado de sua resposta. Isso no quer dizer que no seja possvel agrupar uma srie de comandos, cuja resposta dada por bloco. Na verdade, isso que faz um programa. Estamos chamando de ``uso interativo'', o modo comando-resposta que geralmente empregado para resolver problemas especficos. A ttulo de exemplo, vamos resolver dois problemas simples usando o modo interativo. A partir da soluo particular, vamos transform-la em um programa, que capaz de resolver o problema proposto e qualquer outro do mesmo tipo.

Um programa de Maple essencialmente um grupo de comandos pr-definidos que o Maple sempre executa em conjunto. O modo mais simples para criar um programa de Maple (ou procedimento) encapsular a sequncia de comandos que seriam usados de modo interativo. Vamos inicialmente ver os procedimentos iterativos.

Iteraes (Renato Portugal)


Existem duas formas de executar iteraes atravs do comando for: for contador from valor_inicial by intervalo to valor_final while expresso_booleana do comando_1; comando_2; comando_3; ... od; e for varivel in expresso while expresso_booleana do comando_1; comando_2; comando_3; ... od; Vejamos um exemplo da primeira forma. Os nmeros pares podem ser gerados da seguinte forma. O restart: O for i to 5 do 2*i; od; 2 4 6 8 10 (8.1.1) Na ausncia do comando from, o valor inicial do contador 1. Um forma quase equivalente do mesmo comando O for i from 2 by 2 to 10 do i; od; 2 4 6 8 10 Segue um exemplo da segunda forma de executar iteraes. Seja L uma lista de funes. O L:=[exp(x^2),x^3,ln(x)]; L := ex , x3, ln x Queremos calcular uma aproximao para integral definida de 1 a 2 dessas funes. O for i in L do Int(i,x=1..2)=evalf(int(i,x=1..2)); od;
2 2

(8.1.2)

(8.1.3)

ex dx = 14.98997601
1

2 1 2

x dx = 3.750000000

ln x dx = 0.386294361
1

(8.1.4)

Note que o contador i no comando acima recebe funes como valor. Vejamos o valor final de i. O i; ln x (8.1.5) Considere o seguinte problema. Suponha que temos uma lista de funes na varivel x. O L := [ x^2, g(x), sin(x), a*exp(x^2)]; L := x , g x , sin x , a e
2 x2

(8.1.6)

Queremos construir a lista das derivadas. O prximo comando no resolve o problema. O for i in L do diff(i,x); od; 2x d g x dx cos x 2 a x ex
2

(8.1.7)

A soluo atravs do uso do comando de iterao requer primeiramente a inicializao de uma lista nula. O derivadas := [ ]; derivadas := (8.1.8) Agora vem a iterao. O for i in L do derivadas := [ op(derivadas), diff(i, x) ]; O O od: Note que terminamos o comando for do od com dois pontos para que nada seja mostrado na tela. Os comandos dentro da iterao podem terminar com dois pontos ou ponto e vrgula. Isso no tem efeito algum em termos de mostrar resultados na tela. Vejamos o resultado. O derivadas; 2 d 2 x, g x , cos x , 2 a x ex (8.1.9) dx O valor que o contador assume no final da iterao pode ser importante, como o caso no seguinte problema. Qual o maior nmero primo menor que 808? O for i from 808 by -1 while not isprime(i) do od; O valor do contador contm a informao que desejamos: O i; 797 (8.1.10) Exceto o do od, todos os outras partes so opcionais. Vejamos um exemplo do comando while. Suponha que N tem o valor 68. O N := 68; (8.1.11)

N := 68 Queremos dividir N por 2 enquanto N for par. O while type(N,even) do N := N/2 od; N := 34 N := 17

(8.1.11)

(8.1.12)

Existem dois nomes especiais para serem usados dentro de iteraes que so break e next. A varivel break faz com que a iterao seja imediatamente interrompida. Por exemplo, no comando seguinte conseguimos interromper a iterao sem que o contador tenha um valor final. O i:=0; i := 0 (8.1.13) O do i:=i+1; O if i=2 then break fi; O O od;

i := 1 i := 2 (8.1.14)

A varivel next por sua vez no interrompe a iterao, mas quando avaliada faz com que uma volta seja pulada. Vamos imprimir os nmeros mpares da seguinte forma. O for i to 10 do if type(i,odd) then next fi; O print(i); O O od; 2 4 6 8 10 (8.1.15)

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 O add( a[i]*x^i, i=0..5 ); a0 Ca1 x Ca2 x2 Ca3 x3 Ca4 x4 Ca5 x5 (8.1.16) O add( sin(i), i=[theta,omega,tau]); sin Csin Csin (8.1.17)

Procedimentos
J vimos procedimentos que definem funes. Vamos examinar agora como dar um nome e encapsular de forma eficiente uma sequncia de comandos. Vamos construir um procedimento, chamado plotdif que plota uma expresso f(x), junto com sua derivada f '(x), no intervalo a, b . Interativamente podemos computar a derivada da funo utilizando diff e plotar as duas funes utilizando plot . Por exemplo: O y:=x^3-4*x^2-3*x-4; 3 2 y := x K4 x K3 x K4 (8.2.1) O dy:=diff(y,x); dy := 3 x K8 x K3 O plot([y,dy],x=-2..7,color=[red,blue]);
2

(8.2.2)

120

100

80

60

40

20

K 2

K 1 K 20

3 x

O seguinte procedimento combina a sequncia de passos 1. Grficos simultneos O plotdiff:=proc(y,x,a,b) local dy; O dy:=diff(y,x); O

O plot([y,dy],x=a..b,color=[blue,black]); O end; plotdiff := proc y, x, a, b local dy; dy := diff y, x ; plot y, dy , x = a ..b, color = blue, black end proc O plotdiff(x*sin(x),x,-2,2);

(8.2.3)

1.5

0.5

K 2

K 1 K 0.5

1 x

K 1

Este procedimento pode agora ser utilizado em outras rotinas. A declarao local assegura que dy uma varivel local, ou seja, este nome no ter qualquer atribuio fora do procedimento. Vrios dos comando iterativos apresentados na seo anterior podem ser reescritos na forma de procedimentos. Consideremos no prximo exemplo um procedimento que devolve o valor absoluto de um nmero, que vamos chamar de ABS (para distinguir de abs, que j est definido pelo Maple) 2.Valor absoluto de um nmero O ABS:=proc(x) if x<0 then O -x; O

O else x; O fi; O O end; ABS := proc x if x ! 0 then Kx else x end if end proc O ABS(-4.3); O ABS(3); 4.3 3

(8.2.4) (8.2.5) (8.2.6)

O procedimento ABS no pode lidar com uma entrada no-numrica: O ABS(a);


Error, (in ABS) cannot determine if this expression is true or false: a < 0

Como o sistema no sabe nada sobre a, no sabe o que fazer com ele. Em tais casos o procedimento deveria ser capaz de retornar a entrada no avaliada. Para obter isso notemos o seguinte exemplo: O 'ABS'(A); ABS A (8.2.7) Estas aspas simples fazem com que a avaliao de ABS seja retardada. Portanto, podemos modificar o procedimento ABS para a seguinte forma; O ABS:=proc(x) if type(x,numeric) then O if x<0 then -x else x fi; O else O 'ABS'(x); O fi O end; O ABS := proc x if type x, numeric then if x ! 0 then Kx else x end if else 'ABS' x end if end proc O ABS(a); ABS a 3. Razes de um polinmio Vamos construir um procedimento que plota razes reais e complexas de um polinmio O raizplot:=proc(p::polynom(constant,x)) O local R, points; R:=[fsolve(p,x,complex)]; O points:=map(z->[Re(z),Im(z)],R); O O plot(points,style=point,symbol=circle); O end; (8.2.9)

(8.2.8)

(8.2.10)

raizplot := proc p:: polynom constant, x local R, points; R := fsolve p, x, complex ; points := map z/ Re z , Im z , R ; plot points, style = point, symbol = circle end proc O y:=x^8-3*x^4+4*x^3-x^2+x-5; 8 4 3 2 y := x K3 x C4 x Kx Cx K5 O raizplot(y);

(8.2.10)

(8.2.11)

0.5

K 1.5

K 1

K 0.5

0.5

K 0.5

K 1

O comando randpoly gera um polinmio randmico: O y:=randpoly(x,degree=120); y := 87 x115 K56 x76 K62 x25 C97 x10 K73 x2 O raizplot(y);

(8.2.12)

0.5

K 1

K 0.5

0.5

K 0.5

K 1

9. Apndice: Referncias Bsicas Worksheets


Nos microcomputadores com o Maple instalado, a worksheet disparada clicando-se no cone do programa. Em outros sistemas, ela disparada pelo comando xmaple (ou maple) dado no sinal de pronto do sistema operacional. Ela o principal meio para gravar e ler os trabalhos desenvolvidos no Maple. A worksheet utiliza os recursos de janelas para facilitar interao do usurio com o Maple. Por exemplo, um comando batido errado pode ser facilmente corrigido voltando-se o cursor para a posio do erro e substituindo os caracteres errados. No h necessidade de digitar todo o comando novamente. Na worksheet, um usurio pode desenvolver a soluo de um problema usando o Maple, tecer comentrios, colar grficos e gravar todo o conjunto em um arquivo para ser lido e eventualmente modificado posteriormente. A worksheet pode ser impressa selecionando-se a opo print ou pode ser automaticamente convertida em um arquivo Latex. Um exemplo de uso das worksheets esse curso. Ele foi apresentado e as notas impressas a partir de worksheets. A worksheet um caderno virtual de anotaes de clculos. A vantagem do caderno virtual que qualquer coisa j escrita pode ser modificada sem necessidade de fazer outras alteraes. O resto do trabalho se ajusta automaticamente s mudanas. Essa idia a mesma dos processadores de textos que vm gradativamente substituindo as mquinas de escrever. A worksheet no um processador de textos. Ela funciona de maneira satisfatria como um editor de textos, e a parte referente ao processamento de textos pode ser feita no Latex, pois a worksheet tem interface com este processador. No desenvolvimento de um trabalho usando a worksheet, importante que ele seja feito em ordem e que todo rascunho seja apagado assim que cumprido seu objetivo. O comando restart pode encabear o trabalho. Depois de gravar a worksheet, o usurio

pode sair do Maple. No momento em que a worksheet lida novamente, os resultados que aparecem na tela no esto na memria ativa do Maple. necessrio processar os comandos novamente para ativar os resultados. A worksheet tem quatro tipos de linhas que so: as linhas de entrada de comando, geralmente precedidas pelo sinal de pronto ``>'', as linhas de sada dos comandos, as linhas de texto e as linhas de grfico. Algumas dessas linhas podem ser convertidas umas nas outras. Em geral, as linhas de entrada, de sada e de texto podem ser convertidas entre si. As verses de worksheet para estaes de trabalho e para microcomputadores no so iguais entre si, porm na grande maioria dos casos, tudo o que um usurio faz na worksheet de uma estao de trabalho pode ser feita na worksheet de um micro e vice-versa. As linhas de sada usam os recursos grficos das janelas para escrever as letras, os smbolos e desenhar os grficos. O sinal de integral aparece na tela como int, o somatrio como sum e as letras gregas como alpha, beta, gamma, ... . Existe uma opo que faz com que as linhas de sadas usem os mesmos caracteres do teclado. Essa opo til para gravar resultados em um arquivo ASCII (acrnimo de American Standard Code for Information Interchange). A worksheet pode ser gravada com a terminao .mws, sendo ela prpria um arquivo ASCII. Isso significa que ela pode ser enviada por correio eletrnico. claro que a pessoa que recebe tem que edit-la e retirar o cabealho do correio para que ela seja lida corretamente pelo Maple. Se a worksheet for salva com o a terminao .m , ela salva no formato interno do Maple. A verso V Release 4 e 5 e a verso 6 possuem diversos recursos para escrever textos. possvel criar sees e sub-sees. As letras podem ter diversos tamanhos e estilos, podem ser em itlico ou em negrito. possvel criar hiperlinks que conectam diversas worksheets. A partir desses hiperlinks pode-se navegar atravs das worksheets. Na prxima seo faremos uma breve exposio sobre a manipulao de worksheets.

Noes bsicas sobre a manipulao de worksheets


O ambiente de worksheet do Maple consiste em um conjunto de construtos de documentao: grupos de execuo, spreadsheets (planilhas), pargrafos, sees e hyperlinks. Grupos de execuo e spreadsheets ajudam o usurio a interagir com a mquina computacional do Maple. Eles fornecem os meios primrios pelos quais o Maple requisitado para executar tarefas especficas e mostrar os resultados. Pargrafos, sees e hyperlinks existem para ajudar o usurio a documentar e organizar os resultados.

Interagindo com Maple


Sequencias de comandos de Maple, chamadas grupos de execuo, servem para dar uma descrio algortmica de como um particular problema matemtico resolvido. Os grupos de execuo do os elementos fundamentais de computao da worksheet. Seu objetivo primrio combinar um ou mais comandos de Maple e seus resultados em uma nica unidade reexecutvel. Ele fcilmente reconhecvel pelo grande colchete imediatamente esquerda do prompt de comando. Um grupo de execuo criado atravs do menu insert . Exemplo1. Quando o cursor colocado em qualquer ponto do grupo de execuo, e o comando enter dado, as as operaes evidentes na expresso de entrada abaixo so

Grupos de execuo

realizadas em sequencia e o resultado apresentado no final : O restart: O y:=expand((x+4*a)^2-(x+4*a)^3+x^3); y := x2 C8 x a C16 a2 K12 x2 a K48 x a2 K64 a3

(9.2.1.1.1)

O cursor levado automaticamente para uma nova linha de comando em outro grupo de execuo. Note que para modificar os polinmios envolvidos na expresso acima, basta levar o cursor novamente linha de comando no grupo de execuo, fazer as modificaes e dar enter. Exerccio1. Modifique o lado direito da expresso anterior. Exemplo2. Um grupo de execuo pode conter vrios comandos, na mesma ou em diferentes linhas de comando: O y:=diff(sin(x)^x,x); z:=int(sin(x)^2,x); O plot(y+z,x=1..3); x cos x y := sin x x ln sin x C sin x z := K 1 1 sin x cos x C x 2 2

1.4 1.2 1.0 0.8 0.6 0.4 0.2 1 1.5 2 x 2.5 3

Exerccio2. (a) Volte ao Exemplo1 e faa um grfico y(x), para algum valor especfico de do parmetro a, utilizando o prompt em aberto. No esquea de definir y novamente no grupo de execuo anterior, casa contrrio a expresso para y ser aquela definida no Exemplo 2. (b) Coloque estes dois comandos em um mesmo grupo de execuo utilizando a opo join execution groups (ou F4) no menu Edit.

Spreadsheets
Spreadsheets ou planilhas similares s do Excell so disponveis nas verses W98, NT e Macintosh do Maple. Uma planilha simblica pode ser criada atravs do menu insert. Ela vai aparecer dentro de um grupo de execuo. Como exemplo vamos construir uma tabela

para integrais envolvendo e .

Exerccio 3. Reconstrua a planilha acima.


As frmulas nas clulas podem ser transportadas para linhas de comando da worksheet atravs de copy/paste e vice versa.

Construindo e executando comandos


H trs modos bsicos para criar comandos e resultados em Maple Comandos digitados e paletas Linhas de comando vazias podem ser criadas inserindo um grupo de execuo (utilizando o menu insert ou o smbolo [> no menu de ferramentas). Os comandos so executados escrevendo-os no prompt do Maple e pressionando enter. Algumas operaes e smbolos, assim como matrizes, podem ser introduzidos atravs de trs paletas. Elas podem ser ativadas a partir do menu View/Palletes. Exerccio 4. Utilize o comando inverse(A) do Maple para inverter a matriz 4 5 0 K 3 5 1 . 9 6 6 Nota: Para que esta operao seja possvel necessrio carregar antes o pacote de lgebra linear linalg, o que pode ser feito com o comando with(linalg) . Utilizando menus de contexto Resultados de Maple j existentes podem ser utilizados para sugerir e construir novas aes. Para obter na tela uma lista de aes sugeridas, marque e pressione o boto direito do mouse sobre o objeto (um resultado). A lista de aes resultante chamada um menu de contexto, e est customizada para refletir as propriedades do objeto selecionado. Exerccio 5. Reproduza em uma worksheet separada o procedimento abaixo. No caso selecionamos a segunda soluo e, escolhendo a opo copy transformamos-la para o formato de entrada (paste). O nome s1 foi adicionado manualmente. O solve(a*x^2-3*x+a,x); 1 3C 2 9 K4 a2 1 K C 9 K4 a2 3 ,K a 2 a 1 2 K2 1 Ka2 2 a (9.2.1.3.2.1)

O s1:=1/2*(2-2*sqrt(1-a^2))/a; s1 := (9.2.1.3.2.2)

Exerccio 6. (a) Considere resultado do primeiro grupo de execuo do Exerccio 5. Utilize o menu de contexto para determinar a integral das duas solues com relao a a. Faa com elas tenham respectivamente os nomes int1 e int2. (b) Considere o resultado do segundo grupo de execuo acima. Utilize o menu de

contexto para converter a igualdade para o formato LaTex (neste caso, em que a expresso aparece sozinha, no necessrio marcar a expresso). Exerccio 7. Utilize o menu de contexto para obter o grfico da funo y = sin x z . Dragging e Dropping O restart: Frmulas podem ser transportadas entre linhas de comando de qualquer worksheet diretamente por seleo e arraste. Uma expresso no formato de sada pode ser convertida para o formato de entrada simplesmente selecionando a expresso e arrastando-a para uma linha de comando vazia. .Grficos simultneos podem ser construdos arrastando-se a expresso no formato de se sada do Maple at o ambiente grfico existente, anteriormente criado via smartplots. Exerccio 8. Selecione o lado esquerdo da expresso que define s1, no formato de sada, no Exerccio 5 e arraste-o at uma linha de comando vazia. Repita o mesmo procedimento selecionando agora a expresso inteira. Qual a diferena ? v cos x2 Cz . Exerccio 9a. Utilize o menu de contexto para gerar o grfico de y := vx (Arraste a expresso acima para uma worksheet e depois a recupere com undo). Em seguida arraste o grfico para uma linha vazia sem o prompt. Modifique a expresso e arraste de volta a expresso para o ambiente grfico. Este procedimento s funciona para smartplots 3D. Exerccio 9b. Gere grficos simultneos em 2D utilizando arraste .Este procedimento s funciona com smartplots.

Organizando documentos
Documentos consistem de uma sequencia de pargrafos descritivos, grupos de execuo, spreadsheets e grficos. Estes componentes podem ser reorganizados em uma estrutura hierrquica baseada em sees de subsees. Marcadores de referncias, chamados bookmarks, podem ser colocados ao longo do documento e hyperlinks podem ser usados para saltar de um lugar a outro dentro de um documento. Trataremos esses tpicos com detalhe a seguir 3.2.1 Pargrafos e texto Um pargrafo em uma worksheet anlogo ao pargrafo encontrado em um tpico processador de textos. Pargrafos podem conter texto com estilos particulares, modo matemtico e grficos, incluindo cpias de sadas de Maple. Um pargrafo pode estar contido em um grupo de execuo . Pargrafos podem ser criados clicando Insert na barra de menus. O estilo dos pargrafos pode ser personalizado escolhendo Styles, do menu Format. Estilos em trechos selecionados podem escolhidos na barra de contexto. Dentro das reas de texto possvel inserir equaes formatadas e grficos. Exemplo 2. possvel escrever:

Para calcular a integral definida simblica


0

ex dx em Maple, digite:

> int(exp(x^2),x = 0 .. beta); O modo matemtico pode ser acionado escolhendo-se Maple input (Crtl+M) no menu Insert. Temos aqui algumas diferenas importantes nas duas ltimas verses de Maple. Maple V:

Note que a equao digitada de acordo com a sintaxe do Maple, em um campo dentro da barra de contexto. A expresso formatada aparecer depois de enter . Para voltar ao modo texto escolhe-se Text input (Crtl+T). Caso o usurio preferir, possvel digitar a expresso desejada numa linha de comando, convert-la para o modo matemtico escolhendo x na barra de contexto. A expresso pode ento ser selecionada e arrastada ou copiada para o local desejado do texto. possivel tambm arrastar a expresso diretamente no formato de entrada do Maple para um local onde o modo matemtico j esteja acionado dentro do texto (Crt-M). Maple 6: Note no menu Insert, que para reproduzir os resultados descritos no pargrafo anterior, deveramos selecionar Standard Math ou Crt-R, para criar uma entrada em modo matemtico dentro do texto. No entanto, o procedimento mais simples neste caso para digitar uma equao utilizar Maple Input ou Crt-M, que faz com que a equao aparea no formato de entrada do Maple no prprio texto, em vermelho. Em seguida a expresso pode ser convertida para o formato matemtico clicando em x esquerda na barra de contexto. Como no caso do Maple V, os modos de entrada ou sada podem ser alternados clicando-se no maple verde. Ou seja, os caracteres em vermelho so de entrada, no importando o formato (Maple input ou Standard Math input), so executveis clicando-se em ! na barra de contexto. Exerccio 10. Reproduza o Exemplo 2. 3.2.2 Sees O que voc acabou de expandir agora uma seo (section). No menu Insert, a escolha de Section abre outra seo. Subsection abre uma subseo dentro desta. Para transformar uma seo num pargrafo simples, no menu Format escolha Outdent. Use Indent para inserir um dado pargrafo dentro da seo Exerccio 11. Reproduza os cabealhos desta worksheet. Inclua subsees. Exerccio 12. Expanda e colapse todas as sees desta worksheet atravs do menu View. 3.2.3 Hyperlinks Um hyperlink uma pedao de texto que faz uma conexo, quando voc d um clic sobre ele, para uma outra parte da mesma worksheet, de outra worksheet ou de uma pgina de ajuda, sendo portanto uma ferramenta de navegao. Por default, Maple mostra os hyperlinks como um texto sublinhado na cor cyan. Por exemplo, clicando aqui o cursor levado para seo 2.1.2 sobre spreadsheets. Selecionando um nome de bookmark leva o cursor a um ponto especificado da worksheet. Um pr-requisito para hyperlinks so bookmarks. Um bookmark um nome que identifica uma particular localizao na worksheet. Podemos acessar uma lista de bookmarks da worksheet corrente selecionando Bookmarks no menu View. A seleo de um nome de bookmark move o cursor a uma posio especificada da worksheet. Um hyperlink deve estar associado a um nome de bookmark. Por exemplo, vamos supor que queremos fazer um hyperlink para a seo 2.2.1. O primeiro passo definir o bookmark. Para isso devemos levar o cursor para a linha da seo 2.2.1 desta worksheet, selecion Bookmarks no menu View e selecionar Edit Bookmark. Um nome adequado deve ento ser digitado. Em seguida devemos inserir o texto que deve aparecer no hyperlink. No menu Insert selecionamos Hyperlink, digitamos o texto e escolhemos da lista o nome adequado entre todos os bookmarks. Exerccio 13. Faa um hyperlink para alguma seo desta worksheet.

Regras de sobrevivncia
Esta seo oferece dicas sobre como evitar alguns enganos aos quais inciantes esto sujeitos a cometer. Mesmo para aqueles que j utilizaram o Maple mais de uma vez, ler este seo ser de alguma utilidade. Ela poder parecer um pouco redundante mas, por outro lado, vai poupar

esforos na tentativa de encontrar erros de sintaxe futuramente. Os problemas aqui descritos sero vistos nos captulos seguintes, porm estaro inseridos em contextos diferentes que vo supor que o leitor j os conhea. Os comandos do Maple normalmente terminam com um ponto-e-vrgula (;) seguido da tecla [Enter]. Com isso o Maple avalia a entrada, faz o clculo e imprime o resultado na tela. Ao invs de usar o ponto-e-vrgula, pode ser usado os dois pontos (:) no final do comando. Neste caso, o clculo feito como anteriormente, mas o resultado no colocado na tela. Seu uso previne que comandos executados como passos intermedirios de um estudo no ocupem muitas pginas com frmulas de pouco interesse em relao ao resultado final. Pode-se colocar alguns comandos na mesma linha. Estes comandos podem ser separados tanto por ponto-e-vrgula (;) como dois-pontos (:). possvel separar os clculos com vrgulas (,) sem que se faa associaes varivel. O Maple executa os clculos um aps o outro e coloca os resultados lado a lado. Para resultados curtos, este mtodo possue a vantagem de economizar espao na tela e permite a comparao de resultados numa mesma linha. Por exemplo: O 2+3; O a:=3; b:=5;

5 a := 3 b := 5

(9.3.1)

(9.3.2) (9.3.3)

O a*b, a+b, a^b; O a*b; a+b; a^b;

15, 8, 243 15 8 243

(9.3.4)

O resultado de at trs clculos anteriores podem ser acessados pelos comandos %, %% e %%%. Se aps o um clculo, voc mover o cursor para uma posio diferente na worksheet, o smbolo de percentagem no ir se refrir ao comando exatamente acima e sim ao ltimo clculo executado. O (c+d)^3: % = expand (%); c Cd 3 = c3 C3 c2 d C3 c d2 Cd3 (9.3.5) A expresso anterior mostra uma expanso do cubo da soma de duas variveis. O primeiro comando apenas formula a expresso a ser expandida e no imprime o resultado na tela. No segundo comando o resultado acessado duas vezes, primeiro sem expandir e depois expandindo. preciso tomar cuidado ao usar os smbolos de percentagem. Para pessoas poucou familiarizadas com estes operadores aconselhvel associar o resultado obtido uma varivel. Desta forma a varivel pode ser acessada posteriormente quantas vezes quiser e no apenas trs. No exemplo a seguir mostrado duas formas de ser fazer a associao das solues de uma equao do segundo grau a uma varivel:

O solve(x^2+x-1,x); K O solucoes1:=%;

1 1 C 2 2

5,K

1 1 K 2 2

(9.3.6)

solucoes1 := K

1 1 C 2 2

5,K

1 1 K 2 2 1 1 K 2 2

(9.3.7)

O solucoes2:=solve(x^2+x-1,x); 1 1 solucoes2 := K C 2 2

5,K

(9.3.8)

A manipulao de uma parte do resultado fica mais fcil ao associ-lo a uma varivel. Esta necessidade ocorre frequentemente em comandos como o solve que retorna mais de uma solucao. Um meio de acessar os elementos do resultado colocando o ndice da soluo desejada entre colchetes ([]). O x1:=solucoes1[1]; 1 1 x1 := K C 5 (9.3.9) 2 2 A princpio esta uma forma aparentemente boa, porm pode dar problemas depois: a ordem das solues retornadas pelo comando solve no fixa. Portanto executando o comando novamente, pode ser que a ordem venha trocada. Neste caso se tivermos interesse, por exemplo, na soluo de menor valor, poderamos usar o comando min. Para isto todas as variveis da expresso devero estar definidas. O x1:=min(solucoes1); 1 1 x1 := K K 5 (9.3.10) 2 2 O Maple VR5 e 6 distingue as aspas duplas (") das aspas simples (') do plique (`) - ou acento grave. O primeiro serve para representar strings de caracteres. O segundo usado para retardar uma avaliao matemtica e o terceiro tambm representa strings porm de utilidade diversificada em relao ao primeiro. O Maple avalia expresses matemticas automaticamente: O x:=Pi; x := (9.3.11) O sin(x/2); 1 (9.3.12)

Neste exemplo, a varivel x foi imediatamente substituda pelo seu valor. Algumas vezes no desejado que isto acontea. As aspas simples servem para impedir que esta avaliao se efetue. E neste caso pode ser feito de duas formas: retardando a avaliao de x ou de toda a expresso sin (x): O expr1:=sin('x'/2);expr2:='sin(x/2)'; 1 expr1 := sin x 2 (9.3.13)

expr2 := sin

1 x 2

(9.3.13)

Nos clculos subsequentes a avaliao ser efetuada e o valor da varivel ser subtitudo. O expr1; expr2; 1 1 (9.3.14)

Pode-se colocar quantos nveis de retardo se desejar porm no comum utilizar mais de um. Seria mais simples limpar o contedo da varivel x em vez de colocar vrias aspas simples juntas. O ''x''; 'x' (9.3.15) O %; x O %; primeira vista, a funo do plique pode parecer igual s aspas simples. O 'x+1'; x C1 O `x+1`; xC1 (9.3.17) (9.3.16)

(9.3.18) (9.3.19)

Porm s quando foramos uma avaliao que percebemos a diferena. O eval('x+1'); C1 O eval(`x+1`); xC1

(9.3.20) (9.3.21)

Os caracteres contidos entre pliques no so interpretados como expresses matemticas, mas como um conjunto de caracteres. A avaliao no s no retardada, como se torna impossvel. Os pliques so normalmente usados para criar nomes de variveis que usem caracteres especiais. O `x/aux`:=3; x/aux := 3 (9.3.22) As aspas duplas, enfim, determinam um conjunto de caracteres associados a um texto tal como o ttulo de um grfico, uma mensagem a ser impressa na tela ou o nome de um arquivo no qual se deseja gravar algum resultado. O print(`Mensagem na tela!`); Mensagem na tela! (9.3.23) Alguns problemas frequentemente ocorrem por causa de variveis que foram inicializadas e foram

usadas em expresses posteriormente. Ao tentarmos resolver uma equao em x ocorre o seguinte problema. O solve(x^2-2*x,x);
Error, (in solve) a constant is invalid as a variable, Pi

Se olharmos algumas pginas antes vamos perceber que a varivel x recebeu o valor . Em nenhum momento esta varivel teve o seu contedo apagado e, consequentemente, ele se mantm. Uma forma de limpar o contedo de uma varivel associar esta varivel a ela mesma com um nvel de retardo. Se preferir apagar o contedo de todas as variveis usadas at o momento, o comanto restart executa esta tarefa. O x:='x'; x := x (9.3.24) Ou equivalentemente: O unassign('x'); Agora podemos resolver a equao em x. O solve(x^2-2*x,x); O

0, 2

(9.3.25)

Carto de referncia de comandos


denom( ) display( ) evalf(expr) evalf(expr,n) expand(expr) factor(expr) fsolve(eqn) Selects the denominator of a fraction Combines graphs of functions and points (require with( plots) ) Numercially evaluates the given expression to the default number of digits (10). Numercially evaluates the given expression to n digits Expands the given expression Factors the given expression Finds numerical (approximate) solutions to equations. fsolve(x^2=cos(x)+4,x=0..5) ifactor(n) Gives prime integer factorization for a given integer lhs(eqn ) Selects the left hand side of an equation implicitplot( ) Plots implicitly defined functions implicitplot(x^2/25 +y^2/9=1 , x=-5 . . 5,y=-5 . . 5,scaling=constrained); numer( ) Selects the numerator of a fraction plot( ) Plots functions defined by an algebraic expression: plot(3*x^2-8 , x=-5 . . 5 , y = -20 . . 40 ); Plots more than one function at a time: plot( [ 3*x^2-8 , sin(x) , cos(x) ] ,x=-5 . . 5 , y=-20 .. 40 ); Plots points: plot 2, 3 , K 5 , 1, K , x = K ..7, y = K ..7, style = point 2, 4 7 7 Plots parametric equations : plot( [cos(t), sin(t), t=0 . . 2*Pi] , x=-2..2, y=-2..2); rationalize(expr) Rationalizes the denominator of a given expression restart Clears Maple's memory of all definitions rhs(eqn ) Selects the right hand side of an equation simplify(expr) Simplifies the given expression solve(eqn) Finds exact solutions to equations, including literal equations and linear

systems. subs(x= v,expr) Substitutes the value v for x in the expression subs(x=4,3*x^2+8); with( ) Brings in additional libraries of functions. The standard constants are: Pi Caution: Do not use "pi", capital "P" is required exp(1) e I K 1 The names of the standard functions are: sqrt(x) x abs(x) x exp(x) ex ln(x) natural log log(x) common log (base 10) sin(x), cos(x), tan(x), cot(x), sec(x), csc(x) arcsin(x), arccos(x), arctan(x)

sine of x, etc. the inverse trig functions