Sei sulla pagina 1di 263

UNIVERSIDADE FEDERAL DA PARA IBA CENTRO DE CIENCIAS EXATAS E DA NATUREZA DEPARTAMENTO DE MATEMATICA

Introducao a ` Computacao Algebrica com o MAPLE

Lenimar Nunes de Andrade


lenimar@mat.ufpb.br verso 0.0 02/fevereiro/2002 a

Sumrio a
Prefcio a 1 Introduo ao Maple ca 1.1 Introduao . . . . . . . . . . . . . . . . . . . . . c 1.2 O menu principal . . . . . . . . . . . . . . . . . 1.3 A barra de ferramentas . . . . . . . . . . . . . . 1.4 Usando as telas de ajuda . . . . . . . . . . . . . 1.5 Usando as palhetas . . . . . . . . . . . . . . . . 1.6 Comentrios . . . . . . . . . . . . . . . . . . . . a 1.7 Operaoes aritmticas e tipos numricos bsicos c e e a 1.8 Constantes . . . . . . . . . . . . . . . . . . . . . 1.9 Variveis . . . . . . . . . . . . . . . . . . . . . . a 1.10 Atribuioes . . . . . . . . . . . . . . . . . . . . c 1.11 Avaliaao numrica . . . . . . . . . . . . . . . . c e 1.12 Expresses lgicas . . . . . . . . . . . . . . . . . o o 1.13 Funes matemticas . . . . . . . . . . . . . . . co a 1.13.1 Funoes bsicas . . . . . . . . . . . . . . c a 1.13.2 Funoes trigonomtricas e hiperblicas . c e o 1.14 Aspas e apstrofos . . . . . . . . . . . . . . . . o 1.15 Seqncias, conjuntos e listas . . . . . . . . . . ue 1.16 Concatenaao . . . . . . . . . . . . . . . . . . . c 1.17 Expresses previamente computadas . . . . . . o 1.18 Pacotes . . . . . . . . . . . . . . . . . . . . . . 2 Expresses algbricas, equaoes e funes o e c co 2.1 Substituiao . . . . . . . . . . . . . . . . . c 2.2 Simplicaao . . . . . . . . . . . . . . . . c 2.3 Expanso . . . . . . . . . . . . . . . . . . a 2.4 Fatoraao . . . . . . . . . . . . . . . . . . c 2.5 Equaoes e inequaoes . . . . . . . . . . . c c 2.6 Resoluao Numrica de Equaes . . . . . c e co 2.7 Soluoes inteiras para equaoes . . . . . . c c 2.8 Sistemas de equaes . . . . . . . . . . . . co 2.9 Funoes . . . . . . . . . . . . . . . . . . . c 2.9.1 Composio de funes . . . . . . . ca co
i

v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 3 4 4 6 6 7 7 7 9 10 11 12 12 12 13 16 17 18 19 19 20 25 27 30 34 35 36 39 42

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

ii

SUMARIO

2.9.2 O comando map . . . . . . . . . . 2.10 Polinmios . . . . . . . . . . . . . . . . . o 2.11 Outros comandos de simplicao . . . . ca 2.11.1 Racionalizao de denominadores ca 2.11.2 Convertendo expresses . . . . . o 2.11.3 Os comandos numer e denom . . .

. . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43 44 47 47 47 48 49 49 50 54 57 57 58 60 63 64 67 68 70 71 72 76 77 80 83 83 83 84 91 93 95 96 97 98 98 102 103 106 108 108 109 110 112

3 Vetores, Matrizes e Algebra Linear 3.1 O pacote LinearAlgebra . . . . . . . . . . 3.2 Vetores . . . . . . . . . . . . . . . . . . . . 3.3 Matrizes . . . . . . . . . . . . . . . . . . . 3.4 Matrizes Especiais . . . . . . . . . . . . . 3.5 Matrizes Inversas . . . . . . . . . . . . . . 3.6 Determinante, Trao e Matriz Transposta . c 3.7 Sistemas Lineares . . . . . . . . . . . . . . 3.8 Matrizes Escalonadas . . . . . . . . . . . . 3.9 Dependncia e Independncia Linear . . . e e 3.10 Bases . . . . . . . . . . . . . . . . . . . . . 3.11 Transformaes Lineares . . . . . . . . . . co 3.12 Ncleo de uma Transformaao Linear . . . u c 3.13 Polinmio Caracter o stico . . . . . . . . . . 3.14 Autovalores e Autovetores . . . . . . . . . 3.15 Polinmio Minimal . . . . . . . . . . . . . o 3.16 Forma Cannica de Jordan . . . . . . . . . o 3.17 Ortogonalizaao . . . . . . . . . . . . . . . c

4 Grcos a 4.1 Grcos de funoes y = f (x) . . . . . . . . . . . . . a c 4.1.1 Grcos simples . . . . . . . . . . . . . . . . a 4.1.2 Opoes do comando plot . . . . . . . . . . c 4.1.3 Construindo vrios grcos simultaneamente a a 4.2 Grcos denidos implicitamente . . . . . . . . . . a 4.3 Grcos de curvas parametrizadas . . . . . . . . . . a 4.4 Grcos em coordenadas polares . . . . . . . . . . . a 4.5 Grcos tridimensionais . . . . . . . . . . . . . . . a 4.5.1 Grcos de funes z = f (x, y) . . . . . . . a co 4.5.2 As opes do comando plot3d . . . . . . . co 4.5.3 Curvas de n vel . . . . . . . . . . . . . . . . 4.5.4 Grcos denidos implicitamente . . . . . . a 4.5.5 Grcos de superf a cies parametrizadas . . . 4.6 Outros grcos . . . . . . . . . . . . . . . . . . . . a 4.7 Animaoes . . . . . . . . . . . . . . . . . . . . . . . c 4.7.1 Animaoes bidimensionais . . . . . . . . . . c 4.7.2 Animaoes tridimensionais . . . . . . . . . . c 4.7.3 Outras animaes . . . . . . . . . . . . . . . co

SUMARIO

iii

4.8

Salvando grcos em diferentes formatos . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

113 115 115 115 117 118 119 120 122 122 125 126 128 130 132 132 134 136 138 140 140 142 143 147 147 150 151 152 154 156 157 157 159 160 162 166 166 169 171 172 173 174 175

5 Clculo Diferencial e Integral a 5.1 Limites . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Limites de funoes f (x) . . . . . . . . . . . . c 5.1.2 Limites no innito . . . . . . . . . . . . . . . 5.1.3 Limites laterais . . . . . . . . . . . . . . . . . 5.1.4 Limites de funoes de vrias variveis . . . . . c a a 5.2 Funoes cont c nuas . . . . . . . . . . . . . . . . . . . . 5.3 Derivadas . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Derivadas de funes de uma varivel . . . . . co a 5.3.2 Derivadas de ordem superior . . . . . . . . . . 5.3.3 Derivadas de funes de vrias variveis . . . co a a 5.3.4 O operador diferencial . . . . . . . . . . . . . 5.3.5 Derivadas de funes denidas implicitamente co 5.4 Integrais . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Integrais de funes de uma varivel . . . . . co a 5.4.2 Integrais denidas e imprprias . . . . . . . . o 5.4.3 Integrais duplas e triplas . . . . . . . . . . . . 5.5 Gradiente, Divergente, Rotacional e Laplaciano . . . 5.6 Somatrios, produtrios, sries de potncias . . . . . o o e e 5.6.1 Somatrios . . . . . . . . . . . . . . . . . . . o 5.6.2 Produtrios . . . . . . . . . . . . . . . . . . . o 5.6.3 Sries de potncias . . . . . . . . . . . . . . . e e 6 Equaoes Diferenciais c 6.1 Equaoes Diferenciais Ordinrias . . . . . . c a 6.2 Problemas de Valor Inicial . . . . . . . . . . 6.3 Sistemas de Equaes Diferenciais . . . . . . co 6.4 Soluao em Sries de Potncias . . . . . . . c e e 6.5 Equaoes Diferenciais Parciais . . . . . . . . c 6.6 Grcos de soluoes de equaoes diferenciais a c c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7 Problemas de Clculo e de Geometria Anal a tica 7.1 Operaoes elementares com grcos de funes . . c a co 7.2 Teorema do Valor Mdio . . . . . . . . . . . . . . e 7.3 Problemas de mximos e m a nimos . . . . . . . . . 7.4 Somas de Riemann . . . . . . . . . . . . . . . . . 7.5 Regras de Integrao . . . . . . . . . . . . . . . . ca 7.5.1 Integraao por substituiao . . . . . . . . c c 7.5.2 Integraao por partes . . . . . . . . . . . . c 7.5.3 Fraes parciais . . . . . . . . . . . . . . . co 7.6 Clculo de reas . . . . . . . . . . . . . . . . . . . a a 7.7 Geometria Anal tica Plana . . . . . . . . . . . . . 7.7.1 Pontos e retas . . . . . . . . . . . . . . . . 7.7.2 Circunferncias . . . . . . . . . . . . . . . e

iv

SUMARIO

7.8

7.7.3 Cnicas . . . . . . . . . . . o Geometria Anal tica Tridimensional 7.8.1 Pontos, Retas e Planos . . . 7.8.2 Esferas . . . . . . . . . . . .

. . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

178 186 187 192 195 195 198 206 211 215 222 225 225 231 234 234 236 238 239 243

8 Nooes de programao com o Maple c ca 8.1 A declaraao condicional . . . . . . . c 8.2 Estruturas de repetiao . . . . . . . . c 8.3 Tipos pr-denidos . . . . . . . . . . e 8.4 Procedimentos . . . . . . . . . . . . . 8.5 Variveis locais e globais . . . . . . . a 8.6 Procedimentos recursivos . . . . . . .

9 Grupos, Transformadas Integrais, Funes Complexas co 9.1 Grupos de Permutaes . . . . . . . . . . . . . . . . . . . co 9.2 Sries de Fourier . . . . . . . . . . . . . . . . . . . . . . . e 9.3 Transformadas Integrais . . . . . . . . . . . . . . . . . . . 9.3.1 Transformadas de Laplace . . . . . . . . . . . . . . 9.3.2 Equaoes Diferenciais e a Transformada de Laplace c 9.3.3 Transformadas de Fourier . . . . . . . . . . . . . . 9.4 Funoes Complexas . . . . . . . . . . . . . . . . . . . . . . c A Os pacotes do Maple B Outros itens B.1 Salvando e recuperando expresses . . . . o B.2 Gerando expresses nos formatos de outros o B.3 Calculando o tempo gasto na execuao . . c B.4 Listagem de funoes dos pacotes do Maple c Referncias Bibliogrcas e a . . . . . . . programas . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

247 247 248 249 250 253

Prefcio a
O Maple um programa de Computao Algbrica de uso geral que vem sendo desene ca e volvido desde 1981 na Universidade de Waterloo, no Canad. a Neste texto fazemos uma introduao geral a esse programa. Nosso principal objetivo c e abordar a maior parte dos assuntos vistos nos cursos bsicos das universidades: Clculo a a Diferencial e Integral, Clculo Vetorial, Algebra Linear e Geometria Anal a tica. Mas, abordamos assuntos mais avanados do que esses, como Grupos de Permutaes (no c co Cap tulo 9) e tambm assuntos mais elementares (como os do Cap e tulo 2). Os dois primeiros cap tulos apresentam brevemente o ambiente do Maple para o Windows da Microsoft e os conceitos bsicos necessrios ao entendimento dos demais. A a a dependncia entre os cap e tulos est representada no seguinte diagrama: a
: vv vv vv vv vv v / Cap tulo 4 v: vv vv vv vv vv / Cap tulo 5 / Cap tulo 3 / Cap tulo 9

Cap tulo 1

/ Cap tulo 2

/ Cap tulo 7

/ Cap tulo 6

/ Cap tulo 8

H muito sobre Computaao Algbrica e sobre o Maple na Internet, conforme poa c e demos ver nos endereos www.SymbolicNet.org do Symbolic Mathematical Computation c Information Center e em www.mapleapps.com do Maple Aplication Center. Nosso agradecimento aos professores X, Y, Z e W que leram a verso 0.0 e apresentaa ram sugestes e correoes. o c

Joo Pessoa, 2 de fevereiro de 2002 a Lenimar Nunes de Andrade

Cap tulo 1

Introduo ao Maple ca
Neste cap tulo apresentamos brevemente o ambiente do Maple para o sistema operacional Windows e algumas de suas funes e comandos bsicos. Juntamente com o co a cap tulo 2, que complementa o que est sendo apresentado aqui, constitui a base para o a entendimento dos demais cap tulos.

1.1

Introduo ca

O Maple um programa de Computaao Algbrica de uso geral que possui inmeros e c e u recursos numricos e grcos, alm de tambm funcionar como uma linguagem de proe a e e gramao. Ele vem sendo desenvolvido desde 1981 pela canadense Waterloo Maple Inc. ca para vrios sistemas operacionais. Com ele, poss realizar clculos que contenham a e vel a s mbolos como , ou 2 sem a necessidade de fazer aproximaes numricas ou realico e 2 zar simplicaes e clculos com expresses algbricas como ax + bx + c ou x3 + log(x) co a o e sem ser preciso atribuir valores numricos `s variveis ou constantes. Devido a essas e a a propriedades, poss encontrar solues exatas para problemas prticos que envolvam e vel co a resoluo de equaoes, derivadas, integrais, clculo matricial, etc, tudo isso integrado a ca c a recursos que permitem visualizaao de dados ou objetos planos ou tridimensionais. c Na verso 7 para Windows, quando ele chamado, aparece uma tela como a da Figura a e 1.1. Funcionando de modo interativo, o usurio vai digitando comandos ao lado de um a aviso (prompt) cujo formato padro um sinal de maior. Assim que um comando digitado a e sem erros encerrado, o ncleo do programa o executa. e u Os comandos so digitados em um ambiente prprio chamado folha de trabalho a o (worksheet) que pode ser gravada em disco atravs da opao File/Save ou File/Save As do e c menu principal ou ser carregada do disco com a opao File/Open. c Cada comando digitado deve terminar com um ; (ponto e v rgula) ou com : (dois pontos), seguido de Enter. Se o comando terminar com ponto e v rgula, o resultado da sua execuo ser mostrado logo em seguida. Se terminar com dois pontos, o resultado no ca a a ser mostrado, podendo car guardado para uso posterior. A digitaao de um comando a c pode se estender por mais de uma linha. O Maple sens e vel ao tipo das letras, ou seja, ele diferencia letras minsculas das u respectivas letras maisculas. Por exemplo, x considerado diferente de X. u e
1

CAP ITULO 1. INTRODUCAO AO MAPLE

Figura 1.1:

Exemplo 1.1 Ao lado do aviso do Maple digitamos o comando 3 + 5 + 1 e encerramos a linha com um ponto e vrgula. Ele calcula a soma e mostra imediatamente o resultado: > 3 + 5 + 1; 9 Se no for digitado ponto e vrgula e nem dois pontos no nal da linha, ento o Maple a a convenciona que o comando continua na linha seguinte. Aqui calculamos o valor de 1 + x + 3 + 4 5 + x 2 + 0 digitado em trs linhas: e > 1 + x + 3 > + 4 - 5 + x > - 2 + 0; 1 + 2x Se o comando for encerrado com dois pontos, ento o resultado obtido no mostrado a a e de imediato: > 6 + 3 - 2 + y:

1.2

O menu principal

Na apresentaao padro, na parte superior da tela aparece o menu principal, a barra c a de ferramentas e a barra de contexto (Figura 1.2). A barra de contexto alterada de e acordo com o que o programa estiver mostrando no momento.

1.3. A BARRA DE FERRAMENTAS

Figura 1.2:

O menu principal corresponde ` primeira linha da parte superior da tela (Figura 1.2) e a formado por vrios submenus: File, Edit, View, Insert, Format, Spreadsheet, Options, e a Window e Help. Para ter acesso a um item do menu, deve-se pressionar com o mouse em cima do item ou pressionar no teclado simultaneamente as teclas Alt e a letra que estiver sendo mostrada sublinhada no nome do item desejado. Por exemplo, para ter acesso ao primeiro item, o File, pressione com o mouse em cima dele ou pressione no teclado as teclas Alt e F simultaneamente (Figura 1.3).
Figura 1.3:

1.3

A barra de ferramentas

As principais opes do menu principal tambm podem ser executadas pressionando-se co e os botes da barra de ferramentas. o Os quatro primeiros botes da barra de ferramentas correspondem o `s operaoes de folha de trabalho em branco, abrir uma folha j existente, salvar e a c a

CAP ITULO 1. INTRODUCAO AO MAPLE

imprimir a folha atual; os prximos botes correspondem `s operaes de recortar, copiar e colar; o o a co os prximos dois botes correspondem a desfazer e refazer a ultima correao o o c realizada; os prximos trs botes correspondem ao modo de execuao do Maple: ino e o c sere frmulas matemticas sem execut-las, insere texto e insere comando executvel; o a a a os prximos dois botes correspondem a no endentar ou endentar o texto o o a digitado. O par de setas leva para a anterior ou para a prxima conexo do texto. o a O boto STOP o boto que pra o que estiver sendo executado. a e a a Os trs botes com lupas correspondem ` ampliaao ou reduao (mais zoom e o a c c ou menos zoom) do que estiver sendo mostrado; os trs ultimos botes correspondem a mostrar caracteres no imprim e o a veis, redimensionamento de janela e boto de recomear (restart). a c

1.4

Usando as telas de ajuda

As telas de ajuda (help) do programa so a maneira mais completa de se obter ina formaes sobre ele (Figura 1.4). So cerca de 3000 pginas de informaoes. Pode-se ter co a a c acesso a elas atravs da opao Help do menu principal ou digitando-se ao lado do aviso e c do programa um interrogao e pressionar Enter. ca Para obter informaoes espec c cas sobre algum comando, basta digitar um interrogao seguido do nome do comando e pressionando-se Enter. Por exemplo, para obter ca informao espec ca ca sobre a funao trigonomtrica cosseno, basta digitar: c e > ?cos Em geral, as telas de ajuda contm uma descriao detalhada do comando, vrios e c a exemplos de uso e referncias a comandos relacionados. e

1.5

Usando as palhetas

Uma outra alternativa de entrada de dados atravs do uso de palhetas (palettes). O e e Maple possui quatro palhetas: uma com s mbolos, uma com vetores, uma com matrizes e outra com expresses (Figura 1.5). o

1.5. USANDO AS PALHETAS

Figura 1.4:

Figura 1.5:

O acesso a elas se d atravs da opao View/Palettes do menu principal. a e c

CAP ITULO 1. INTRODUCAO AO MAPLE

Usar uma palheta como preencher um formulrio em branco, basta ir escrevendo nos e a campos marcados com um %? que so mostrados, pressionando-se a tecla Tab para pular a para o campo seguinte ou Shift Tab para voltar ao campo anterior. Deve-se pressionar Enter no nal.

1.6

Comentrios a

Na linha de comando do Maple, tudo o que for digitado ` direita do s a mbolo # ser a considerado um comentrio. Os comentrios so ignorados na execuo do programa, a a a ca servindo s para orientaao do usurio. o c a Exemplo 1.2 Exemplo de comentrio na digitao da folha de trabalho: a ca > # Este um exemplo de comentrio, n~o considerado e a a e > # como um comando para ser executado.

1.7

Operaoes aritmticas e tipos numricos bsicos c e e a

As operaoes aritmticas adiao, subtraao, multiplicaao, diviso e potenciao so c e c c c a ca a representadas por +, , , / e , respectivamente. A prioridade no clculo das operaoes a mesma usada na Matemtica: primeiro o a c e a que estiver entre parnteses, depois as potenciaoes, depois as multiplicaoes e divises e e c c o por ultimo as adies e subtraes. co co Exemplo 1.3 Exemplicando o uso das operaes aritmticas bsicas. co e a EXPRESSAO 1 + 2*3 (1 + 2)*3 6 + 9/3 + 2 2/(1 + 2(3 - 5)*8) VALOR 7 9 11 2/3 EXPRESSAO 4*32 (4*3)2 (6 + 9)/(3 + 2) 32 - 23 VALOR 36 144 3 1

Cada objeto algbrico, numrico ou grco no Maple possui um tipo. O tipo uma e e a e espcie de fam do objeto, agrupando objetos de propriedades semelhantes. e lia Entre os tipos numricos bsicos podemos destacar o tipo inteiro (integer) e o tipo e a real com ponto utuante (float). Um nmero formado por uma seqncia de algarismos u ue sem espaos em branco e sem ponto entre eles considerado do tipo inteiro. Um nmero c e u com ponto decimal utuante considerado do tipo real. Por exemplo, 144 considerado e e inteiro, enquanto que 144.00 considerado real. e importante observar a diferena entre reais e inteiros porque o programa calcula E c imediatamente as expresses que contiverem nmeros reais, mas mantm em forma inero u e cial (sem calcular) algumas expresses que envolvam exclusivamente nmeros inteiros. o u Por exemplo 2/3 (diviso de inteiros) mantido em forma de fraao, mas 2.0/3.0 (diviso a e c a de reais) aproximado imediatamente para 0, 6666666667, onde ele aparecer. e

1.8. CONSTANTES

1.8

Constantes

Algumas constantes pr-denidas so Pi (o famoso = 3, 14159 . . . ), gamma e a ( = 0, 57721 . . . ) e I (unidade imaginria). Mas, cuidado para no usar pi no lugar a a de Pi e nem i no lugar de I porque no so a mesma coisa. a a Tambm so consideradas constantes true e false (verdadeiro e falso) e infinity, e a representando o innito. A base do logaritmo natural (e = 2, 71828 . . . ) deve ser usada como sendo exp(1).

1.9

Variveis a

Uma varivel um lugar na memria identicado por um nome e serve para guardar a e o valores. Esse nome pode ser formado por letras minsculas ou maisculas, algarismos e u u o caracter sublinhado. O nome da varivel no pode comear com um algarismo. a a c So exemplos de nomes de variveis vlidos: x, y2, var11, T este, v inicial. a a a So exemplos de nomes invlidos: x#, 2y, var.11, vinicial. a a

1.10

Atribuies co

Um valor pode ser atribu a uma varivel com um comando varivel := valor. Por do a a exemplo, x := 2 atribui o valor 2 ` varivel x. Cuidado para no confundir com a a a a igualdade x = 2 que compara x com 2. A atribuiao x := f (x) redene o valor da varivel x como sendo o valor da funao f c a c calculado no valor anterior de x. Por exemplo, uma atribuiao como x := x + 1 faz com c que o valor da varivel x seja substitu pelo valor que o x j tinha acrescentado de 1. a do a Ao digitar o nome de uma varivel ` direita do aviso do Maple (o sinal de maior), a a seguido de um ponto e v rgula, em muitos casos faz o programa mostrar o seu valor. Exemplo 1.4 Inicialmente denimos o valor de x como sendo 2. > x := 2; x := 2 > x; # mostra o valor de x 2 Agora, acrescentamos 1 ao valor de x: > x := x + 1; x := 3 Comparamos o x com 4 (o x continua valendo 3): > x = 4;

CAP ITULO 1. INTRODUCAO AO MAPLE

3=4 Essa ultima igualdade deve ser entendida como uma expresso lgica a qual o Maple a o atribui um valor f alse (falso). Podemos fazer vrias atribuies simultaneamente. Para isso, basta listar as variveis a co a separadas por v rgulas e atribu -las uma lista de valores tambm separados por v e rgulas. Por exemplo, para atribuir simultaneamente os valores 1, 2, 3 `s variveis a, b, c, respeca a tivamente, basta digitar o comando de atribuiao: a, b, c := 1, 2, 3 . c Para fazer com que o programa esquea o valor de uma varivel x, deve-se fazer uma c a atribuia: x := x ou usar um comando unassign( x ). E poss usar o unassign c o vel com vrias variveis: unassign( var1 , var2 , var3 , . . . ). a a Para fazer com que o programa esquea tudo o que foi atribu anteriormente, c do basta usar um comando restart. Exemplo 1.5 Neste exemplo, limpamos inicialmente a lista de variveis do Maple a com um restart. Depois fazemos uma atribuio mltipla de valores a quatro variveis ca u a x, y, teste1 e teste2. > restart; # equivale a pressionar o restart da barra de ferramentas > x, y, teste1, teste2 := -1, -2, a, b; x, y, teste1, teste2 := 1, 2, a, b Agora, conferimos o valor atribudo a cada varivel, uma por uma: a > x; 1 > y; 2 > teste1; a > teste2; b Limpamos as variveis teste1 e teste2: a > unassign(teste1, teste2); > teste1; teste1 > teste2; teste2 E, nalmente, limpamos os valores de x e y:

1.11. AVALIACAO NUMERICA

> x, y := x, y; x, y := x, y > x; x > y; y

1.11

Avaliao numrica ca e

A avaliaao numrica de uma expresso X feita com o comando evalf(X). O Maple c e a e usa como padro uma quantidade de 10 casas decimais, mas poss obter resultado a e vel com qualquer quantidade de casas decimais, bastando para isso fazer o seguinte:
usar o evalf na forma evalf(X, n). Isso mostra X com n casas decimais. usar um comando do tipo Digits := n. A partir da todos os clculos numricos , a e so mostrados com n casas decimais. Digits uma varivel pr-denida do proa e a e grama que controla a quantidade de casas decimais utilizadas. Exemplo 1.6 Neste exemplo mostramos os valores de e 2 com vrias casas decimais. a

> Digits; 10 > Pi; > evalf(Pi); 3.141592654 > sqrt(2);

> evalf(sqrt(2)); 1.414213562 Uma atribuio Digits := 30 faz com que os resultados passem a ser mostrados com ca um novo padro de 30 casas decimais. a > Digits := 30; Digits := 30 > evalf(Pi); 3.14159265358979323846264338328

10

CAP ITULO 1. INTRODUCAO AO MAPLE

> evalf(sqrt(2)); 1.41421356237309504880168872421 Mas, com o evalf podes-e escolher a quantidade de casas decimais (diferente do padro, possivelmente) com o qual determinado resultado mostrado: a e > evalf(sqrt(2), 60); 1.41421356237309504880168872420969807856967187537694807317668 E, nalmente, o valor de com duzentas decimais! Obeserve que o Maple coloca uma barra invertida no nal de uma linha para indicar que ela continua na prxima. o > evalf(Pi, 200); 3.141592653589793238462643383279502884197169399375105820974944592307816\ 40628620899862803482534211706798214808651328230664709384460955058223\ 17253594081284811174502841027019385211055596446229489549303820

1.12

Expresses lgicas o o

Uma expresso lgica, avaliada em true ou f alse (verdadeiro ou falso), contm opea o e radores relacionais e operadores lgicos. o Os operadores relacionais so = (igual), < (menor), > (maior), <=(menor ou igual), a >= (maior ou igual) e <> (diferente) e os operadores lgicos so not (no), and (e), or o a a (ou), xor (ou exclusivo) e implies (implica). A ordem decrescente de prioridade na avaliaao de uma expresso lgica : c a o e 1. <, <=, >, >=, =, <> 2. not 3. and 4. or 5. xor 6. implies Alm de true e f alse, uma operao lgica tambm pode retornar um valor F AIL e ca o e para indicar que houve algum tipo de falha no clculo do valor da expresso. a a Uma expresso lgica pode ser calculada com um comando evalb(expresso) ou a o a is(expresso), conforme mostramos a seguir. a Exemplo 1.7 Avaliando algumas expresses lgicas com os comandos evalb ou is. o o > evalb(1 < 2); true

1.13. FUNCOES MATEMATICAS

11

> evalb(1 < 2 and 2 = 3); f alse > evalb(4 = 5 or 3 = 3); true Algumas expresses formadas por constantes e operadores lgicos podem ser avaliadas o o sem ser necessrio usar evalb ou outro comando: a > 4 < 3 implies 4 = 9; true > 1 < 2 xor 3 <> 9; f alse > 3 < 4 implies 4 = 9; f alse O comando is `s vezes mais eciente do que o evalb, conforme mostramos a seguir. a e O is desenvolve e simplica uma expresso algbrica, coisa que o evalb no faz. a e a > evalb( a^2 - b^2 = (a + b)*(a - b)); f alse > is(a^2 - b^2 = (a + b)*(a - b)); true Exemplo 1.8 Exemplicando o uso das operaes lgicas bsicas. Foi usado um coco o a mando evalb(expresso) para calcular o valor lgico de cada expresso. a o a EXPRESSAO VALOR 1<3 true 2=2 true true 3 < 5 or 3 = 5 4 <= 5 and not 3 <> 3 true true 3 = 3 implies 4 = 4 EXPRESSAO VALOR not (1 < 3) false 2 <> 2 false 3 < 5 and 3 = 5 false not 3 > 1 and not 3 < 1 false 3 = 3 xor 4 = 4 false

1.13

Funoes matemticas c a

O Maple possui muitas funoes matemticas pr-denidas, no s as funes elementac a e a o co res bsicas, como tambm muitas funoes especiais como as funes beta, gama, logaritmo a e c co integral, seno integral, dilogaritmo, funes de Bessel, etc. co Listamos nesta seao somente uma pequena parte das funoes bsicas. c c a

12

CAP ITULO 1. INTRODUCAO AO MAPLE

1.13.1

Funoes bsicas c a DESCRICAO Valor absoluto (mdulo) de x o Raiz quadrada de x Raiz de ndice n de x Exponencial de x Logaritmo natural de x Logaritmo de x na base b Logaritmo decimal de x Coeciente binomial n sobre r Fatorial de n; o mesmo que n! Mximo divisor comum a M nimo mltiplo comum u Mximo de {x, y, z, . . . } a M nimo de {x, y, z, . . . } Sinal de x Menor inteiro maior ou igual a x Maior inteiro menor ou igual a x Inteiro mais prximo de x o Parte inteira de x Parte fracionria de x a EXEMPLO abs(3) = 3 sqrt(16) = 4 root[3](8) = 2 exp(4) = e4 ln(e) = 1 log[3](8) = 3 log10(1000) = 3 binomial(5, 2) = 10 5! = 120 igcd(6, 14) = 2 ilcm(3, 5) = 15 max(2, 3, 1) = 1 min(2, 3, 1) = 3 signum(7) = 1 ceil(2.7) = 3 oor(2.7) = 2 round(2.7) = 3 trunc(2.7) = 2 frac(2.7) = 0.7

FUNCAO abs(x) sqrt(x) root[n](x) exp(x) ln(x) log[b](x) log10(x) binomial(n, r) factorial(n) igcd(m, n, p, . . . ) ilcm(m, n, p, . . . ) max(x, y, z, . . . ) min(x, y, z, . . . ) signum(x) ceil(x) oor(x) round(x) trunc(x) frac(x) 1.13.2

Funoes trigonomtricas e hiperblicas c e o DESCRICAO Seno de x Cosseno de x Tangente de x Secante de x Cossecante de x Cotangente de x Arco-seno de x Arco-cosseno de x Arco-tangente de x Arco-secante de x Arco-cossecante de x Arco-cotangente de x FUNCAO sinh(x) cosh(x) tanh(x) sech(x) csch(x) coth(x) arcsinh(x) arccosh(x) arctanh(x) arcsech(x) arccsch(x) arccoth(x) DESCRICAO Seno hiperblico de x o Cosseno hiperblico de x o Tangente hiperblica de x o Secante hiperblica de x o Cossecante hiperblica de x o Cotangente hiperblica de x o Arco-seno hiperblico de x o Arco-cosseno hiperblico de x o Arco-tangente hiperblico de x o Arco-secante hiperblico de x o Arco-cossecante hiperblico de x o Arco-cotangente hiperblico de x o

FUNCAO sin(x) cos(x) tan(x) sec(x) csc(x) cot(x) arcsin(x) arccos(x) arctan(x) arcsec(x) arccsc(x) arccot(x)

1.14

Aspas e apstrofos o

No Maple as aspas duplas " , o apstrofo e o apstrofo invertido (crase) so o o a utilizados com objetivos diferentes.

1.15. SEQUENCIAS, CONJUNTOS E LISTAS

13

as aspas so usadas para denotar seqncias de caracteres, conhecidas como strings. a ue Exemplo: X := "mensagem do tipo string". as crases podem ser usadas em nomes de variveis. Exemplo: teste := 2 faz o a mesmo efeito que teste := 2. os apstrofos so utilizados para retardar a execuo de comandos ou retardar subso a ca tituio de valores. Exemplo: y := x faz a atribuiao de x a y, e no a atribuiao ca c a c do valor de x a y.

Exemplo 1.9 > restart; > x := 9; y := 4; x := 9 y := 4 > r := x + y; r := 13 > s := x + y; s := x + y > t := x + y; t := x + 4 > u := x + y; u := 9 + y

1.15

Seqncias, conjuntos e listas ue

Uma seqncia de expresses (exprseq) uma relao de constantes ou expresses seue o e ca o paradas por v rgulas. Por exemplo 1, 2, x, x+1, y, cos(x), ln(2) uma seqncia. e ue Uma lista (list) uma seqncia entre colchetes e um conjunto (set) uma seqncia e ue e ue entre chaves. Por exemplo, [1, 2, x, x+1, y, cos(x), ln(2)] uma lista, enquanto e que {1, 2, x, x+1, y, cos(x), ln(2)} um conjunto. e Esses objetos diferenciam-se entre si pelas seguintes propriedades:
Em um conjunto no importa a ordem dos elementos. Nas listas e nas seqncias a a ue ordem dos elementos importante. e As listas e as seqncias podem ter elementos repetidos. Nos conjuntos, a repetiao ue c de elementos automaticamente eliminada. e Uma seqncia de seqncias uma seqncia. ue ue e ue

14

CAP ITULO 1. INTRODUCAO AO MAPLE

A quantidade de elementos de uma lista (ou conjunto) X dada por nops(X). e Exemplo 1.10 Denimos uma seqncia X e, a partir dela, denimos uma lista Y e ue um conjunto Z. No nal, calculamos a quantidade de elementos de Y e de Z. > X := 1, 1, 3, x, y, z, z, z; X := 1, 1, 3, x, y, z, z, z > Y := [X]; Y := [1, 1, 3, x, y, z, z, z] > Z := {X}; Z := {1, 3, x, y, z} > nops(Y); 8 > nops(Z); 5 Exemplo 1.11 Neste exemplo, denimos inicialmente trs seqncias X, Y e Z. A e ue seqncia Z formada por letras gregas que devem ser digitadas usando-se seus nomes ue e ou pressionando-se botes da palheta de s o mbolos. > X := a, b, c: > Y := m, n, p: > Z := epsilon, delta, kappa: A partir das seqncias denidas, constru ue mos uma seqncia de seqncias S, uma ue ue lista de listas L e um conjunto de conjuntos C. > S := X, Y, Z; # seqencia de seqencias u^ u^ S := a, b, c, m, n, p, , , > L := [[X], [Y], [Z]]; # lista de listas L := [[a, b, c], [m, n, p], [ , , ]] > C := {{X}, {Y}, {Z}}; # conjunto de conjuntos C := {{a, c, b}, {m, n, p}, { , , }} Algumas operaes podem ser realizadas com conjuntos como union (unio), intersect co a (interseo), minus (diferena) e subset (subconjunto). ca c Exemplo 1.12 Denimos dois conjuntos A e B e calculamos X = A B, Y = A B, Z = A B e testamos se Y A.

1.15. SEQUENCIAS, CONJUNTOS E LISTAS

15

> restart; > A := {1, 2, 3, 4}: B := {3, 4, 5, 6}: > X := A union B; X := {1, 2, 3, 4, 5, 6} > Y := A intersect B; Y := {3, 4} > Z := A minus B; Z := {1, 2} > Y subset A; true O i-simo elemento de uma lista (ou conjunto) X dado por op(i, X) ou por X[i]. No e e lugar de um unico valor i, podemos ter um intervalo de valores inteiros de i a j indicado por i..j. Exemplo 1.13 Inicialmente denimos uma lista X formada por expresses algbricas. o e > X := [sin(alpha), cos(beta), -1, 0, 1, a, b, c, 1+x+x^2, 1/y]; X := > X[1]; sin() > op(1, X); sin() > X[3]; 1 > op(3, X); 1 Denimos Y como sendo uma lista formada pelo oitavo, nono e dcimo elementos de e X: > Y := X[8..10]; Y := > X[1..4]; c, 1 + x + x2 , 1 y sin(), cos(), 1, 0, 1, a, b, c, 1 + x + x2 , 1 y

16

CAP ITULO 1. INTRODUCAO AO MAPLE

[sin(), cos(), 1, 0] Finalmente, denimos Z como sendo uma seqncia formada pelos quatro primeiros ue elementos de X: > Z := op(1..4, X); Z := sin(), cos(), 1, 0 O operador $ pode ser usado para indicar repetio de elementos. Por exemplo, x$n ca corresponde a n termos consecutivos iguais a x. Exemplo 1.14 Denimos uma lista L e uma seqncia S com repetio de vrios eleue ca a mentos. > L := [x$3, y$4, z, w$4]; L := [x, x, x, y, y, y, y, z, w, w, w, w] > S := 1$4, -3$2, Pi$5; S := 1, 1, 1, 1, 3, 3, , , , , O conjunto vazio representado por { } e uma lista vazia por [ ]. e

1.16

Concatenao ca

O operador || usado para concatenar nomes. Desse modo, x||y um novo nome de e e varivel chamado xy (que no tem nada a ver com o produto de x por y). a a Podemos tambm usar nome1 || nome2 || nome3 || . . . na forma e cat(nome1, nome2, nome3, . . . ). Exemplo 1.15 Usamos o operador de concatenao para denir as variveis mens e ca a teste. > x := 100; y := -45; x := 100 y := 45 > mens := "O valor de x " || x || " e o valor de y " || y; e e mens := O valor de x 100 e o valor de y 45 e e > mens; O valor de x 100 e o valor de y 45 e e > teste := O valor de x + y || (x + y); e teste := O valor de x + y 55 e

1.17. EXPRESSOES PREVIAMENTE COMPUTADAS

17

> teste; O valor de x + y 55 e Exemplo 1.16 A concatenao tambm pode ser realizada com um intervalo de valores ca e da forma m..n. Neste caso, cada valor do intervalo ser usado para formar um novo a nome. > restart; > x || (1..10); > "teste" || (1..5); > x := -3: x1 := 4: > y := x||1 + x||2;

# o mesmo que cat(x, 1..10) e x1, x2, x3, x4, x5, x6, x7, x8, x9, x10 # o mesmo que cat("teste", 1..5) e x2 := b: y := 4 + b teste1, teste2, teste3, teste4, teste5

1.17

Expresses previamente computadas o

As trs ultimas expresses que foram efetivamente computadas podem ser referenciadas e o com os s mbolos % (ltima), %% (penltima) e %%% (antepenltima). Essas expresses u u u o podem ser usadas na digitao de novos comandos. ca Exemplo 1.17 Calculamos o valor de sen 2 (/20) + cos2 (/20). Depois, somamos 3 ao resultado mostrado e calculamos sua raiz quadrada. > sin(Pi/20); sin > cos(Pi/20); cos > evalf((%)^2 + (%%)^2); 1.000000000 > z := % + 3; z := 4.000000000 > sqrt(%); 2.000000000 Tenha muito cuidado ao usar esses s mbolos. Eles se referem aos comandos que acabaram de ser executados e os comandos executados nem sempre seguem a mesma ordem na qual so mostrados. Ao carregar uma folha de trabalho elaborada em outro momento, a podem ser executados somente alguns comandos dessa folha. Assim, o % pode no se a referir ao ultimo comando da folha, se ele no tiver sido executado. a 1 20 1 20

18

CAP ITULO 1. INTRODUCAO AO MAPLE

1.18

Pacotes

Quando o Maple iniciado, ele carrega o seu ncleo (kernel). O ncleo corresponde a e u u aproximadamente 10% do programa e foi elaborado em linguagem C. E ele quem faz as operaoes aritmticas bsicas, interpreta os comandos digitados e mostra resultados. c e a A parte do programa que no faz parte do ncleo, cerca de 90% do total, foi escrito a u na prpria linguagem do Maple e consiste de duas partes: a biblioteca principal e um o conjunto de vrios pacotes (packages) separados. Assim como os comandos que fazem a parte do ncleo, os comandos da biblioteca principal so carregados automaticamente na u a hora da inicializao e esto prontos para serem usados. ca a O Maple possui vrios pacotes. Eles so agrupamentos de comandos com ns esa a pec cos. Tem pacote para construao de grcos (como o plots), para Algebra Linear c a (como o LinearAlgebra e o linalg), para a denio de objetos geomtricos (como ca e o geometry), etc. Uma relaao de todos os pacotes com breve descriao de cada um c c encontra-se no apndice A. e Para que um comando de um pacote possa ser utilizado, precisamos fornecer o nome do pacote que o contm. Isso pode ser feito fornecendo-se o nome do pacote seguido e do nome do comando entre colchetes: pacote[comando]. Uma expresso dessa forma a e chamada o nome completo do comando. Por exemplo, o nome completo do comando Determinant que faz parte do pacote LinearAlgebra LinearAlgebra[Determinant] e e o nome completo de IsEquilateral do pacote geometry geometry[IsEquilateral]. e Uma maneira mais prtica de se ter acesso aos comandos de um pacote digitar, antes a e de usar o comando, um with(pacote). Com isso, todos os comandos do pacote cam dispon veis sem ser necessrio escrevermos seus nomes completos. a Exemplo 1.18 Considere as trs seguintes atribuies feitas com alguns comandos do e co pacote LinearAlgebra: > d := LinearAlgebra[Determinant](M): > N := LinearAlgebra[InverseMatrix](M): > y := LinearAlgebra[CharacteristPolynomial](M, x): Veja como mais simples utiliz-los assim: e a > > > > with(LinearAlgebra): d := Determinant(M): N := InverseMatrix(M): y := CharacteristicPolynomial(M, x):

Se o with(pacote) for usado com um ponto e v rgula no nal, ento ele mostra uma a relao com todos os nomes de comandos do pacote. ca Para obter uma tela de ajuda com a descriao do pacote, basta digitar ?pacote, por c exemplo > ?LinearAlgebra e para obter informaes sobre um comando de um pacote, basta digitar ?pacote[comando] co ou ?pacote,comando ou, em muitos casos, simplesmente ?comando.

Cap tulo 2

Expresses algbricas, equaes e o e co funes co


Todo programa de Computaao Algbrica pretende ser eciente na parte de simplic e cao de expresses algbricas. Mas, essa uma parte dif de se obter a perfeiao, at ca o e e cil c e mesmo porque `s vezes o conceito de simplicidade algo subjetivo. a e Neste cap tulo introduzimos os comandos que simplicam, fatoram ou expandem uma expresso algbrica, mostramos como resolver equaoes e sistemas de equaes e como a e c co denir funoes. c

2.1

Substituio ca

Em uma expresso algbrica nas variveis x, y, . . . podemos substituir x por expr1, y a e a por expr2, etc. se usarmos um comando do tipo subs(x = expr1, y = expr2, . . . , expresso). a Exemplo 2.1 Na expresso algbrica E = x2 + y 2 + z 2 , inicialmente substitu a e mos x por 2. > restart; > E := x^2 + y^2 + z^2; E := x2 + y 2 + z 2 > subs(x = -2, E); 4 + y2 + z2 > E; x2 + y 2 + z 2 Observe que a expresso E no foi alterada com a substituio efetuada, porque no foi a a ca a feita uma nova atribuio de valor a E. ca > E := subs(x = a, y = b, E);
19

20

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

E := a2 + b2 + z 2 > E; a2 + b2 + z 2 Agora, a expresso E foi alterada com a troca de x por a e y por b e o resultado atribu a do a ela. Finalmente, substitu mos a, b e z por valores numricos. e > E := subs(a = -1, b = 3, z = -2, E); E := 14 Exemplo 2.2 Vamos fazer algumas substituies na expresso trigonomtrica denida co a e por y = 3 + tg (a)2 4 cos(2a). > y := 3 + tan(a)^2 - 4*cos(2*a); y := 3 + tan(a)2 4 cos(2a) > subs(a = x + 1, y); 3 + tan(x + 1)2 4 cos(2x + 2) > subs(tan(a) = sin(a)/cos(a), y); 3+ sin(a)2 4 cos(2a) cos(a)2

> subs(tan(a)^2 = sec(a)^2 - 1, y); 2 + sec(a)2 4 cos(2a) > subs(cos(2*a) = 2*cos(a)^2 - 1, tan(a) = sin(a)/cos(a), y); 7+ sin(a)2 8 cos(a)2 cos(a)2

> subs(cos(2*a) = cos(a)^2 - sin(a)^2, y); 3 + tan(a)2 4 cos(a)2 + 4 sin(a)2

2.2

Simplicao ca

A simplicaao fundamental na apresentao de muitos resultados. Para isso, o c e ca Maple possui os comandos simplify(expresso, opes) e combine(expresso, opes) a co a co onde opes opcional e pode ser usado para fazer suposio sobre as variveis envolvidas co e ca a (por exemplo, supor valores positivos). Nem sempre fcil denir o que seja uma expresso mais simples. Um critrio e a a e poderia ser: cancelar os fatores comuns ao numerador e denominador de uma fraao. c

2.2. SIMPLIFICACAO

21

Assim, ca fcil decidir quem o mais simples entre a e no to fcil escolher o mais simples entre a e a a

ab e a12 b12

1 ab e . Mas, note que j a 2 b2 a a+b

1 . a11 + ba10 + b2 a9 + b3 a8 + b4 a7 + b5 a6 + b6 a5 + b7 a4 + b8 a3 + b9 a2 + b10 a + b11 Exemplo 2.3 Simplicar cada expresso Expr1, Expr2, Expr3, Expr4 e Expr5. a > Expr1 := (x^6 (x^6 + 3*x^5 - 4*x^5 Expr1 := > simplify(Expr1); x2 + 3x + 11 x2 4x 1 > Expr2 := -(1/x^2+1/y^2)/(1/x^2-1/y^2) + (1/x^2-1/y^2)/(1/x^2+1/y^2); 1 1 1 1 + 2 2 2 2 x y x y Expr2 := + 1 1 1 1 2 + 2 2 2 x y x y > simplify(Expr2); 4 x2 y 2 y 4 + x4 - 3*x^4 - 42*x^3 - 153*x^2 - 15*x^4 + 56*x^3 + 15*x^2 + 3*x + 11) / - 4*x - 1);

x6 + 3x5 3x4 42x3 153x2 + 3x + 11 x6 4x5 15x4 + 56x3 + 15x2 4x 1

> Expr3 := ((p*x^2+(k-s)*x+r)^2 - (p*x^2+(k+s)*x+r)^2)/((p*x^2 + (k+t)*x+r)^2-(p*x^2+(k-t)*x+r)^2); Expr3 := > simplify(Expr3); s t > Expr4 := a^3/((a-b)*(a-c)) + b^3/((b-c)*(b-a)) + c^3/((c-a)*(c-b)); Expr4 := b3 c3 a3 + + (a b)(a c) (b c)(b a) (c a)(c b) Expr4 := b + a + c > Expr5 := (1 - (1-(y+1)/(x+y+1)) / (1-x/(x+y+1))) / ((y+1)^2 x / (1 + x/(y-x+1))*(x*(y+1)/(y-x+1) - x)); (px2 + (k s)x + r)2 (px2 + (k + s)x + r)2 (px2 + (k + t)x + r)2 (px2 + (k t)x + r)2

> Expr4 := simplify(Expr4);

22

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

1+y x+y+1 1 x 1 x+y+1 Expr5 := x(1 + y) x x yx+1 2 (1 + y) x 1+ yx+1 1 > Expr5 := simplify(Expr5); Expr5 := 1 x2 + x + xy + 1 + 2y + y 2

Uma das opoes do simplify pode ser um conjunto de restries em forma de igualc co dades envolvendo polinmios de uma ou vrias variveis. o a a Exemplo 2.4 Seja z = a3 c3 d4 . Queremos fazer em z a substituio de ac por k. ca > z := a^3*c^3*d^4; z := a3 c3 d4 > subs(a*c = k, z); a3 c3 d4 O comando subs no funciona porque a expresso ac no aparece explicitamente. a a a Mas, a substituio pode ser feita com uma simplicao de z com a restrio ac = k. ca ca ca > simplify(z, {a*c=k}); d4 k 3 Exemplo 2.5 Simplicar x4 + y 4 + z 4 com as restries xy = 2 e xz = 3. co > simplify(x^4 + y^4 + z^4, {x*y = 2, x*z = 3} ); x4 + 97 4 z 81

Exemplo 2.6 Calcular o valor de x3 + y 3 + z 3 sabendo que xyz = 27, x + y + z = 9 e xy + xz + yz = 27. > restart; > restricoes := {x*y*z = 27, x + y + z = 9, x*y + x*z + y*z = 27}: > simplify(x^3 + y^3 + z^3, restricoes); 81 S foi possvel usar o simplify neste caso porque as substituies so polinomiais (nas o co a variveis x, y e z). a

2.2. SIMPLIFICACAO

23

Exemplo 2.7 O Maple no cancela automaticamente raiz quadrada com quadrados, cona forme podemos observar a seguir. Se nesses casos o comando simplify for usado sem opes adicionais, ele pode no fazer nada com a expresso fornecida. co a a > restart; > y := sqrt(a^2 * ( b + 1)^2); y := > simplify(y); a2 (b + 1)2 Agora, observe o que acontecemos quando supomos que todos os valores envolvidos so a no-negativos. a > simplify(y, assume=nonnegative); a(b + 1) O Maple passa a no se preocupar se os valores envolvidos so positivos ou negativos a a se for usado com a opo symbolic. ca > simplify(y, symbolic); a(b + 1) Exemplo 2.8 Este exemplo semelhante ao anterior: usamos o simplify com diversas e opes para simplicar uma expresso que aparea raiz quadrada de um quadrado. co a c > x := sqrt((alpha - 1)^2); x := > simplify(x, assume=real); | 1| Suponhamos agora valores no intervalo [1, [, ou seja, 1. > simplify(x, assume=RealRange(1, infinity)); 1 Suponhamos agora valores no intervalo aberto ] , 1]. > simplify(x, assume=RealRange(-infinity, 1)); 1 Exemplo 2.9 Usamos o comando combine para escrever um produto de funes trigoco nomtricas como uma soma dessas funes. e co > y := cos(a)*cos(b): > y := combine(y); ( 1)2 Suponhamos inicialmente que os valores envolvidos sejam todos reais. a2 (b + 1)2

24

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

1 1 cos(a b) + cos(a + b) 2 2 O combine identica ocorrncias de sen (nx) ou cos(nx) em expresses. e o y := > z := 2*sin(x)*cos(x) + cos(x)^2 - sin(x)^2; z := 2 sin(x) cos(x) + cos(x)2 sin(x)2 > combine(z); sin(2x) + cos(2x) Exemplo 2.10 O combine detecta a ocorrncia de senos ou cossenos de somas ou difee renas. c > y := exp(sin(a)*sin(b))*exp(cos(a)*cos(b)); y := e(sin(a)sin(b)) e(cos(a)cos(b)) > combine(y); e(cos(ab)) Exemplo 2.11 O combine leva em considerao os dom ca nios das funes envolvidas. co Observe que ele no simplica de imediato a expresso L fornecida. a a > L := ln(x) + ln(y) - ln(z): > combine(L); ln(x) + ln(y) ln(z) Se for usada a opo symbolic, o combine passa a no se preocupar mais com os ca a dom nios das funes, efetuando a simplicao da expresso L sem maiores exigncias. co ca a e > combine(L, symbolic); ln xy z

O comando assume(propriedade) pode ser usado para estabelecer relaes ou proprico edades de determinadas variveis. Por exemplo, com um assume(a > 0) o Maple passa a a tratar o a como sendo um valor positivo. Depois de uma suposiao a respeito de uma varivel, o Maple passa a mostr-la acomc a a panhada de um til ` direita do nome da varivel. a a Exemplo 2.12 Inicialmente, tentamos simplicar uma soma de logaritmos sem fazer suposio sobre as variveis envolvidas. Neste caso, o combine no faz nada com a ca a a expresso fornecida. a > combine(5*log(u) + 3*log(v)); 5 ln(u) + 3 ln(v) Agora, suponhamos que u e v sejam positivos e apliquemos novamente o mesmo comando.

2.3. EXPANSAO

25

> assume(u > 0, v > 0); > combine(5*log(u) + 3*log(v)); ln(u 5 v 3 ) Observe que os nomes das variveis caram com um til ` direita de cada um, mas o a a programa fez a simplicao esperada: combinou os logaritmos em um s. ca o Exemplo 2.13 Vamos tentar combinar um produto de ra quadradas em uma s raiz. zes o O combine s funciona neste caso se forem dadas informaes adicionais sobre os valores o co envolvidos. Para isso, usamos um assume. > combine(sqrt(m - 1)*sqrt(n - 2)); m1 n2 > assume(m >= 1, n >= 2); > combine(sqrt(m - 1)*sqrt(n - 2)); (m 1)(n 2) Os exemplos usados nesta seao mostram a ecincia do Maple na simplicaao de c e c muitos tipos de expresses. No entanto ele tem suas limitaoes. Por exemplo, o proo c 4x 1 grama s simplica x o depois de escrever as potncias na base e, uma complicao e ca 2 1 desnecessria. Alm disso, ele no consegue escrever 2x + 2y na forma 2(x + y), porque, a e a para o programa, 2x + 2y o mais simples e ele no vai complicar algo que j simples. e a ae

2.3

Expanso a

Uma simplicaao pode ocorrer no s no sentido de diminuir o tamanho de uma c a o expresso. Em alguns casos necessrio desenvolver potncias e efetuar produtos, e, com a e a e isso, o tamanho da expresso pode aumentar signicativamente. O comando de uso geral a para expanso o expand(expresso), cujo uso exemplicamos nos exemplos a seguir. a e a Exemplo 2.14 Vamos expandir o produto (x3)(x4) e desenvolver o binmio (a+b)6 . o > expand((x-3)*(x-4)); x2 7x + 12 > expand((a + b)^6); a6 + 6a5 b + 15a4 b2 + 20a3 b3 + 15a2 b4 + 6ab5 + b6 Exemplo 2.15 Se for usado em uma frao, o expand atua apenas no numerador, posca sivelmente escrevendo a frao como soma de vrias fraes. ca a co > expand((x^2+x+1)/(x^2-5*x + 6)); x 1 x2 + 2 + 2 2 5x + 6 x x 5x + 6 x 5x + 6

26

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

Exemplo 2.16 Com uma funo trigonomtrica F , o expand desenvolve expresses do ca e o tipo F (x + y), F (x y) ou F (nx), usando as conhecidas frmulas do cos(x + y), cos(2x), o etc. > expand(cos(x+y)); cos(x) cos(y) sin(x) sin(y) > expand(cos(2*x)); 2 cos(x)2 1 > expand(cos(3*x)); 4 cos(x)3 3 cos(x) > expand(tan(5*x)); 5 tan(x) 10 tan(x)3 + tan(x)5 1 10 tan(x)2 + 5 tan(x)4 ` Exemplo 2.17 As vezes necessrio usar vrios comandos para simplicar uma unica e a a expresso. Neste exemplo usamos o simplify, o expand e o subs para obter que a cos(6x) + cos(4x) = cotg(x). sen (6x) sen (4x) > y := (cos(6*x) + cos(4*x))/(sin(6*x) - sin(4*x)); y := > y := simplify(y); y := > y := expand(y); y := cos(x) sin(x) cos(2x) + 1 sin(2x) cos(4x) + cos(6x) sin(4x) + sin(6x)

> y := subs(cos(x)/sin(x) = cot(x), y); y := cot(x) Se for usado um comando expand(expresso1, expresso2) ento a expresso1 exa a a a e pandida totalmente, mantendo-se inalteradas as ocorrncias da expresso2. e a Exemplo 2.18 Fornecemos uma expresso p(x) e a desenvolvemos de vrias maneiras: a a expanso completa, expanso mantendo-se inalteradas as potncias de x + 2 e expanso a a e a mantendo-se inalteradas as ocorrncias de senos e de cossenos. e > p(x) := (x + 2)^4 - 3*cos(x + 1)^2*(x + 2)^2 + 4*sin(x + 1)^2;

2.4. FATORACAO

27

p(x) := (x + 2)4 3 cos(x + 1)2 (x + 2)2 + 4 sin(x + 1)2 > expand(p(x)); # expans~o completa a x4 +8x3 +24x2 +32x+163 cos(x)2 cos(1)2 x2 12 cos(x)2 cos(1)2 x12 cos(x)2 cos(1)2 + 6 cos(x) cos(1) sin(x) sin(1)x2 +24 cos(x) cos(1) sin(x) sin(1)x+32 cos(x) cos(1) sin(x) sin(1) 3 sin(x)2 sin(1)2 x2 12 sin(x)2 sin(1)2 x12 sin(x)2 sin(1)2 +4 sin(x)2 cos(1)2 +4 cos(x)2 sin(1)2 > expand(p(x), x+2); (x+2)4 3(x+2)2 cos(x)2 cos(1)2 +6(x+2)2 cos(x) cos(1) sin(x) sin(1)3(x+2)2 sin(x)2 sin(1)2 + 4 sin(x)2 cos(1)2 + 8 cos(x) cos(1) sin(x) sin(1) + 4 cos(x)2 sin(1)2 > expand(p(x), cos, sin); x4 + 8x3 + 24x2 + 32x + 16 3 cos(x + 1)2 x2 12 cos(x + 1)2 x 12 cos(x + 1)2 + 4 sin(x + 1)2 Alm do expand, outro comando que pode ser usado para desenvolver fraoes o e c e normal(expresso, opes). Ele atua especialmente nos denominadores. Se for usado a co com a opao expanded ento ele expande tambm as expresses que estiverem nos nuc a e o meradores. Exemplo 2.19 Usamos o expand e o normal para expandir os produtos de polinmios o que aparecem no numerador e no denominador de uma funao racional dada. c > y := ((x + 1)*(x - 2)^2)/((x^2 - 4*x + 7)*(x -6)^3); y := > expand(y); x3 3x2 4 2 + 2 2 4x + 7)(x 6)3 3 (x (x 4x + 7)(x 6) (x 4x + 7)(x 6)3 > normal(y, expanded); x3 3x2 + 4 x5 22x4 + 187x3 774x2 + 1620x 1512 (x + 1)(x 2)2 (x2 4x + 7)(x 6)3

2.4

Fatorao ca

O comando factor(expresso, opes) pode ser usado para fatorar a expresso dada. a co a Se no for fornecida nenhuma informao adicional atravs do parmetro opes, o Maple a ca e a co entende que a fatorao desejada para obter resultados com coecientes inteiros. ca e Exemplo 2.20 Fatorar x4 16 e x5 + x + 1. > x^4 - 16 = factor(x^4 - 16);

28

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

x4 16 = (x 2)(x + 2)(x2 + 4) > x^5 + x + 1 = factor(x^5 + x + 1); x5 + x + 1 = (x2 + x + 1)(x3 x2 + 1) Exemplo 2.21 O factor atua no numerador e no denominador de uma funo racional. ca > factor((x^2+x-2)/(x^2-5*x+6)); (x + 2)(x 1) (x 2)(x 3) > q := (x^4+4*x^3+10*x^2+12*x+5)/(x^4-14*x^3+67*x^2-120*x+50); q := > factor(q); (x2 + 2x + 5)(x + 1)2 (x2 4x + 2)(x 5)2 Para fatorar um polinmio em uma extenso Q[1 , , n ] dos racionais, basta foro a necer , , n como parmetros adicionais do comando factor. Isso faz com que a a fatorao obtida possua fatores no s com coecientes inteiros, mas tambm com coeca a o e cientes que sejam combinaes de potncias de 1 , , n . co e Exemplo 2.22 Inicialmente tentamos fatorar x2 2 como produto de polinmios com o coecientes inteiros. Pela resposta dada, vemos que isso no poss a e vel. > x^2 - 2 = factor(x^2 - 2); x2 2 = x2 2 Agora, fatoramos x2 2 permitindo que a resposta contenha fatores com coecientes envolvendo combinaes de 2. co > x^2 - 2 = factor(x^2 - 2, sqrt(2)); x2 2 = (x + 2)(x 2) x4 + 4x3 + 10x2 + 12x + 5 x4 14x3 + 67x2 120x + 50

Exemplo 2.23 Inicialmente, tentamos fatorar x3 5 como produto de polinmios com o coecientes inteiros. > factor(x^3 - 5); x3 5 Se quisermos uma resposta na qual os coecientes possam ser combinaes de potncias co e 3 3 o a ca e vel. de 5 (ou seja, polinmios em Q[ 5][x] ) ento a fatorao poss > factor(x^3 - 5, root[3](5));

2.4. FATORACAO
1 2 x2 + x 5( 3 ) + 5( 3 ) 1 x 5( 3 )

29

Obtivemos dessa forma que x3 5 = (x2 + 3 5x + 3 52 )(x 3 5)

A fatorao de polinmios tambm pode ser feita em corpos nitos. Para obter ca o e uma fatorao em Zp , p primo, basta usar um comando Factor(expresso) (com inica a cial maiscula) seguido de um mod p. u Exemplo 2.24 Inicialmente tentamos fatorar o seguinte p(x) em Z[x]. Vemos que a fatorao no possvel, ou seja, que ele irredut ca a e e vel. > p(x) := x^7 + 3*x^4 - 9*x^3 + 12*x^2 - 33; p(x) := x7 + 3x4 9x3 + 12x2 33 > factor(p(x)); x7 + 3x4 9x3 + 12x2 33 Agora, fatoramos p(x) em Z2 [x]. > Factor(p(x)) mod 2; (x + 1)5 (x2 + x + 1) Fatoramos tambm p(x) em Z5 [x]. e > y := Factor(p(x)) mod 5; y := (x + 1)(x2 + 2)(x4 + 4x3 + 4x2 + 4x + 1) Vamos conferir a ultima fatorao obtida. Inicialmente, vemos como ca p(x) com ca coecientes em Z5 . > p(x) mod 5; x7 + 3x4 + x3 + 2x2 + 2 E agora expandimos y em Z5 . Para isso basta acrescentar um mod 5 ao comando expand. > expand(y) mod 5; x7 + 3x4 + x3 + 2x2 + 2

30

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

2.5

Equaoes e inequaes c co

Uma equaao identicada pelo sinal de igualdade entre duas expresses. c e o O comando para resoluao exata de uma equaao o solve(equao). A resposta c c e ca fornecida pelo solve uma seqncia de ra encontradas. e ue zes Para facilitar referncias futuras, muitas vezes conveniente atribuir uma equao a e e ca uma varivel. Essa atribuio um comando da forma a ca e varivel := expresso1 = expresso2. a a a O primeiro membro (lado esquerdo, left hand side) de uma equao pode ser referencica ado com um comando lhs(equao) e o segundo membro (lado direito, right hand side) ca com um rhs(equao). Por exemplo, sendo E := x + 1 = 5 x, temos lhs(E) = x + 1 e ca rhs(E) = 5 x. Se no for fornecida uma expresso2 como segundo membro da equao o Maple a a ca assume que ele 0. e Exemplo 2.25 Vamos resolver a equao do primeiro grau 4x 1 = 7x + 9 de duas ca maneiras: diretamente atravs do solve e passo a passo atravs de operaes com as e e co expresses de cada membro da equao. o ca > eq := 4*x - 1 = 7*x + 9; eq := 4x 1 = 7x + 9 > solve(eq); 10 3 Agora, vamos resolver a mesma equao passo a passo. Inicialmente, passamos tudo ca para o primeiro membro e igualamos a zero. > eq := lhs(eq) - rhs(eq) = 0; eq := 3x 10 = 0 Somamos 10 aos dois membros. Equivale a passar o 10 do primeiro membro para o segundo membro com sinal trocado. > eq := lhs(eq) + 10 = rhs(eq) + 10; eq := 3x = 10 Dividimos tudo por 3. Equivale a passar o 3 para dividir o segundo membro. Com isso obtemos a raiz da equao. ca > eq := lhs(eq)/(-3) = rhs(eq)/(-3); eq := x = 10 3

Exemplo 2.26 O solve encontra solues inteiras, irracionais ou complexas de muitos co tipos de equaes. Aqui, resolvemos trs equaes do segundo grau. co e co

2.5. EQUACOES E INEQUACOES

31

> solve( x^2 + 4*x - 45 = 0);

# o mesmo que solve(x^2 + 4*x - 45) e 5, 9

> solve( x^2 + 4*x + 2 = 0 );

# o mesmo que solve(x^2 + 4*x + 2) e 2 + 2, 2 2 # o mesmo que solve(x^2 + 4*x + 5) e 2 + I, 2 I

> solve( x^2 + 4*x + 5 = 0);

Exemplo 2.27 Se a equao possuir mais de uma varivel, podemos escolher uma delas ca a para obter seu valor. Neste exemplo fornecemos uma equao EQ com trs variveis ca e a x, y e z e isolamos o valor de cada varivel. Para isso, basta especicar como segundo a parmetro do comando solve qual a varivel escolhida. a e a > EQ := a*x + b*y + z = 3; EQ := ax + by + z = 3 > x = solve(EQ, x); x= > y = solve(EQ, y); y= > z = solve(EQ, z); z = ax by + 3 Exemplo 2.28 Resolver as equaes exponenciais 2x = 16 e 22x 5 2x + 6 = 0. co > solve( 2^x = 16); ln(16) ln(2) > simplify(%); 4 > eq4 := 2^(2*x) - 5*2^x + 6 = 0; eq4 := 2(2x) 5 2x + 6 = 0 > solve(eq4); ln(3) , 1 ln(2) Exemplo 2.29 Resolver a equao logartimica log3 (5x + 4) log3 (x) log3 (x 2) = 1. ca ax + z 3 b by + z 3 a

32

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

> eq5

:= log[3](5*x + 4) - log[3](x) - log[3](x -2) = 1; eq5 := ln(5x + 4) ln(x) ln(x 2) =1 ln(3) ln(3) ln(3) x=4

> x = solve(eq5); Exemplo 2.30 Resolver as equaes irracionais co 2 = x + 1. 2x + 1 + 6x x+6 + x+1 = 7x + 4 e

> eq6 := sqrt(x + 6) + sqrt(x + 1) = sqrt(7*x + 4); eq6 := x + 6 + x + 1 = 7x + 4 > solve(eq6); 3 > eq7 := sqrt(2*x + sqrt(1 + 6*x^2)) = x + 1; eq7 := 2x + 1 + 6x2 = x + 1 > solve(eq7); 0, 2 A varivel booleana EnvAllSolutions controla a quantidade de ra mostradas. Se a zes ela for false (que o padro) so mostradas apenas algumas solues. Se ela for true so e a a co a mostradas todas as soluoes. Neste caso, o Maple usa constantes quaisquer cujos nomes c sempre iniciam com um caracter sublinhado como B1, B2, Z1, Z2, . . . . As que tem a letra B so as que podem assumir valores 0 ou 1, as que tem a letra Z so as que podem a a assumir quaisquer valores inteiros. Normalmente, essas constantes vm acompanhadas e de um til ` direita para indicar que elas so restritas a determinados valores. a a Exemplo 2.31 Resolver a equao trigonomtrica 2 sen (3x) + 2 = 0. ca e > eq8 := 2*sin(3*x) + sqrt(2) = 0; eq8 := 2 sin(3x) + > solve(eq8); > _EnvAllSolutions := true: > solve(eq8, x); 1 2 1 + B1 + Z1 12 2 3 Em um livro sobre trigonometria, uma resposta dessas seria apresentada na forma 1 1 12 + 1 + 2 k e 12 + 2 k, com k Z. 2 3 3 Para obter informaes sobre B1 e Z1 podemos usar o comando about: co 1 12 2=0

2.5. EQUACOES E INEQUACOES

33

> about(_B1); Originally B1, renamed B1 : is assumed to be: OrProp(0,1) > about(_Z1); Originally Z1, renamed Z1 : is assumed to be: integer Exemplo 2.32 Resolver a equao trigonomtrica sen (2x)+ sen (4x) = 0. Inicialmente, ca e vamos determinar s algumas solues. o co > _EnvAllSolutions := false: > eqtrig := sin(2*x) + sin(4*x) = 0: > solve(eqtrig); 1 1 1 , 0, , 2 3 3 Agora, vamos determinar todas as solues. co > _EnvAllSolutions := true: > solve(eqtrig); 1 1 1 + Z1 , Z2 , + Z3 , + Z3 2 3 3 Uma inequao pode ser resolvida de maneira semelhante a uma equao. Normalca ca mente, a resposta dada em forma de intervalo de R. O intervalo fechado [a, b] repree e sentado por RealRange(a, b), enquanto que o intervalo aberto ]a, b[ representado por e RealRange(Open(a), Open(b)). Exemplo 2.33 Resolver as inequaes x2 5x + 6 > 0 e |x + 5| 4. co > solve(x^2 - 5*x + 6 > 0); RealRange(, Open(2)), RealRange(Open(3), ) A soluo assim encontrada a unio dos intervalos ] , 2[ e ]3, [. ca e a > ineq := abs(x + 5) <= 4; ineq := |x + 5| 4 > solve(ineq, x); RealRange(9, 1) Ou seja, a soluo o intervalo [9, 1]. ca e x2 10x + 9 > 0. x2 12x + 35 > ineq := (x^2 - 10*x + 9)/(x^2 - 12*x + 35) > 0; Exemplo 2.34 Resolver a inequao ca ineq := 0 < x2 10x + 9 x2 12x + 35

34

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

> solve(ineq); RealRange(, Open(1)), RealRange(Open(5), Open(7)), RealRange(Open(9), ) Vemos assim que a soluo da inequao dada ] , 1[ ]5, 7[ ]9, [. ca ca e Quando o Maple no consegue resolver uma equao, ele costuma deix-la indicada a ca a na forma RootOf(equao, ca ndice), como no seguinte exemplo. Exemplo 2.35 Tentamos resolver as equaes x6 + x 1 = 0 e cos(x) = x2 com o co comando solve. Como isso no poss a e vel, o programa usa o RootOf nas respostas dadas. > solve(x^6 + x - 1 = 0); RootOf ( Z 6 + Z 1, index = 1), RootOf ( Z 6 + Z 1, index = 2), RootOf ( Z 6 + Z 1, index = 3), RootOf ( Z 6 + Z 1, index = 4), RootOf ( Z 6 + Z 1, index = 5), RootOf ( Z 6 + Z 1, index = 6) > solve(cos(x) = x^2); RootOf ( cos( Z) + Z 2 , label = L6)

2.6

Resoluo Numrica de Equaoes ca e c

Podemos obter soluao aproximada para uma equao com um comando c ca fsolve(equao, opes). Em opes pode aparecer o intervalo no qual a raiz da ca co co equao est sendo procurada, o valor da aproximaao inicial da raiz ou o mtodo de ca a c e resoluo a ser utilizado. ca Exemplo 2.36 Determinamos algumas razes da equao polinomial x5 3x2 + 1 = 0. ca Inicialmente so encontradas todas as ra reais. a zes > eqpoli := x^5 - 3*x^2 + 1 = 0; eqpoli := x5 3x2 + 1 = 0 > fsolve(eqpoli); .5610700072, .5992410280, 1.348046941 Agora, determinamos somente as razes que se encontram no intervalo [2, 0]. > fsolve(eqpoli, x=-2..0); .5610700072 E agora, determinamos aquelas que se encontram em [0, 2]. > fsolve(eqpoli, x=0..2);

2.7. SOLUCOES INTEIRAS PARA EQUACOES

35

.5992410280, 1.348046941 O padro do Maple mostrar 10 casas decimais. Vamos alterar essa quantidade para a e 30 casas decimais e observar como cam as soluoes positivas da equaao dada. c c > Digits := 30; Digits := 30 > fsolve(eqpoli, x=0..2); .599241027965685779228523068608, 1.34804694129133847685172810444 Exemplo 2.37 Resolver a equao cos(x) x2 = 0 atribuindo inicialmente o valor 1 ca para aproximao inicial da raiz. ca > restart; > eq := cos(x) - x^2 = 0; eq := cos(x) x2 = 0 > fsolve(eq, x=1); .8241323123 Vamos resolver a mesma equao atribuindo o valor 2 para aproximao inicial da ca ca raiz. > fsolve(eq, x=-2); .8241323123 Exemplo 2.38 Determinados valores podem ser evitados na resoluo da equao. A ca ca equao 2x = x2 admite as solues 2 e 4. Vamos determinar outra soluo. ca co ca > fsolve (2^x = x^2, x, avoid={x = 2, x = 4}); .7666646960 Assim, x = 0, 7666646960 a outra soluo real da equao dada. e ca ca # resolve evitando o 2 e o 4

2.7

Solues inteiras para equaoes co c

Para determinar solues inteiras de uma equao, o Maple possui o comando co ca isolve(equao). As equaoes que se buscam solues inteiras so conhecidas pelo nome ca c co a de equaes diofantinas. co Exemplo 2.39 Determinar todas as solues inteiras de x2 + y 2 = 1. co > isolve(x^2 + y^2 = 1); {y = 1, x = 0}, {x = 1, y = 0}, {y = 1, x = 0}, {x = 1, y = 0} Exemplo 2.40 Determinar a soluo geral das equaes diofantinas 2x + 5y = 9 e ca co 2x + 3y + 4z = 9.

36

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

> isolve(2*x + 5*y = 9); {y = 1 + 2 Z1 , x = 2 5 Z1 } > isolve(2*x + 3*y + 4*z = 7); {x = 2 3 Z1 2 Z2, y = 1 + 2 Z1, z = Z2} O Maple denota inteiros quaisquer por Z1, Z2, . . . Uma congruncia na varivel x do tipo f (x) b (mod p) pode ser resolvida com um e a comando msolve(f(x) = b, p). Exemplo 2.41 Determinar x que satisfaa x2 + x + 1 0 (mod 7). c > msolve(x^2 + x + 1 = 0, 7); {x = 2}, {x = 4} Exemplo 2.42 Resolver a congruncia linear 315x 12 (mod 501). e > msolve(315*x = 12, 501); {x = 140}, {x = 307}, {x = 474} Qualquer outra soluo congruente mdulo 501 `s solues encontradas. ca e o a co Exemplo 2.43 Resolver 3m 5 (mod 7) > msolve(3^m = 5, 7); {m = 5 + 6 Z1 }

2.8

Sistemas de equaoes c

Um sistema de equaoes pode ser resolvido de forma semelhante `s equaoes, bastando c a c escrever as equaes do sistema em forma de conjunto. Se for necessrio, podemos escrever co a tambm as variveis em forma de conjunto e fornec-lo ao comando de resoluo como e a e ca um segundo parmetro. a Exemplo 2.44 Resolver o sistema linear 3x + 5y = 1 2x + 4y = 9 > solve ( { 3*x + 5*y = 1, 2*x + 4*y = -9} ); {x = Exemplo 2.45 Resolver o sistema xy = 16 log2 x = log2 y + 2 49 29 , y = } 2 2

2.8. SISTEMAS DE EQUACOES

37

> sis := { x*y = 16, log[2](x) = log[2](y) + 2} sis := > solve(sis); {x = 8, y = 2} Exemplo 2.46 Resolver o sistema x2 + y 2 + z 2 = 1 xy + yz + zx = 0 x y + 2z = 1 > restart; > sist := {x^2 + y^2 + z^2 = 1, x*y + y*z + z*x = 0, x - y + 2*z = -1}; sist := {x y + 2z = 1, xy + yz + zx = 0, x2 + y 2 + z 2 = 1} > var := {x, y, z}; var := {x, y, z} > S := solve(sist, var); 6 3 2 S := {y = 0, z = 0, x = 1}, {z = 0, y = 1, x = 0}, {x = , z = , y = }, 7 7 7 2 6 3 {x = , z = , y = } 7 7 7 Observe que a resposta apresentada em forma de seqncia S de conjuntos, cada e ue conjunto representando uma soluo. Vamos conferir a resposta dada, substituindo cada ca soluo S[i] no sistema dado. ca > subs(S[1], sist); # substitui a primeira soluao c~ {0 = 0, 1 = 1, 1 = 1} > subs(S[2], sist); # substitui a segunda soluao c~ {0 = 0, 1 = 1, 1 = 1} > subs(S[3], sist); # substitui a terceira soluao c~ {0 = 0, 1 = 1, 1 = 1} > subs(S[4], sist); # substitui a quarta soluao c~ {0 = 0, 1 = 1, 1 = 1} Como obtivemos apenas sentenas verdadeiras como 0 = 0, etc. temos que todas as c solues apresentadas esto corretas. co a Para obter numericamente soluoes de sistemas podemos usar o fsolve. c ln(x) ln(y) = + 2, xy = 16 ln(2) ln(2)

38

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

Exemplo 2.47 Resolver o sistema no-linear a = 0 13x2 + xy + 3x + y 2 + 2z 1 x3 7xy 2 xy 3z 3 4xyz 2 101 = 0 4 2 3 2 x 2x + 15x zy + 10z + 2 y z 4 = 0 e testar a soluo obtida. ca > > > > > restart; eq1 := -13*x^2 + x*y + 3*x + y^2 + 2*z - 1 = 0: eq2 := x^3 - 7*x*y^2 - x*y - 3*z^3 - 4*x*y*z^2 - 101 = 0: eq3 := x^4 - 2*x^2 + 15*x - z*y^3 + 10*z^2 + 2*y - z - 4 = 0: sist1 := {eq1, eq2, eq3}; sist1 := {13x2 + xy + 3x + y 2 + 2z 1 = 0, x4 2x2 + 15x zy 3 + 10z 2 + 2y z 4 = 0, x3 7xy 2 xy 3z 3 4xyz 2 101 = 0} > S := fsolve(sist1); S := {z = 3.594600364, x = .3954409383, y = 3.185690959} > evalf(subs(S, sist1)); {0. = 0., .5 108 = 0., .54 107 = 0.} Pelo resultado obtido na substituio, temos que a soluo obtida realmente uma soluo ca ca e ca aproximada. Exemplo 2.48 Resolver o sistema no-linear a cos x + sen y ln x = 1 x3 e sen y = xy Obter uma resposta com 15 casas decimais e usar como aproximao inicial das ra os ca zes valores x = 0 e y = 0. > restart; > Digits := 15: > eq1 := cos(x) + sin(y)*ln(x) = 1; eq1 := cos(x) + sin(y) ln(x) = 1 > eq2 := x^3 - exp(-sin(y)) = x*y; eq2 := x3 e( sin(y)) = xy > sis := {eq1, eq2}: > ini := {x = 0, y = 0}: > sol := fsolve(sis, ini); sol := {x = .710694680392728, y = 2.35368429627066} Substituindo a soluo obtida no sistema dado: ca

2.9. FUNCOES

39

> subs(sol, sis); {cos(.710694680392729) + sin(2.35368429627067) ln(.710694680392729) = 1, .358962593390370 e( sin(2.35368429627067)) = 1.67275090868347} > evalf(%); {1.67275090868346 = 1.67275090868347, .999999999999999 = 1.} Observe que obtivemos igualdades aproximadas, logo a soluo obtida uma soluo aproca e ca ximada. Resolver o mesmo sistema usando como aproximao inicial os valores x = 1 e ca y = 10. > fsolve(sis, {x = 1, y = -10}); {x = .0796290718233735, y = 12.5676228869274} Observe que encontrada dessa forma uma outra soluo para o sistema. e ca

2.9

Funoes c

Existem duas maneiras de denir uma funao f (x) no Maple: c


com o operador seta:

f := x -> expresso na varivel x a a


com um comando unapply:

f := unapply(expresso, x) a Exemplo 2.49 Denir a funo f (x) = x2 e calcular f (3). ca > f := x -> x^2; f := x x2 > f(-3); 9 Se f for usada como valor de uma atribuio a uma varivel g, ento a varivel ca a a a tambm ca sendo uma funo igual ` funo f : e ca a ca > g := f; g := f > g(-3); 9

40

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

Exemplo 2.50 Aqui mostramos como uma funo no deve ser denida. Vamos tentar ca a 2 denir a funo h(x) = x + 1 da seguinte forma: ca > h(x) := x^2 + 1; h(x) := x2 + 1 Observe que isso no funciona. Por exemplo, o Maple no obtm a resposta 10 para a a e h(3): > h(-3); h(3) Tambm no obtm a resposta 5 para h(2): e a e > h(2); h(2) Assim, no foi denida uma funo h como estava sendo desejado. O que se fez foi a ca denir uma expresso algbrica de nome h(x) e atribuir o valor x^2 + 1 a essa expresso a e a algbrica. e Tambm no conseguimos denir essa mesma funo na seguinte forma: e a ca > y := x^2 + 1; y := x2 + 1 > y(2); x(2)2 + 1 Note que se y fosse funo de x o valor de y(2) deveria ser 5. Neste caso, y apenas o ca e nome da expresso algbrica x^2 + 1. a e Exemplo 2.51 Denimos uma funo f (t) que assume como valor a lista ca 2 3 [t , t t, 2t + 3]. (Parece a denio de uma funo vetorial, mas, para o Maple, ca ca uma lista no o mesmo que um vetor.) a e f := t -> [t^2, t^3 - t, 2*t + 3]; f := t [t2 , t3 t, 2t + 3] > f(1); [1, 0, 5] > f(-2); [4, 6, 1] Exemplo 2.52 Usamos o unapply para denir uma funo f (x) = x2 + 1 a partir de ca uma expresso algbrica. a e > f := unapply(x^2 + 1, x);

2.9. FUNCOES

41

f := x x2 + 1 > f(-3); 10 Agora vamos usar o unapply para denir outra funo h(t) obtida a partir de uma ca expresso algbrica na varivel t. a e a > expressao := 4*t^2 + 5*t - 1; expressao := 4t2 + 5t 1 > h := unapply(expressao, t); h := t 4t2 + 5t 1 > h(-1); 2 > h(2); 25 Funoes de vrias variveis tambm so denidas com o operador seta ou com o c a a e a comando unapply. Exemplo 2.53 Neste exemplo denimos as funes F (x, y) = (x2 y)(4x2 y) e G(u, v, w) = co 2 2 2 u +v +w . > F := (x, y) -> (x^2 - y)*(4*x^2 - y); F := (x, y) (x2 y)(4x2 y) > G := (u, v, w) -> u^2 + v^2 + w^2; G := (u, v, w) u2 + v 2 + w2 > F(2, 2); 28 > G(1, 2, -1); 6 Exemplo 2.54 Usamos o unapply para denir a funo g(x, y) = cos(xy). ca g := unapply(cos(x*y), x, y); g := (x, y) cos(xy) > g(Pi/8, -2);

42

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

1 2 2 E agora usamos o unapply para denir a funo f H(, ) = cos() + cos() a partir ca de uma expresso algbrica H. a e > H := cos(alpha) + cos(beta); H := cos() + cos() > fH := unapply(H, alpha, beta); f H := (, ) cos() + cos() > fH(Pi/6, -Pi/4); 1 1 3+ 2 2 2 2.9.1 Composio de funes ca co

A composiao de funoes feita com o operador @. Por exemplo, f @g a composta c c e e f g. A composta de f consigo mesma, n vezes, pode ser abreviada por f @@n. A funao inversa de f a funao f @@(1), mas o Maple s consegue calcul-la em c e c o a poucos casos (ln(x), exp(x) ou funo trigonomtrica ou hiperblica bsica). ca e o a Exemplo 2.55 Dadas as funes f (x) = 4x + 1 e g(x) = x2 x, calcular f g, g f , co f f f f e f f g g g. > f := x -> 4*x + 1; f := x 4x + 1 > g := x -> x^2 - x; g := x x2 x > (f@g)(x); 4x2 4x + 1 > (g@f)(x); (4x + 1)2 4x 1 > (f@f@f@f)(x); 256x + 85 > (f@@4)(x); 256x + 85 > (f@f@g@g@g)(x); # o mesmo que ((f@@2)@(g@@3))(x) e 16((x2 x)2 x2 + x)2 16(x2 x)2 + 16x2 16x + 5

2.9. FUNCOES

43

Exemplo 2.56 Calcular a composta f f f de f (x) =


10 vezes

1 + x consigo mesma.

> f := x -> sqrt(1 + x); f := x > (f@@10)(x);

1+x

1+

1+

1+

1+

1+

1+

1+

1+

1+

1+x

2.9.2

O comando map

O comando map(f , A) permite que uma funao f seja aplicada a cada elemento de c um conjunto A (ou lista). Exemplo 2.57 Aplicar f (x) = x2 aos elementos de A = {a, b, c, d}. > f := x -> x^2; f := x x2 > A := {a, b, c, d}; A := {a, b, c, d} > map(f, A); # calcula f(A) {a2 , b2 , c2 , d2 } > map(g, A); {g(a), g(b), g(c), g(d)} A funo g no foi denida, mas o map a aplica de forma simblica. ca a o Exemplo 2.58 Aplicar a funo cosseno e a funo x x/ a uma lista L dada. ca ca > L := [0, Pi/8, Pi/7, Pi/6, Pi/5, Pi/4, Pi/3, Pi/2]; 1 1 1 1 1 1 1 L := 0, , , , , , , 8 7 6 5 4 3 2 > map(cos, L); 1, cos > map( x->x/Pi, L); 1 , cos 8 1 1 , 3, cos 7 2 1 1 1 , 2, , 0 5 2 2

44

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

1 1 1 1 1 1 1 0, , , , , , , 8 7 6 5 4 3 2 A funo x x/ foi utilizada sem um nome; neste caso dizemos que ela uma funo ca e ca annima. o Se a funao F a ser aplicada pelo map possuir outros parmetros ou opoes, ento esses c a c a parmetros tambm podem ser passados pelo map. a e Exemplo 2.59 Calculamos F em um conjunto L com opes op1 e op2. co > L := {1, 2, 3, 4, 5}: > map(F, L, op1, op2); {F (1, op1, op2), F (2, op1, op2), F (3, op1, op2), F (4, op1, op2), F (5, op1, op2)}

2.10

Polinmios o

O Maple possui alguns comandos para usar com polinmios denidos por expresses o o algbricas: e degree(p, x) Grau do polinmio p(x) o coes(p, x) Seqncia de coecientes no-nulos de p(x) ue a sort(p) Ordena os termos segundo a ordem decrescente das potncias e collect(p, x) Soma os termos semelhantes de p(x) quo(f, g, x) Quociente da diviso de f (x) por g(x) a rem(f, g, x) Resto da diviso de f (x) por g(x) a gcd(f, g, x) Mximo divisor comum entre f (x) e g(x) a lcm(f, g, x) M nimo mltiplo comum entre f (x) e g(x) u gcdex(f, g, x, a, b) Mximo divisor comum estendido: alm de d(x) = M DC(f (x), g(x)), a e calcula a(x) e b(x) tais que a(x)f (x) + b(x)g(x) = d(x) Exemplo 2.60 Determine o grau e os coecientes de p(x) = x5 + 4x3 10x2 + 7. > p(x) := x^5 + 4*x^3 - 10*x^2 + 7: > degree(p(x), x); # Grau de p(x) 5 > coeff(p(x), x, 2); # Segundo coeficiente n~o-nulo a 10 > coeffs(p(x), x); # Coeficientes 7, 1, 4, 10

2.10. POLINOMIOS

45

> op(p(x));

# Seqencia de termos de p(x) u^ x5 , 4x3 , 10x2 , 7

Exemplo 2.61 Somar os termos semelhantes de ax5 + bx3 + x2 x + bx5 + 3x3 . > f := a*x^5 + b*x^3 + x^2 - x + 4 + b*x^5 - 4 + 3*x^3; f := ax5 + bx3 + x2 x + bx5 + 3x3 > f := collect(f, x); f := (a + b)x5 + (b + 3)x3 + x2 x Exemplo 2.62 Calcular o quociente e o resto da diviso do polinmio f pelo polinmio a o o g e o MDC entre eles. > f := x^4 + 2*x^3 - 5*x + 10: > g := x^2 + x + 3: > q := quo(f, g, x); # quociente q := x2 + x 4 > r := rem(f, g, x); # resto r := 22 4x Testando o quociente e o resto obtidos: > g*q + r; # deve ser igual a f (x2 + x + 3)(x2 + x 4) + 22 4x > simplify(%); x4 + 2x3 5x + 10 > gcd(f, g); # MDC 1 Exemplo 2.63 Dados dois polinmios f e g calcular o d := M DC(f (x), g(x)) e poo linmios a e b tais que a(x)f (x) + b(x)g(x) = d(x). o > f := x^2 - 5*x + 6: > g := x^3 - 6*x^2 + 12*x - 8: > d := gcdex(f, g, x, a, b); d := x 2 > a; 1x > b; 1

46

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

> a*f + b*g; (1 x)(x2 5x + 6) + x3 6x2 + 12x 8 > simplify(%); x2 Exemplo 2.64 Escrever um polinmio p de grau 2 na forma de quadrado de uma soma o mais uma constante. Igualamos p a um polinmio da forma a(x + b)2 + c e resolvemos o o sistema formado pelas equaes obtidas ao se igualar todos os coecientes a 0. co > > > > restart; p := 5*x^2 + 3*x + 7: q := a*(x + b)^2 + c; eq := p - q; eq := 5x2 + 3x + 7 a(x + b)2 c > eq := collect(eq, x); eq := (5 a)x2 + (2ab + 3)x + 7 ab2 c > sis := {coeffs(eq, x)}; sis := 5 a, 2ab + 3, 7 ab2 c > S := solve(sis); S := {b = > q := subs(S, q); 3 2 131 ) + 10 20 Conferindo se o q assim obtido igual a p: e q := 5(x + > expand(q); 5x2 + 3x + 7 Exemplo 2.65 Dado um polinmio qualquer, escrev-lo ordenado pela ordem decrescente o e das potncias. e > p := x^4 + 3*x + 2*x^2 + 4 - 7*x^5; p := x4 + 3x + 2x2 + 4 7x5 > p := sort(p); p := 7x5 + x4 + 2x2 + 3x + 4 3 131 , a = 5, c = } 10 20

2.11. OUTROS COMANDOS DE SIMPLIFICACAO

47

2.11
2.11.1

Outros comandos de simplicao ca


Racionalizao de denominadores ca

O comando rationalize(expresso) racionaliza uma expresso com radicais no dea a nominador. 2 5 . Exemplo 2.66 Racionalizar o denominador de 3+ 5 > x := (2 - sqrt(5))/(3 + sqrt(5)); 2 5 x := 3+ 5 > x: = rationalize(x); 1 x := (2 + 5)(3 + 5) 4 > x := expand(x); 11 5 x := 5 4 4 2.11.2 Convertendo expresses o

O comando convert(expresso, tipo) converte a expresso fornecida como primeiro a a parmetro para uma expresso equivalente do tipo indicado como segundo parmetro. a a a Em alguns casos pode simplicar a expresso dada. a Exemplo 2.67 Converter as funes hiperblicas senh, arcsenh, tgh e arctgh em exco o presses que contenham logaritmos naturais ou exponenciais. o > convert(sinh(x), exp); 1 x 1 1 e x 2 2e > convert(arcsinh(x), ln); ln(x + > convert(arctanh(x), ln); 1 1 ln(x + 1) ln(1 x) 2 2 > convert(tanh(x), exp); (ex )2 1 (ex )2 + 1 Exemplo 2.68 Uma lista pode ser convertida em um conjunto, ou vice-versa. > L := [1, 2, 3, 4]; L := [1, 2, 3, 4] > convert(L, set); {1, 2, 3, 4} x2 + 1)

48

CAP ITULO 2. EXPRESSOES ALGEBRICAS, EQUACOES E FUNCOES

2.11.3

Os comandos numer e denom

Os comandos numer(expresso) e denom(expresso) calculam o numerador e o denoa a minador de uma expresso dada. a Exemplo 2.69 Dada uma funo racional y na varivel x, calcular seu numerador e seu ca a denominador. > y := (3*x^2 + 6*x + 2)/(x*(x + 1)*(x + 2)); y := > denom(y); x(x + 1)(x + 2) > numer(y); 3x2 + 6x + 2 Substituir x por w somente no denominador da expresso y. a > y := numer(y)/subs(x = w, denom(y)); y := 3x2 + 6x + 2 w(w + 1)(w + 2) 3x2 + 6x + 2 x(x + 1)(x + 2)

Exemplo 2.70 A partir de uma lista dada, construir duas outras listas: uma com os numeradores e outra com os denominadores da lista dada. Para isso, basta usar o comando map combinado com o numer e o denom aplicado ` lista. a > lista := [3/4, a/b, -1/x, 1/2, 4, m, n, -3/5]; 3 a 1 1 3 lista := [ , , , , 4, m, n, ] 4 b x 2 5 > Numeradores := map(numer, lista); N umeradores := [3, a, 1, 1, 4, m, n, 3] > Denominadores := map(denom, lista); Denominadores := [4, b, x, 2, 1, 1, 1, 5]

Cap tulo 3

Vetores, Matrizes e Algebra Linear


3.1 O pacote LinearAlgebra

O Maple possui de dois grandes pacotes de comandos para uso em Algebra Linear: um mais antigo chamado linalg e outro mais recente chamado LinearAlgebra. Cada um tem mais de 100 funes, so independentes e executam quase as mesmas tarefas. Neste co a cap tulo exploraremos apenas o pacote LinearAlgebra. Podemos usar um with para ver os comandos de LinearAlgebra: > with(LinearAlgebra); [Add, Adjoint, BackwardSubstitute, BandMatrix, Basis, BezoutMatrix, BidiagonalForm, BilinearForm, CharacteristicMatrix, CharacteristicPolynomial, Column, ColumnDimension, ColumnOperation, ColumnSpace, CompanionMatrix, ConditionNumber, ConstantMatrix, ConstantVector, CreatePermutation, CrossProduct, DeleteColumn, DeleteRow, Determinant, DiagonalMatrix, Dimension, Dimensions, DotProduct, Eigenvalues, Eigenvectors, Equal, ForwardSubstitute, FrobeniusForm, GaussianElimination, GenerateEquations, GenerateMatrix, GetResultDataType, GetResultShape, GivensRotationMatrix, GramSchmidt, HankelMatrix, HermiteForm, HermitianTranspose, HessenbergForm, HilbertMatrix, HouseholderMatrix, IdentityMatrix, IntersectionBasis, IsDenite, IsOrthogonal, IsSimilar, IsUnitary, JordanBlockMatrix, JordanForm, LA Main, LUDecomposition, LeastSquares, LinearSolve, Map, Map2, MatrixAdd, MatrixInverse, MatrixMatrixMultiply, MatrixNorm, MatrixScalarMultiply, MatrixVectorMultiply, MinimalPolynomial, Minor, Multiply, NoUserValue, Norm, Normalize, NullSpace, OuterProductMatrix, Permanent, Pivot, QRDecomposition, RandomMatrix, RandomVector, Rank, ReducedRowEchelonForm, Row, RowDimension, RowOperation, RowSpace, ScalarMatrix, ScalarMultiply, ScalarVector, SchurForm, SingularValues, SmithForm, SubMatrix, SubVector, SumBasis, SylvesterMatrix, ToeplitzMatrix, Trace, Transpose, TridiagonalForm, UnitVector, VandermondeMatrix, VectorAdd, VectorAngle, VectorMatrixMultiply, VectorNorm, VectorScalarMultiply, ZeroMatrix, ZeroVector, Zip]

49

50

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

3.2

Vetores

Um vetor pode ser denido com um comando Vector. O primeiro nmero inteiro pou sitivo fornecido como parmetro desse comando ser considerado como sendo a dimenso a a a (nmero de coordenadas) do vetor. Se no for fornecida nenhuma outra informaao alm u a c e desse primeiro parmetro, ento o vetor ser criado com todas as coordenadas iguais a 0. a a a Se for fornecido um segundo parmetro, ento esse parmetro ser usado por cada a a a a coordenada do vetor. A ensima coordenada de um vetor v pode ser referenciada como sendo v[n]. e Exemplo 3.1 > v := Vector(3); # vetor nulo com 3 coordenadas 0 v := 0 0 > w := Vector(3, 5); # vetor com 3 coordenadas iguais a 5 5 w := 5 5 > w[1] := -13; w[2] := 40; w1 := 13 w2 := 40 > w; 13 w := 40 5

Se for fornecido uma lista (expresses separadas por v o rgulas e entre colchetes) como parmetro do comando Vector ento o nmero de elementos da lista dene a dimenso do a a u a vetor e os elementos dessa lista denem as coordenadas do vetor. A funao Dimension(v) c pode ser usada para se obter a dimenso do vetor v. a Exemplo 3.2 > w := Vector([4, -5, 11, 1, 0]); w := > Dimension(w); 4 5 11 1 0

3.2. VETORES

51

5 Outra maneira, mais simples, de se denir um vetor listar as coordenadas, separ-las e a por v rgulas e coloc-las entre os s a mbolos menor e maior (< e >). Dessa forma, o vetor w anterior pode ser denido assim: > w := < 4, -5, 11, 1, 0 >: As principais operaes com vetores esto listadas a seguir: co a VectorScalarMultiply(v, k) Produto do escalar k pelo vetor v. Pode ser usado na forma k*v. CrossProduct(v, w) Produto vetorial de v por w DotProduct(v, w) Produto interno de v por w. Pode ser usado na forma v w VectorAdd(v, w, a, b) Combinao linear av + bw. ca Se a = b = 1, ento a VectorAdd(v, w, 1, 1) pode ser abreviado para VectorAdd(v, w) que o mesmo e que v + w. VectorAngle(v, w) Angulo entre os vetores v e w (em radianos) VetorNorm(v, 2) Norma do vetor v. Esse comando admite um segundo parmetro que a deve ser igual a 2 para que a norma obtida seja a norma euclidiana usual. Exemplo 3.3 Neste exemplo, denimos dois vetores u e v e fazemos diversas operaes co denida tambm uma funo N orma(v) como sendo uma alternativa a com eles. E e ca V ectorN orm(v, 2). > u := <1, 1, -1>: # definiao do vetor u c~ > v := <5, 0, -3>: # definiao do vetor v c~ > > VectorScalarMultiply(v, 5); # produto de v pelo escalar 5 25 0 15 > Norma := v -> VectorNorm(v, 2); Norma := v LinearAlgebra : VectorNorm(v, 2) > Norma(u);

> alpha := VectorAngle(u, v);

# ^ngulo entre u e v a 4 := arccos 3 34 51 # converte alpha em graus

> convert(alpha, degrees);

52

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

> evalf(%);

degrees # nmero decimal que corresponde ao ^ngulo em graus u a 37.61611202 degrees

180

arccos

4 51

3 34

> w := CrossProduct(u, v);

# produto vetorial u x v 3 w := 2 5

> VectorAngle(w, u);

# verificando se w e u s~o ortogonais a 1 2 # verificando se w e v s~o ortogonais a 1 2 # convertendo o ^ngulo anterior para graus a 90 degrees

> VectorAngle(w, v);

> convert(%, degrees);

Exemplo 3.4 Apesar da grande semelhana, um vetor no deve ser confundido com uma c a lista. Neste exemplo, denimos um vetor e uma lista e usamos o comando whattype para detectar o tipo de cada um. > a := [1, 2, 3]: whattype(a); list > b := <1, 2, 3>: whattype(b); Vectorcolumn Neste caso, obteremos uma mensagem de erro se tentarmos usar um comando como CrossProduct(a, b). Exemplo 3.5 Neste exemplo denimos uma funo Misto(u, v, w) que calcula o proca duto misto de trs vetores u, v e w. Depois, calculamos o produto misto de a, b, c. e Misto := (u, v, w) -> DotProduct(u, CrossProduct(v, w)); M isto := (u, v, w) LinearAlgebra : DotP roduct(u, LinearAlgebra : CrossP roduct(v, w)) > a:=<1, 2, 3>: b:=<1, 1, 1>: c:=<0, 0, 1>: > [a, b, c] = Misto(a, b, c); [a, b, c] = 1

3.2. VETORES

53

Exemplo 3.6 Podemos usar o Maple para provar identidades vetoriais que `s vezes tem a uma vericao trabalhosa. ca Neste exemplo provamos a identidade u (v w) + v (w u) + w (u v) = 0. vlida para vetores do R3 . a > restart; > with(LinearAlgebra); > > u := <a, b, c>; v := <d, e, f>; w := <g, h, i>; a u := b c d v := e f g w := h i > M := CrossProduct(u, CrossProduct(v, w)); b(dh eg) c(f g di) M := c(ei f h) a(dh eg) a(f g di) b(ei f h) > N := CrossProduct(v, CrossProduct(w, u)); e(gb ha) f (ia gc) N := f (hc ib) d(gb ha) d(ia gc) e(hc ib) > P := CrossProduct(w, CrossProduct(u, v)); h(ae bd) i(cd af ) P := i(bf ce) g(ae bd) g(cd af ) h(bf ce) > simplify(M + N + P); 0 0 0

54

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

3.3

Matrizes

Uma matriz nula m n pode ser denida no Maple com um comando Matrix(m, n). > with(LinearAlgebra): > A := Matrix(2,4); A := 0 0 0 0 0 0 0 0

Depois de denida, podemos fazer referncia separadamente aos elementos da matriz e A. O elemento Aij na i-sima linha e j-sima coluna da matriz A pode ser referenciado e e como A[i, j]. Uma matriz tambm pode ser denida passando-se como parmetro do comando e a Matrix uma lista de listas de mesmo tamanho. Neste caso, cada lista fornecida ser a interpretada como sendo uma linha da matriz. Exemplo 3.7 Vamos denir uma matriz X, modicar os elementos X13 e X22 e listar a matriz modicada. > X := Matrix([[1,2,3],[4,5,6]]); X := 1 2 3 4 5 6

> X[2, 3]; # lista o elemento X ndice 23 6 > X[1, 3] := 0; X[2, 2] = -101; X1, 3 := 0 X2, 2 := 101 > X; 1 2 0 4 101 6 e Uma matriz (aij ) tambm pode ser denida fornecendo-se ao comando Matrix a sua ordem e uma funo f de duas variveis. Neste caso o elemento aij ser denido como ca a a sendo igual a f (i, j). Exemplo 3.8 Neste exemplo denimos uma matriz 2 2 cujo elemento da linha i e coluna j denido como sendo f (i, j) = i + j 10. e > f := (i,j) -> i+j-10: > Matrix(2,f); # o mesmo que Matrix(2, 2, f) e 8 7 7 6 Essa matriz tambm poderia ter sido denida na forma Matrix(2, (i,j)->i+j-10). e

3.3. MATRIZES

55

Exemplo 3.9 Denimos uma matriz 5 5 a partir de uma lei de formao Aij = g(i, j) ca onde g uma funo dada. e ca > g := (x,y)-> x - y + 1 + max(x, > > A := Matrix(5, 5, g); 1 4 A := 9 16 25 y)*(max(x, y) - 1):

2 5 10 3 6 11 8 7 12 15 14 13 24 23 22

17 18 19 20 21

Uma matriz tambm pode ser denida por colunas. Para isso, basta fornecer cada e coluna entre sinais de menor e maior, separ-las por barras verticais e envolver todas as a colunas por sinais de menor e maior. Exemplo 3.10 Neste exemplo denimos uma matriz M por colunas. > M := <<1,2,3> | <4,5,6> | <7,8,9> 1 2 M := 3 | <10,11,12>>; 4 7 10 5 8 11 6 9 12

Exemplo 3.11 Denir uma matriz A de ordem 9 9 linha por linha com o comando Matrix. Depois, denir uma outra matriz B := A2 (igual ` matriz identidade de ordem a 9). > restart; > with(LinearAlgebra): > A := Matrix([[c,b,d,e,a,e,d,b,c], [b,e,e,b,0,-b,-e,-e,-b], > [d,e,c,-b,-a,-b,c,e,d], [e,b,-b,-e,0,e,b,-b,-e], > [a,0,-a,0,a,0,-a,0,a], [e,-b,-b,e,0,-e,b,b,-e], > [d,-e,c,b,-a,b,c,-e,d], [b,-e,e,-b,0,b,-e,e,-b], > [c,-b,d,-e,a,-e,d,-b,c]]); c b d e a e d b c b e e b 0 b e e b c b a b c e d d e e b b e e b b e 0 a 0 a 0 a a 0 a 0 0 e b b e e b b e d e c b a b c e d b e e b 0 b e e b c b d e a e d b c Denio dos valores de a, b, c, d, e. O Maple racionaliza os denominadores. ca

56

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

> a := 1/sqrt(5); b := 1/2 *sqrt((5 - sqrt(5))/10); > c := (-1 + sqrt(5))/(4*sqrt(5)); d := (1 + sqrt(5))/(4*sqrt(5)); > e := 1/2 * sqrt((5 + sqrt(5))/10); 1 a := 5 5 1 b := 50 10 5 20 1 c := (1 + 5) 5 20 1 d := (1 + 5) 5 20 1 e := 50 + 10 5 20 Calcula B e no mostra na tela, pois o resultado extenso a e > B := A^2: Mostrando apenas o primeiro elemento B[1, 1] > B[1,1]; 1 7 1 (1 + 5)2 + + (1 + 5)2 40 10 40 Simplicando-o . . . > simplify(B[1,1]); 1 Simplicando todos os elementos da matriz B. > for i from 1 to 9 do > for j from 1 to 9 do > B[i,j] := simplify(B[i,j]): > end do; > end do; > B; # para i variando de 1 a 9 # para j variando de 1 a 9 # simplifica B[i, j]

Agora, mostrando quem a matriz B aps a simplicao. e o ca 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1

3.4. MATRIZES ESPECIAIS

57

3.4

Matrizes Especiais

O Maple possui vrias funoes para construao de tipos particulares de matrizes: a c c matriz identidade, matriz de Vandermonde, matriz de Hilbert e outras. Exemplo 3.12 Exemplicamos alguns tipos especiais de matrizes. > with(LinearAlgebra): > IdentityMatrix(4); # matriz identidade 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 > VandermondeMatrix(<a, b, c, d>); 1 a 1 b 1 c 1 d > HilbertMatrix(4); a2 b2 c2 d2

a3 b3 c3 d3 1/4 1/5 1/6 1/7

1 1/2 1/3 1/4 > DiagonalMatrix(<1, 2, 3, 4>);

1/2 1/3 1/4 1/5

1/3 1/4 1/5 1/6

1 0 0 0

0 2 0 0

0 0 3 0

0 0 0 4

> RandomMatrix(4, 4); # matriz gerada aleatoriamente 41 34 56 62 20 62 8 79 7 90 50 71 16 21 30 28

3.5

Matrizes Inversas

A matriz inversa de M calculada com o comando MatrixInverse(M ). e Exemplo 3.13 Calcular a inversa de uma matriz A. > with(LinearAlgebra): > A := Matrix([[3,1], [-5,2]]);

58

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

A := > B := MatrixInverse(A); B := > A.B;

3 1 5 2
2 11 5 11 1 11 3 11

# verificando se o produto a matriz identidade e 1 0 0 1

O clculo da matriz inversa tambm pode ser feita com um comando na forma de a e potncia M^(-1) ou tambm na forma MatrixInverse(M, opoes), onde opes pode cie e c~ co tar o mtodo de clculo utilizado, por exemplo, method=integer ou e a method=Cholesky, entre outros. Exemplo 3.14 Uma boa opo aos nomes longos das funes de LinearAlgebra a ca co e criao de apelidos com o comando alias, como fazemos neste exemplo. ca > with(LinearAlgebra): > alias(INV = MatrixInverse): > M := Matrix([[24,32,9,12], [40,56,15,21], [15,20,6,8], [25,35,10,14]]); 24 32 9 12 40 56 15 21 M := 15 20 6 8 25 35 10 14 > INV(M); 14 8 21 12 10 6 15 9 35 20 56 32 25 15 40 24

3.6

Determinante, Trao e Matriz Transposta c

O determinante, o trao (soma dos elementos da diagonal principal) e a transposta de c uma matriz M so calculados com os comandos Determinant(M), Trace(M) e a Transpose(M), respectivamente. Exemplo 3.15 O comando Random(m, n, generator=a..b) gera aleatoriamente uma matriz m n com elementos no intervalo [a, b]. Neste exemplo, geramos aleatoriamente uma matriz A de ordem 22, calculamos sua transposta B e os determinantes e os traos c dessas matrizes (que devem ter os mesmos valores). > A := RandomMatrix(2, 2, generator=-9..9);

3.6. DETERMINANTE, TRACO E MATRIZ TRANSPOSTA

59

A := > B := Transpose(A); B := > x := Trace(A); y := Trace(B);

4 2 4 8 4 4 2 8 x := 4 y := 4

> z := Determinant(A); w := Determinant(B); z := 40 w := 40 Exemplo 3.16 Neste exemplo, denimos uma matriz 4 4, calculamos e fatoramos seu determinante. > M := Matrix([[a,b,c,d],[-b,a,-d,c],[-c,d,a,-b],[-d,-c,b,a]]); a b c d b a d c M := c d a b d c b a > Determinant(M); a4 + 2a2 b2 + 2d2 a2 + 2a2 c2 + b4 + 2d2 b2 + 2b2 c2 + c4 + 2c2 d2 + d4 > factor(%); # fatora o determinante de M (b2 + a2 + c2 + d2 )2 Exemplo 3.17 Vamos denir uma matriz de Vandermonde de ordem 3 e calcular seu determinante na forma fatorada. Criamos um apelido DET para abreviar o comando Determinant. > with(LinearAlgebra): > alias(DET=Determinant): > P := VandermondeMatrix(<x, y, z>); 1 x x2 P := 1 y y 2 1 z z2 > DET(N); yz 2 zy 2 + xy 2 xz 2 + x2 z x2 y > factor(%); (z + y)(x z)(x y)

60

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

3.7

Sistemas Lineares

Sistemas lineares aparecem em muitos problemas de Algebra Linear. Eles podem ser resolvidos com um comando LinearSolve(A, opes) onde A a matriz completa dos co e coecientes das equaes do sistema. co Exemplo 3.18 Neste exemplo, resolvemos o sistema = 6 x+y+z xyz = 0 2x + 3y + 6z = 18 cuja matriz completa e 1 1 1 6 A = 1 1 1 0 . 2 3 6 18

> with(LinearAlgebra): > A := Matrix([[ 1, 1, 1, 6], [1, -1, -1, 0], [2, 3, 6, 18]]); 1 1 1 6 A := 1 1 1 0 2 3 6 18 > LinearSolve(A); # resolve o sistema definido pela matriz A 3 2 1

Temos assim a soluao do sistema: x = 3, y = 2, z = 1. c Exemplo 3.19 Vamos resolver agora o sistema linear x 3z + 3w = 2x + y + 5z 3w = 3x + y + 2z w = homogneo e 0 0 0

cuja matriz completa dos coecientes e 1 0 3 3 0 M = 2 1 5 3 0 3 1 2 1 0 > with(LinearAlgebra): > M := <<1, 2, 3>|<0, 1, 1>|<-3, 5, 2>|<3, -3, -1>|<0, 0, 0>>; 1 0 3 3 0 M := 2 1 5 3 0 3 1 2 1 0 Resolve o sistema considerando a varivel livre como sendo w a

3.7. SISTEMAS LINEARES

61

> LinearSolve(M, free=w);

3w3 11w3 w3 0

Se no for especicado uma opo to tipo free=variavel o Maple usar o nome a ca a da varivel livre como sendo _t0. Assim, neste exemplo, a resposta a LinearSolve(M) a seria 3 t03 11 t03 t03 0 Exemplo 3.20 Neste exemplo resolvemos um sistema linear do tipo A.X = B e, no nal, conferimos a resposta obtida. O comando < A|B > faz uma colagem das matrizes A e B para o resultado ser passado para o comando LinearSolve. > restart; > with(LinearAlgebra): > A := <<1,0,2,1>|<1,0,0,1>|<1,0,1,0>|<-1,-1,1,0>|<5,7,3,0>|<0,-2,0,1>>; 1 1 1 1 5 0 0 0 0 1 7 2 A := 2 0 1 1 3 0 1 1 0 0 0 1 > B := <<6, -6,1,-5>>; 6 6 B := 1 5

Cola as matrizes A e B e dene o nome da varivel livre a > X:=LinearSolve(<A|B>, free=t); 11 + 3/2t6 6t5 6 5/2t6 + 6t5 17 t6 + 2t5 X := 6 + 7t5 2t6 t5 t6

O sistema tem duas variveis livres. Por isso, o t recebeu dois a ndices: 5 e 6. Assim, as variveis livres so t5 e t6. a a > A.X; # calcula A.X para verificar se igual a B e

62

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

6 6 1 5 Exemplo 3.21 Neste exemplo, fornecemos o sistema como sendo uma lista de equaes. co Na notao utilizada, x[i] corresponde a xi Denimos tambm a lista de variveis e, ca e a depois, usamos o comando GenerateMatrix para construir as matrizes dos coecientes a partir das listas fornecidas. > sistema := [ x[1] - x[2] + x[3] = 7, 2*x[1] + 3*x[3] = 11, x[1]-2*x[2] + 4*x[3] = 0]; sistema := [x1 x2 + x3 = 7, 2x1 + 3x3 = 11, x1 2x2 + 4x3 = 0] > variaveis := [x[1], x[2], x[3]]; variaveis := [x1 , x2 , x3 ] Sem opes, a funo GenerateMatrix retorna duas matrizes de coecientes: co ca > GenerateMatrix(sistema, variaveis); 1 1 1 7 2 0 3 , 11 1 2 4 0 E melhor usar a funo GenerateMatrix com a opo augmented=true pois assim ela ca ca retornar uma unica matriz, conveniente para passar para LinearSolve: a > A := GenerateMatrix(sistema, variaveis, augmented=true ); 1 1 1 7 A := 2 0 3 11 1 2 4 0 > LinearSolve(A); # resolve o sistema dado 64/7 2/7 17/7 O comando LinearSolve admite parmetros opcionais que permitem denir o mtodo a e de resoluao a ser utilizado, por exemplo, LinearSolve(A, method = Cholesky), c LinearSolve(M, method = LU), LinearSolve(A, method = SparseIterative), etc. Exemplo 3.22 E possvel tambm resolver sistemas lineares de forma simples e eciente e com o comando solve da biblioteca padro. Para isso, basta fornecer o conjunto de a equaes do sistema no formato usual. co

3.8. MATRIZES ESCALONADAS

63

> sist := { x + y + z + w + t = 0, x - 2*y - w + 3*t = 1, 2*x - y + z + 4*t = 1 }: > solve(sist); 1 1 2 2 1 2 1 5 {t = t, y = z w + t, x = z w t, w = w, z = z} 3 3 3 3 3 3 3 3 Podemos observar que o sistema dado tem duas variveis livres: z e w. a

3.8

Matrizes Escalonadas

Matrizes na forma escada (escalonadas) so muitos freqentes e uteis no estudo da a u Algebra Linear. O Maple executa esse tipo de operaao com os comandos GaussianElimination(M) c que fornece uma matriz triangular inferior (pelo mtodo da eliminao de Gauss) e e ca ReducedRowEhcelonForm(M) que fornece a forma completamente escalonada de M, util na resoluao de sistemas lineares. c > with(LinearAlgebra): > A := Matrix( [[ 1, 2, 1, -1], [ 2, [ -5, 3, 0, 1]]); 1 2 A := 3 5 > GaussianElimination(A); 1, 1, 1], [3, 3, 2, 0], 2 1 3 3 1 1 1 1 2 0 0 1

1 2 1 1 0 3 1 3 0 0 2/3 9 0 0 0 0 0 7/2 0 11/2 1 27/2 0 0

> ReducedRowEchelonForm(A); 1 0 0 0 0 1 0 0

Resolvendo o sistema linear denido pela matriz A podemos notar a semelhana entre c a soluao obtida e a ultima coluna da matriz anterior. c > LinearSolve(A); 7/2 11/2 27/2

64

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

3.9

Dependncia e Independncia Linear e e

Dados os vetores v1 , . . . vn , se a equaao (ou melhor, o sistema linear) denida por c x1 v1 + . . . xn vn = 0 possuir apenas a soluo nula x1 = = xn = 0, ento os vetores ca a dados chamam-se linearmente independentes; caso contrrio, eles chamam-se linearmente a dependentes. Exemplo 3.23 Dados quatro vetores (que so matrizes de ordem 2 2) vamos iniciala mente vericar se eles so linearmente indepedentes. a > M1 := <<1, 2>|<3, 4>>; M2 := << 0, 0>|<1, 1>>; M3 := <<1, 0>|<-2, 1>>; M4 := <<-1, 0>|<0, 3>>; M 1 := M 2 := M 3 := M 4 := 1 3 2 4 0 1 0 1 1 2 0 1 1 0 0 3

O comando evalm calcula o valor de uma expresso matricial: a > combinacao_linear := evalm(a*M1 + b*M2 + c*M3 + d*M4); combinacao linear := a+cd 3a + b 2c 2a 4a + b + c + 3d

> conj := convert(combinacao_linear, set); # converte matriz em conjunto conj := {4a + b + c + 3d, 2a, 3a + b 2c, a + c d} > solve(conj); # iguala a zero as equaoes e resolve o sistema c~ {a = 0, b = 0, d = 0, c = 0} Vericamos assim que os vetores M1, M2, M3 e M4 dados so linearmente indepena dentes. Agora, dado outro vetor M, vamos escrev-lo como combinao linear dos quatro vee ca tores dados inicialmente. > M := <<11, 13>|<-7, -5>>; M := 11 7 13 5

> temp := evalm(combinacao_linear - M); temp := a + c d 11 3a + b 2c + 7 2a 13 4a + b + c + 3d + 5

3.9. DEPENDENCIA E INDEPENDENCIA LINEAR

65

> ConjEq := convert(temp, set);

# converte matriz em conjunto

ConjEq := {3a + b 2c + 7, a + c d 11, 2a 13, 4a + b + c + 3d + 5} > sol: = solve(ConjEq); # iguala a zero e resolve o sistema sol := {a = 13/2, b = 47/2, c = 3/2, d = 3} Finalmente, substitumos a soluo obtida na combinao linear ca ca > subs(sol, m = a*m1 + b*m2 + c*m3 + d*m4); 11 7 13 5 = 13 2 1 3 2 4 47 2 0 1 0 1 + 3 2 1 2 0 1 3 1 0 0 3

Exemplo 3.24 Neste exemplo, vamos mostrar que as funes y1 = cos(x), y2 = sen (x) co e y3 = ex so linearmente independentes. a Fazemos uma combinao linear f com essas funes (denida em forma de funo). ca co ca Depois, atribumos trs valores quaisquer a x e obtemos trs equaes lineares nas variveis e e co a a, b e c. Da resolvemos o sistema linear obtido e vericamos que tem apenas a soluo , ca a = b = c = 0. Deve-se ter bastante cuidado ao digitar a funo exponencial ex . Para o Maple essa ca funo deve ser digitada na forma exp(x). ca > f := x -> a*cos(x) + b*sin(x) + c*exp(-x); f := x a cos(x) + b sin(x) + ce(x) > sist := [f(1)=0, f(2)=0, f(3)=0]; > # podermos ter usado outros a # valores no lugar de 1, 2, 3

sist := [a cos(1) + b sin(1) + ce(1) = 0, a cos(2) + b sin(2) + ce(2) = 0, a cos(3) + b sin(3) + ce(3) = 0] > v := [a, b, c]; # definimos a lista de variveis a v := [a, b, c] > with(LinearAlgebra): > M := GenerateMatrix(sis, v, augmented=true); cos(1) sin(1) e(1) 0 M := cos(2) sin(2) e(2) 0 cos(3) sin(3) e(3) 0 M a matriz completa do sistema. Para resolv-lo s chamar a funo LinearSolve: e e e o ca > LinearSolve(M); 0 0 0

Obtemos assim somente a soluo nula para o sistema e, conseqentemente, os vetores ca u dados so linearmente independentes. a Outra soluo, mais simples, est apresentada a seguir. ca a

66

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

> sist2 := {f(1), f(2), f(3)}; sist2 := {a cos(3) + b sin(3) + ce(3) , a cos(2) + b sin(2) + ce(2) , a cos(1) + b sin(1) + ce(1) } > solve(sist2); {a = 0, c = 0, b = 0} Observe que sist foi denida como uma lista e sist2 como um conjunto. Isso ocorreu porque as funes LinearSolve e solve exigem como parmetros uma lista e um co a conjunto, respectivamente. Exemplo 3.25 Vamos mostrar agora que as trs funes polinomiais dadas so lineare co a mente dependentes. > p := x -> 1 + 2*x + 3*x^2; > q := x -> x + x^2; > r := x -> -1 + 2*x + x^2; p := x 1 + 2x + 3x2 q := x x + x2 r := x 1 + 2x + x2 > F := a*p(x) + b*q(x) + c*r(x); F := a(1 + 2x + 3x2 ) + b(x + x2 ) + c(1 + 2x + x2 ) > P := collect(F, x); # soma termos semelhantes

P := (3a + b + c)x2 + (2a + b + 2c)x + a c > sist := {coeffs(P, x)}; # define conjunto de coeficientes de P

sist := {a c, 3a + b + c, 2a + b + 2c} > solve(sist); # resolve o sistema {b = 4c, a = c, c = c} Como obtivemos outras solues alm da soluo nula, as funes dadas so linearco e ca co a mente dependentes.

3.10. BASES

67

3.10

Bases

O comando Basis([lista de vetores]) escolhe entre os vetores fornecidos numa lista aqueles que so linearmente independents, ou seja, escolhe uma base para o subespao a c gerado por essa lista de vetores. O comando SumBasis([[lista1], [lista2], ...]) recebe uma lista de listas de vetores e encontra uma base para a soma dos subespaos gerados pelos vetores de cada c lista. Analogamente, IntersectionBasis([[lista1], [lista2], ...]) encontra uma base para a interseo dos subespaos gerados pelos vetores. ca c Exemplo 3.26 Neste exemplo, denimos seis vetores v1, v2, v3, v4, v5 e v6 com algumas dependncias: v3 = v1 + v1 e v6 = v4 + v5. Depois, calculamos algumas bases de e subespaos gerados por eles. c > > > > > restart; with(LinearAlgebra): v1 := < 1 | 1 | 1 | 0 >; v2 := < 0 | 1 | 1 | 1>; v3 := <1 | 2 | 2 | 1>; v4 := < 0 | 1 | 0 | 0 >; v5 := < 0 | 0 | 1 | 0>; v6 := <0 | 1 | 1 | 0>; v1 := [1, 1, 1, 0] v2 := [0, 1, 1, 1] v3 := [1, 2, 2, 1] v4 := [0, 1, 0, 0] v5 := [0, 0, 1, 0] v6 := [0, 1, 1, 0] Base do subespao gerado por v1, v2, v3, v4, v5, v6. Note que v3 e v6 so descartados. c a > Basis([v1, v2, v3, v4, v5, v6]); [[1, 1, 1, 0], [0, 1, 1, 1], [0, 1, 0, 0], [0, 0, 1, 0]] Base do subespao gerado por v1, v2, v4 e v1 + v2 + v4: c > Basis([v1, v2, v4, v1 + v2 + v4]); [[1, 1, 1, 0], [0, 1, 1, 1], [0, 1, 0, 0]] Base do subespao gerado por v1, 2v1 e 3v1: c > Basis([v1, 2*v1, 3*v1]); [[1, 1, 1, 0]] Base do subespao-soma U + V, onde U =< v1, v2 > e V =< v1, v2, v3, v4 >: c > SumBasis([[v1, v2], [v1, v2, v3, v4]]); [[1, 1, 1, 0], [0, 1, 1, 1], [0, 1, 0, 0]] Base do subespao-soma R + S, onde R =< v1, v2 > e S =< v4, v5 >: c

68

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

> SumBasis([[v1, v2], [v4, v5]]); [[1, 1, 1, 0], [0, 1, 1, 1], [0, 1, 0, 0], [0, 0, 1, 0]] Base do subespao-interseo de < v1, v3 > com < v1, v5, v6 >: c ca > IntersectionBasis([[v1, v3], [v1, v5, v6]]); [[1, 1, 1, 0]] Base do subespao-interseo de < v2, v3, v4 > com < v3, v4, v5 >: c ca > IntersectionBasis([[v2, v3, v4], [v3, v4, v5]]); [[0, 1, 0, 0], [1, 2, 2, 1]]

3.11

Transformaoes Lineares c

Sendo U e V espaos vetoriais, uma transformaao linear T : U V uma funo c c e ca tal que T (kv) = kT (v) e T (u + v) = T (u) + T (v) para quaisquer k R e u, v U . Exemplo 3.27 Neste exemplo, denimos duas funes R, S : R3 R3 tais que co x 2y xy , z R(x, y, z) = S(x, y, z) = z . x+y 0 Depois, implementamos as condies de denio de uma transformao linear em forma co ca ca de funes booleanas (que retornam um valor true ou false). Finalmente, denimos co uma terceira funo booleana E Linear(F) que retorna true se F for linear ou false em ca caso contrrio. a Usamos a funao booleana Equal(v, w) que retorna true se os vetores v e w forem c iguais ou false em caso contrrio. a > > > > > > > > > > > > > restart; with(LinearAlgebra): nulo := <0,0,0>:

# define um vetor nulo

R := (x, y, z) -> <x - 2*y, z, x + y>: S := (x, y, z) -> <x*y, z, 0>: Cond1 := T -> Equal(nulo, simplify(T(k*x, k*y, k*z) - k*T(x, y, z))): Cond2 := T -> Equal(nulo, simplify(T(a, b, c) + T(d, e, f) - T(a+d, b+e, c+f))): E_Linear := T -> Cond1(T) and Cond2(T): E_Linear(R); # verifica se R linear e true

> E_Linear(S);

# verifica se S linear e

3.11. TRANSFORMACOES LINEARES

69

f alse Portanto, neste exemplo, somente R linear. e Exemplo 3.28 Neste exemplo, denimos uma transformao linear T e calculamos sua ca 3 matriz A com relao ` base cannica do R Depois do clculo da inversa de A, consca a o a trumos a transformao linear S = T 1 . ca > restart; > with(LinearAlgebra): > T := (x, y, z) -> <x + 2*y - z, x + y, 2*x + 5*y - 4*z>; T := (x, y, z) < x + 2y z, x + y, 2x + 5y 4z > > A := Matrix([T(1, 0, 0), T(0, 1, 0), T(0, 0, 1)]); 1 2 1 A := 1 1 0 2 5 4 > B := A^(-1); 4 3 1 B := 4 2 1 3 1 1

> S := (x, y, z) -> B . <x, y, z>; S := (x, y, z) B. < x, y, z > > S(x, y, z); 4x + 3y + z 4x 2y z 3x y z x + 2y z x+y 2x + 5y 4z 28 39 43 7 11 33

> T(x, y, z);

> S(7, 11, -33); # testando ...

> T(-28, 39, 43);

70

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

3.12

N cleo de uma Transformao Linear u ca

Uma base para o ncleo (kernel) de uma transformaao linear denida por uma matriz u c T calculada com o comando NullSpace(T). A base calculada mostrada na forma de e e lista de vetores. Exemplo 3.29 Geramos aleatoriamente uma matriz M de ordem 3 3 com elementos no intervalo [0, 9] e calculamos seu ncleo. u > with(LinearAlgebra): > M := RandomMatrix(3, 3, generator=0..9); 5 1 8 M := 1 1 4 3 0 8 > NullSpace(M); # calcula ker(M) {} A resposta obtida signica que o ncleo formado apenas pelo vetor nulo (que corresu e ponde a uma base vazia). Exemplo 3.30 Neste exemplo, determinamos o ncleo da transformao linear u ca 1 2 0 1 T : R4 R3 cuja matriz com relao `s bases cannicas 2 1 2 1 , isto ca a o e 1 3 2 2 , e T (x, y, z, w) = (x + 2y + w, 2x y + 2z w, x 3y + 2z 2w). > with(LinearAlgebra): > T := Matrix([[1, 2,0, 1], [2,-1,2,-1], [1,-3,2,-2]]); 1 2 0 1 T := 2 1 2 1 1 3 2 2 Vericando se a matriz T corresponde ao T (x, y, z, w) desejado: > T . <x, y, z, w>; x + 2y + w T := 2x y + 2z w x 3y + 2z 2w ker(T)

> K := NullSpace(T); # calcula uma base para 0 1 2 3 , K := 1 0 4 5

K um conjunto de vetores {K[1], K[2]}. Para vericar a resposta obtida, testamos se o e produto T K[i] nulo e

3.13. POLINOMIO CARACTER ISTICO

71

> T . K[1];

0 0 0 0 0 0

> T . K[2];

3.13

Polinmio Caracter o stico

O polinmio caracter o stico p() = det(A I) de uma matriz A pode ser calculado usando-se a funo CharacteristicPolynomial da biblioteca LinearAlgebra do Maple. ca Sua sintaxe CharacteristicPolynomial(matriz, varivel). e a O conceito de polinmio caracter o stico est relacionado com duas outras denioes: a a c de matriz caracter stica CharacteristicMatrix(matriz, varivel) e a de matriz compaa nheira CompanionMatrix(polinmio, varivel). o a Exemplo 3.31 Neste exemplo calculamos o polinmio caracter o stico de uma matriz A. Denimos tambm uma matriz M como sendo a matriz caracter e stica de A e calculamos o seu determinante. Observe que o determinante de M coincide com o polinmio o caracterstico de A. > with(LinearAlgebra): > A := Matrix([[1, 2, 3, 4], [2, 3, 4, 1 2 2 3 A := 3 4 4 1 1], [3, 4, 1, 2], [4, 1, 2, 3]]); 3 4 4 1 1 2 2 3

> M := CharacteristicMatrix(A, lambda); + 1 2 3 4 2 + 3 4 1 M := 3 4 + 1 2 4 1 2 + 3 > CharacteristicPolynomial(A, lambda); 4 83 282 + 64 + 160 > Determinant(M); 4 83 282 + 64 + 160

Uma alternativa interessante a esses nomes de comandos quilomtricos o uso de e e apelidos:

72

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

> alias(CAR = CharacteristicPolynomial, MC = CompanionMatrix); CAR, M C > CAR(A, y); y 4 8y 3 28y 2 + 64y + 160 Exemplo 3.32 Neste exemplo construmos inicialmente a matriz companheira M de um polinmio mnico (coeciente do termo de maior grau igual a 1). Depois, calculamos o o o polinmio caracterstico de M e observamos que ele igual ao polinmio dado. o e o > with(LinearAlgebra): > p := 15 + 4*x - 7*x^2 - 11*x^3 + x^4; p := 15 + 4x 7x2 11x3 + x4 > M := CompanionMatrix(p); # o mesmo e 0 0 1 0 M := 0 1 0 0 > CharacteristicPolynomial(M, x); que CompanionMatrix(p, x) 0 15 0 4 0 7 1 11

# igual ao polin^mio p o

15 + 4x 7x2 11x3 + x4

3.14

Autovalores e Autovetores

As ra zes do polinmio caracter o stico de uma matriz A so chamados autovalores da a matriz. No Maple, eles podem ser calculados com um comando Eigenvalues(A). Esse comando admite alguns parmetros opcionais (como por exemplo output=list) que sera vem para especicar o formato da sa dos resultados encontrados. da Exemplo 3.33 Neste exemplo calculamos os autovalores de uma matriz A. Depois, calculamos o polinmio caracterstico dessa mesma matriz e calculamos suas ra o zes. Assim, podemos observar que essas razes coincidem com os valores fornecidos pelo comando Eigenvalues(A). > with(LinearAlgebra): > A := <<4, -1, 0> | <-2, 1, 1> | <0, 0, 2>>; 4 2 0 A := 1 1 0 0 1 2 > Eigenvalues(A); # mostra os autovalores de A em forma de matriz-coluna 2 5 + 1 17 2 2 5 1 17 2 2

3.14. AUTOVALORES E AUTOVETORES

73

> p := CharacteristicPolynomial(A, x); p := 4 + 12x 7x2 + x3 > solve(p); 2, 5 1 5 1 + 17, 17 2 2 2 2

Exemplo 3.34 Duas matrizes de mesma ordem da forma A e P 1 AP so chamadas a semelhantes (ou conjugadas). Sabe-se que duas matrizes semelhantes tm muitas coisas e em comum: mesmo determinante, mesmo trao, mesmos autovalores, etc. c Neste exemplo, partindo de uma matriz diagonal A com autovalores dados (-3, 1, 5 e 11) constru mos uma outra matriz M que tm os mesmos autovalores que A. A matriz e M construda com a ajuda de uma matriz invert e vel P de mesma ordem e gerada aleatoriamente. > restart: > with(LinearAlgebra): > A := DiagonalMatrix(<-3, 1, 5, 11>); 3 0 0 1 A := 0 0 0 0

0 0 0 0 5 0 0 11

> P := RandomMatrix(4, 4, generator=-3..3); 1 1 3 3 1 1 0 3 P := 3 0 1 1 1 0 3 0 > M := P^(-1) . A . P;

# calcula uma matriz conjugada de A 15 4 42 12 72 29 312 72 M := 4/3 4/3 3 4 86/3 32/3 118 27

> Eigenvalues(M, output=Vector[row]); # mostra os autovalores em forma > # de matriz-linha [1, 3, 5, 11] Se um autovalor de T e v = 0 tal que T v = v ento v chama-se um autovetor de e e a T associado a . No Maple os autovetores de T podem ser calculados com um comando Eigenvectors(T). Outros parmetros opcionais podem ser passados para esse comando com especia caes sobre o formado da sa dos dados. Se for usado apenas um Eigenvectors(T), co da

74

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

ento sero mostradas duas matrizes como resposta: uma matriz-coluna P com os autoa a valores e outra Q cujas colunas so os autovetores correspondentes. Neste caso, se Q for a uma matriz quadrada, ento T diagonalizvel e Q1 T Q uma matriz diagonal formada a e a e pelos autovalores. Se tiver sido usado um comando Eigenvectors(T, output=list) ento a resposta a ser uma lista de listas, cada uma contendo um autovalor, a dimenso do autoespao e a a c uma base formado pelos autovetores associados. Exemplo 3.35 Calculamos os autovetores de uma matriz A e mostramos a resposta de duas maneiras: como uma par de matrizes e como uma lista de listas. > restart: > with(LinearAlgebra): > A := Matrix([[1, 5, 5, 5, 5], [5, 1, 5, 5, 5], [5, 5, 1, 5, 5], [5, 5, 5, 1, 5], [5, 5, 5, 5, 1]]); 1 5 5 5 5 5 1 5 5 5 A := 5 5 1 5 5 5 5 5 1 5 5 5 5 5 1 > v := Eigenvectors(A); v := > P := v[1] 4 4 4 4 21 , 1 1 1 1 1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1

# P a matriz-coluna dos autovalores de A e 4 4 P := 4 4 21 # Q a matriz cujas colunas s~o os autovetores de A e a 1 1 1 1 1 1 0 0 0 1 1 0 0 1 Q := 0 0 0 1 0 1 0 0 0 1 1

> Q := v[2];

> Q^(-1) . A . Q;

3.14. AUTOVALORES E AUTOVETORES

75

4 0 0 0 0 0 4 0 0 0 0 0 4 0 0 0 0 0 4 0 0 0 0 0 21 ,

> w := Eigenvectors(A, output=list); 1 1 21, 1, 1 , 4, 4, w := 1 1

0 1 0 0 1

0 0 0 1 1

0 0 1 0 1

1 0 0 0 1

Como entender essa lista de listas? E simples: para cada autovalor de A mostrado e ao lado dele a dimenso do autoespao associado, seguido da base desse autoespao. Por a c c exemplo, 21 um autovalor de A associado a um autoespao de dimenso 1 e cuja base e c a formada pelo vetor (1, 1, 1, 1). e Exemplo 3.36 Neste exemplo calculamos os autovetores de uma matriz T de ordem 44. Mostramos o resultado em forma de lista de listas da forma [ autovalor, dimenso, { base }] e, no nal, escolhemos um dos autovalores e um a dos autovetores associados v e testamos se T v v = 0, ou seja, vericamos se v e mesmo um autovalor de T associado ao autovalor . > restart: > with(LinearAlgebra): > T := Matrix([[-3, 0, 0, 0], [-8, -19, -24, -24], [6, 12, 15, 8], [2, 4, 6, 13]]); 3 0 0 0 8 19 24 24 T := 6 12 15 8 2 4 6 13 > w := Eigenvectors(M, output=list); 3 2 0 1 , 5, 1, w := 3, 2, , 1 0 0 0 > w[1]; # lista correspondente ao 3, 2, 0 1 , 7, 1, 2 1 0 0 1 1

primeiro autovalor 2 3 1 0 , 0 1 0 0

76

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

> lambda := w[1][1]; := 3 > v := w[1][3][1]; 2 1 v := 0 0 0 0 0 0

> T . v - lambda*v;

3.15

Polinmio Minimal o

O polinmio minimal (ou polinmio mnimo) de uma matriz A o polinmio mnico o o e o o m(x) de menor grau tal que m(A) = 0. No Maple, ele pode ser calculado com um comando do tipo MinimalPolynomial(matriz, varivel). a Exemplo 3.37 Neste exemplo calculamos os polinmios minimal pmin e caracter o stico pcar de uma matriz A e vericamos que pcar divis por pmin. A partir de pmin , e vel criamos uma funo polinomial m(x) e vericamos que m(A) = 0. ca > with(LinearAlgebra): > A := <<3,4,4,4> | <4,3,4,4> | <4,4,3,4> 3 4 4 4 3 4 A := 4 4 3 4 4 4 > pmin := MinimalPolynomial(A, x); pmin := 15 14x + x2 > pcar := CharacteristicPolynomial(A, x); pcar := 15 44x 42x2 12x3 + x4 > divide(pcar, pmin); # verifica se pcar divisvel por pmin e true > m := unapply( pmin, x ); # define uma fun~o m(x) ca m := x 15 14x + x2 > m(A); | <4,4,4,3>>; 4 4 4 3

3.16. FORMA CANONICA DE JORDAN

77

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

Exemplo 3.38 Neste exemplo calculamos a forma fatorada dos polinmios minimal e o caracterstico de uma matriz A dada. > A := Matrix([[-5, [ 0, [ 0, [ 0, 1, 0, 0,-5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 5 1 0 5 0 0 0 0 A := 0 0 0 0 0 0 0 0 0, 0, 0, 6, 0 0 5 0 0 0 0 0 0], 0], 0], 0], 0 0 0 6 0 0 0 0 [ [ [ [ 0 0 0 1 6 0 0 0 0,-5, 0, 0, 0, 0, 0, 0, 0 0 0 0 0 6 0 0 0 0 0 0 0 1 6 0 0, 0, 0, 6, 0, 0, 0, 0, 0 0 0 0 0 0 0 6 0, 1, 0, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0], 0], 0], 6]]);

> C := factor(CharacteristicPolynomial(A, x)); C := (x + 5)3 (x 6)5 > M := factor(MinimalPolynomial(A, x)); M := (x + 5)2 (x 6)2

3.16

Forma Cannica de Jordan o

A funao JordanForm da biblioteca LinearAlgebra pode ser usada para calcular a c forma cannica de Jordan de uma matriz, bem como a base de vetores associada com o essa forma cannica. o Se for usada na forma JordanForm(M) ou JordanForm(M, output=J) ser mostrada a a forma de Jordan J da matriz M . Se for usada na forma JordanForm(M, output=Q), ser mostrada uma matriz Q cujas colunas formam uma base de vetores associada ` forma a a de Jordan e neste caso Q1 M Q = J. Exemplo 3.39 Neste exemplo calculamos a forma de Jordan J de uma matriz dada M de ordem 3 3 e uma matriz Q tal que Q1 M Q = J. > with(LinearAlgebra): > M := <<5, 6, -7> | <-9, -11, 13> | <-4, -5, 6>>; 5 9 4 M := 6 11 5 7 13 6

78

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

> J := JordanForm(M); 0 1 0 J := 0 0 1 0 0 0 > Q := JordanForm(M, output=Q); 1 5 1 Q := 1 6 0 1 7 0 0 1 0 0 0 1 0 0 0 Exemplo 3.40 Apresentamos neste exemplo duas matrizes A e B de ordem 44 que tm e o mesmo polinmio caracter o stico, o mesmo polinmio minimal, mas no tm a mesma o a e forma de Jordan. Pode-se deduzir da que elas no so semelhantes. a a > with(LinearAlgebra): > A := Matrix([[ 43, 24, 12, 4], [-95, -55, -30, -10], [76, 48, 29, 8], [-19, -12, -6, 3 ]]); > > B:= Matrix([[53/7, 15/7, -1/7, 2/7], [45/7, 76/7, 1/7, 5/7 ], [-45/7, -41/7, 34/7, -5/7], [-522/7, -463/7, 1/7, -23/7]]); 43 24 12 4 95 55 30 10 A := 76 48 29 8 19 12 6 3 53/7 15/7 1/7 2/7 45/7 76/7 1/7 5/7 B := 45/7 41/7 34/7 5/7 522/7 463/7 1/7 23/7 > J1 := JordanForm(A); 5 0 J1 := 0 0 > J2 := JordanForm(B); 1 5 0 0 0 0 5 0 0 0 0 5

> Q^(-1) . M . Q;

3.16. FORMA CANONICA DE JORDAN

79

5 0 J2 := 0 0 > CharacteristicPolynomial(A, x);

1 5 0 0

0 0 5 0

0 0 1 5

625 500x + 150x2 20x3 + x4 > CharacteristicPolynomial(B, x); 625 500x + 150x2 20x3 + x4 > MinimalPolynomial(A, x); 25 10x + x2 > MinimalPolynomial(B, x); 25 10x + x2 O pacote LinearAlgebra possui outra funao relacionada com a forma de Jordan de c a funo JordanBlockMatrix([lista]), onde lista uma seqncia da uma matriz. E ca e ue forma [1 , n1 ], [2 , n2 ], . . . . Essa funo constri uma matriz diagonal de blocos baseada ca o na lista passada como parmetro. Cada [i , ni ] corresponde a uma matriz (bloco de a Jordan) de ordem ni ni da forma i 1 0 0 0 i 1 0 0 0 i 0 . . . . . . . .. . . . . . . 0 0 0 i Exemplo 3.41 Construir duas matrizes com a funo JordanBlockMatrix, formadas ca por blocos de Jordan previamente escolhidos. > with(LinearAlgebra): > J1 := JordanBlockMatrix([[lambda, 4]]); 1 0 0 1 J1 := 0 0 0 0 0 > J2 := JordanBlockMatrix([[4, 3], [ 4 1 0 4 0 0 J2 := 0 0 0 0 0 0

0 0 1

5, 2], [ -3, 1]]); 0 0 0 0 1 0 0 0 4 0 0 0 0 5 1 0 0 0 5 0 0 0 0 3

80

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

Exemplo 3.42 Vamos construir uma matriz que tenha uma forma de Jordan previamente escolhida. Assim, tentamos responder ` seguinte questo: dada uma matriz diaa a gonal de blocos de Jordan, qual uma matriz que tem essa diagonal de blocos dada como e forma de Jordan. Para isso, geramos uma matriz diagonal de blocos J com o JordanBlockMatrix. Depois, com o aux de uma matriz invers qualquer P de mesma ordem que J, calculalio vel mos uma matriz M = P 1 JP que semelhante a J. Logo, a forma de Jordan de M a e e matriz J dada. > restart; > with(LinearAlgebra): > J := JordanBlockMatrix([[4, 2], [-7, 3]]); 4 1 0 0 0 0 4 0 0 0 1 0 J := 0 0 7 0 0 0 7 1 0 0 0 0 7 > P := Matrix([[ 1, 1, 1, 1, 1], [1, 2, 2, > [1, 2, 3, 1 1 1 1 1 2 2 2 P := 1 2 3 3 1 2 3 4 1 2 3 4 > A := P^(-1) . J . P;

2, 2], [1, 2, 3, 3, 3], 4, 4], [1, 2, 3, 4, 5]]); 1 2 3 4 5

A := > JordanForm(A);

6 4 4 4 4 9 22 28 27 27 10 20 26 18 19 1 2 3 3 6 1 2 3 4 12

4 0 0 0 0

1 0 0 0 4 0 0 0 0 7 1 0 0 0 7 1 0 0 0 7

3.17

Ortogonalizao ca

Dada um conjunto de vetores v1 , v2 , . . . vn , poss e vel construir uma base ortogonal para o subespao gerado por esses vetores. Esse processo chamado Ortogonac e lizao de Gram-Schmidt e, no pacote LinearAlgebra, ele executado pelo comando ca e

3.17. ORTOGONALIZACAO

81

GramSchimidt([v1 , v2 , . . . , vn ]). Se, alm disso, for acrescentado a esse comando uma e opo normalized, ento a base obtida ser ortonormal, ou seja, formada por vetores ca a a ortogonais unitrios. a Exemplo 3.43 Neste exemplo constru mos uma base ortogonal e uma base ortonormal para o subespao vetorial gerado por quatro vetores dados. c > with(LinearAlgebra): > v1 := <0, 1, 2, 1>: v2 := <-1,0,1,0>: > > base1 := GramSchmidt([v1, v2, 0 1 base1 := , 2 1 v3 := <0, 2,2,1>: v4 := <1, -1, 1, -1>: 2/3 0 , 2/3 4/3

v3, v4]); 1 1/4 3/4 1/3 , 1/3 1/4 1/3 1/4

Vericamos agora se os vetores base[1] e base[2] obtidos so ortogonais: a > base[1] . base[2]; 0 Vericamos se base[3] e base[4] so ortogonais: a > base[3] . base[4]; 0 Calculamos uma base ortonormal para < v1, v2, v3, v4 > : > base2 := GramSchmidt([v1, v2, v3, v4], normalized); 1 1 1 0 2 3 6 3 6 6 1 6 1 3 1 3 0 base2 := 6 , 1 6 , 2 1 , 1 1 6 6 3 6 3 6 3 6 1 1 1 1 6 3 6 6 3 6 3 6

82

CAP ITULO 3. VETORES, MATRIZES E ALGEBRA LINEAR

Cap tulo 4

Grcos a
O Maple possui muitos comandos e opes para construao de grcos, desde os co c a grcos planos mais simples at grcos tridimensionais mais sosticados. Possui tambm a e a e recursos para construao de animaes envolvendo esses tipos de grcos. c co a

4.1
4.1.1

Grcos de funoes y = f (x) a c


Grcos simples a

O grco de uma funo denida por uma expresso algbrica y = f (x) na varivel x a ca a e a pode ser constru com o comando plot: do plot(f(x), x=a..b, y=c..d, op1, op2, . . . ) onde f(x) x=a..b y=c..d op1, op2, . . . uma funao real e c a variao do x (dom e ca nio) a variao do y (opcional) e ca outras opes co

Na variao do x ou do y pode aparecer -infinity ou infinity ( ou ). ca Exemplo 4.1 Neste exemplo, construmos o grco da parbola y = x2 . Denimos a a a variao do x como sendo o intervalo [2, 2]. ca > plot(x^2, x = -2..2); O grco mostrado na Figura 4.1. a e Exemplo 4.2 O comando a seguir constri o grco da funo polinomial o a ca y = x5 + 3x 1. Denimos o intervalo de variao do x como sendo o intervalo ca [2, 3/2] e o da variao do y como [4, 10]. O grco o da Figura 4.2. ca a e > plot(-x^5 + 3*x -1, x = -2..3/2, y = -4..10);

83

84

CAP ITULO 4. GRAFICOS

Figura 4.1:

1 x

Figura 4.2:

10

6 y 4

1.5

0.5

0.5 x

1.5

4.1.2

Opoes do comando plot c

As opoes do plot so fornecidas em forma de igualdades do tipo opo = valor. As c a ca possibilidades so: a adaptive Pode ser true ou false. Se adaptive=true (o padro) o grco ser consa a a tru com maior nmero de pontos onde ele tiver uma maior curvatura. Se do u adaptive=false ento ser usado um espaamento uniforme entre os pontos do a a c grco. a axes Especica o tipo dos eixos utilizados: FRAME, BOXED, NORMAL ou NONE.

4.1. GRAFICOS DE FUNCOES Y = F (X)

85

axesfont Especica o tipo de letra para marcar cada eixo. Pode ser em forma de lista [fonte, estilo, tamanho], onde fonte um dos tipos TIMES, COURIER, HELVETICA ou e SYMBOL. Para o tipo TIMES, o estilo pode ser ROMAN, BOLD, ITALIC ou BOLDITALIC. Para os tipos HELVETICA ou COURIER o estilo pode ser omitido ou ser escolhido entre BOLD, OBLIQUE ou BOLDOBLIQUE. O tipo SYMBOL no precisa de especicao de estilo. a ca Exemplo: axesfont = [TIMES, ROMAN, 20]. color O mesmo que colour. Especica a cor do grco a ser desenhado. Pode ser a aquamarine gold orange violet black green pink wheat blue navy coral cyan brown gray grey khaki magenta maroon plum red sienna tan turquoise white yellow

ou ser dena na forma COLOR(RGB, r, g, b) onde r, g, b so valores reais no intervalo a [0, 1] que especicam a proporao de vermelho, verde e azul que compem a cor. c o Exemplos: color = yellow; color = COLOR(RGB, 0.3, 0.5, 0.8). coords Indica o sistema de coordenadas utilizado. Pode ser bipolar, cardioid, cartesian, elliptic, polar, entre outros. O padro o cartesian. a e discont Se for ajustado para true, evitar que sejam desenhadas linhas verticais nos a pontos de descontinuidade do grco. Se for false (que o padro) as descontinuia e a dades podem aparecer ligadas por segmentos de retas verticais. lled Se for ajustado em true, a regio entre o grco e o eixo x ser pintada. Na forma a a a padro, ajustado em false. a e font Tipo de letra eventualmente utilizado no grco (como um t a tulo). Veja a opao c axesfont citada anteriormente para uma listagem das opes. co Exemplo: font = [TIMES,ITALIC,14] labels=[x,y] Dene os nomes dos eixos. O padro utilizar os mesmos nomes das a e variveis usadas na funo fornecida. a ca labeldirections=[x,y] Especica a direo dos rtulos que aparecem nos eixos. Os ca o valores de x e y devem ser HORIZONTAL or VERTICAL. O padro HORIZONTAL. a e labelfont Tipo de letra para os nomes dos eixos. Veja a opao axesfont anterior. c legend Legenda do grco. E util quando desenham-se vrios grcos simultaneamente. a a a linestyle Dene se o grco constru pontilhado ou slido. Pode ser um inteiro de 1 a a e do o 4 ou, equivalentemente, uma das palavras: SOLID, DOT, DASH, DASHDOT. O padro a o estilo SOLID. Exemplo: e linestyle = 3 (que o mesmo que e linestyle = DASH). numpoints Especica o nmero de pontos utilizados para construir o grco. O padro u a a 50 pontos. Exemplo: numpoints = 200 e scaling Controla a proporo entre as escalas dos eixos. Pode ser CONSTRAINED ou ca UNCONSTRAINED. O padro UNCONSTRAINED. a e

86

CAP ITULO 4. GRAFICOS

style Se for ajustado em POINT, o grco ser constru com pontos isolados. Se for a a do ajustado em LINE (que o padro) os pontos sero ligados por segmentos de reta. e a a symbol S mbolo utilizado para marcar os pontos isolados. Pode ser um dos seguintes: BOX, CROSS, CIRCLE, POINT ou DIAMOND. symbolsize Tamanho do s mbolo utilizado para marcar pontos isolados no grco. O a padro o valor 10. a e thickness Largura das linhas usadas para desenhar o grco. Pode ser um valor inteiro a maior ou igual a 0. O padro o valor 0. a e tickmarks=[m,n ] Especica as quantidades m nimas de pontos marcados sobre os eixos. Para especicar somente a quantidade de determinado eixo, deve ser usado uma das opes xtickmarks =m ou ytickmarks= n no lugar dessa. co title T tulo do grco fornecido como string (portanto, entre aspas). Se o t a tulo contiver mais de uma linha um sinal de \n pode ser usado para sinalizar o nal de cada linha. Exemplo: title=Grco da funo f(x) = cos(5x) a ca titlefont Especica o tipo de letra do t tulo. Exemplo: titlefont=[COURIER,BOLD,5] view =[xmin..xmax, ymin..ymax] Especica as coordenadas mximas e m a nimas da curva a ser mostrada. O padro mostrar toda a curva. a e Exemplo: view = [-2..1, -1..0.5] xtickmarks Indica a quantidade m nima de pontos a ser marcada sobre o eixo horizontal. ytickmarks Indica a quantidade m nima de pontos a ser marcada sobre o eixo vertical. Exemplo 4.3 O comando a seguir constri o grco da funo seno no intervalo [2, 2]. o a ca O resultado mostrado na Figura 4.3. E mostrado um t e tulo do grco usando o tipo de a letra times itlico de tamanho 20. a > plot(sin(x),x = -2*Pi..2*Pi, title="Grafico da funcao seno", > titlefont=[TIMES, ITALIC, 20]); Exemplo 4.4 O comando a seguir constri o grco da mesma funo seno do exemplo o a ca anterior, no intervalo [2, 2]. Agora, fazemos um grco mais grosso (thickness = 4) a com uma cor formada por uma mistura de vermelho com azul (color = COLOR(RGB, 0.9, 0.0, 0.7)), os eixos so mostrados como se fossem uma moldura envolvendo o grco a a (axes = BOXED). Alm disso, os eixos so rotulados com as expresses Variacao do e a o x e y = sen(x) escritas com tipo de letra TIMES itlico de tamanho 15, com o rtulo a o do eixo x escrito na direo horizontal e o do eixo y na direo vertical. O grco ca ca a e mostrado na Figura 4.4. > plot(sin(x), x = -2*Pi..2*Pi, axes=BOXED, thickness=4, > color = COLOR(RGB, 0.9, 0.0, 0.7), > labeldirections=[HORIZONTAL, VERTICAL], > labels=["Variacao do x", "y = sen(x)"], > labelfont=[TIMES, ITALIC, 15]);

4.1. GRAFICOS DE FUNCOES Y = F (X)

87

Figura 4.3:

Grafico da funcao seno


1

0.5

2 x

0.5

Figura 4.4:

0.5

y = sen(x)

0.5

1 6 4 2 0 2 4 6

Variacao do x

Exemplo 4.5 O comando a seguir constri o grco da funo tangente no intervalo o a ca [7, 7]. O resultado muito ruim e mostrado na Figura 4.5. e e > plot(tan(x), x = -7..7); Na Figura 4.6 mostrado o grco da mesma funo tangente, limitando-se a variao e a ca ca do y ao intervalo [10, 10]. Note que cou com um aspecto bem melhor do que o grco a anterior, onde deixou-se livre a variao do y, ou seja, a critrio do Maple. ca e > plot(tan(x), x=-7..7, y=-10..10);

88

CAP ITULO 4. GRAFICOS

Figura 4.5:

600

400

200

2 x

200

400

600

Figura 4.6:

10 8 6 y 4 2 0 2 4 6 8 10

2 x

Exemplo 4.6 O comando a seguir constri o grco da funo floor(x) (maior inteiro o a ca menor ou igual a x) no intervalo [7, 7]. Como ela descont e nua em Z, usamos a opo ca discont=true para evitar que as descontinuidades sejam ligadas entre si com segmentos verticais. O resultado mostrado na Figura 4.7. e > plot(floor(x), x=-3..3, discont=true, thickness=4, > title="y = floor(x) = [x]", axesfont=[HELVETICA, OBLIQUE, 12], > titlefont=[COURIER, 15], labelfont=[TIMES, ITALIC, 20]); Exemplo 4.7 O comando a seguir constri o grco da funo f (x) = sen(1/x) no o a ca

4.1. GRAFICOS DE FUNCOES Y = F (X)

89

Figura 4.7:

y = floor(x) = [x]
3

x
1

intervalo [1/2, 1/2] (Figura 4.8) . No mostramos nenhum tipo de marca nos eixos e a aumentamos para 300 a quantidade de pontos utilizada para construir o grco. a > plot(sin(1/x), x = -0.5 .. 0.5, y = -1.3 .. 1.3, numpoints=300, > discont=true, xtickmarks=0, ytickmarks=0);
Figura 4.8:

x no 1 cos(x) intervalo [30, 30] (Figura 4.9). Constru mos o grco com pontos isolados usando uma a Exemplo 4.8 O comando a seguir constri o grco da funo f (x) = o a ca

90

CAP ITULO 4. GRAFICOS

cruz azul de tamanho 15 para assinalar os pontos e aumentamos a quantidade de pontos utilizada para construir o grco. a > plot(x/(1-cos(x)), x=-30..30, y=-20..20, numpoints=500, > style=point, symbol=cross, symbolsize=15, color=blue);
Figura 4.9:

20

10

30

20

10

10 x

20

30

10

20

Exemplo 4.9 O comando a seguir constri o grco da funo f (x) = 2 sen x+ sen (15x) o a ca no intervalo [8, 8] (Figura 4.10). Construimos o grco com uma linha de largura 2 e a aumentamos para 200 a quantidade de pontos. Alm disso, usamos a mesma escala tanto e no eixo horizontal quanto no vertical (scaling=CONSTRAINED). > plot(2*sin(x)+sin(15*x), x=-8..8, numpoints=200, linestyle=SOLID, > thickness=2, scaling=CONSTRAINED); Exemplo 4.10 Na gura 4.11 construmos o nida por x2 9 4x + 3 y= 5 (x 2)2 grco da funo cont a ca nua por partes dese x<0 se 0 x < 2 se 2x

> y := piecewise(x < 0, x^2-9, 0 <= x and x < 2, 4*x + 3, > x >= 2, 5 - (x-2)^2): > plot(y, x=-4..5, discont=true, thickness=3, > ytickmarks = [-9,0,3,5,11]); Note que escolhemos precisamente quais so as marcas que queremos que apaream no a c eixo y.

4.1. GRAFICOS DE FUNCOES Y = F (X)

91

Figura 4.10:

3 2 1 8 6 4 2 0 1 2 3 2 4 x 6 8

Figura 4.11:

11

5 3

2 x

4.1.3

Construindo vrios grcos simultaneamente a a

Para construir vrios grcos em um mesmo sistema de eixos coordenados, a maneira a a mais simples fornecer uma lista de funoes [f1, f2, . . . ] em vez de s uma funao. e c o c Nesses casos as funoes devem ter um dom c nio comum. As outras opoes fornecidas ao c comando plot tambm podem ser na forma de lista (opao = [op1, op2, . . . ]). e c~ Exemplo 4.11 Neste exemplo constru mos em um mesmo sistema de eixo as funes co seno e cosseno (Figura 4.12). O grco da funo seno contru com um traado mais a ca e do c no (thickness = 0) e cor azul (color = blue, que o mesmo que e

92

CAP ITULO 4. GRAFICOS

color = COLOR(RGB, 0, 0, 1)), enquanto que a funo cosseno constru com um ca e da traado mais grosso (thickness = 4) e cor vermelha (color = red, o mesmo que c color = COLOR(RGB, 1, 0, 0)). > plot([sin(t),cos(t)],t=-Pi..Pi,title="Funcoes Trigonometricas Simples", > thickness=[0, 4], color = [blue, red], legend=["Seno", "Cosseno"]);
Figura 4.12:

Funcoes Trigonometricas Simples 1

0.5

1 t 0.5

1 Legend Seno Cosseno

Outra maneira de construir vrios grcos simultaneamente constuir cada um deles a a e separadamente e mostr-los na tela usando o comando display que faz parte do pacote a plots. Cada grco pode ser constru com comandos do tipo a do varivel := plot(...): a para que os pontos obtidos sejam guardados em uma varivel. E conveniente usar dois a pontos no nal desse comando para que a extensa relaao dos pontos do grco no seja c a a mostrada na tela. No nal, s usar um comando e o display(varivel1, varivel2, ...) a a para que os grcos sejam mostrados. a Exemplo 4.12 Neste exemplo constru mos separadamente os grcos das funes a co x f (x) = e e g(x) = ln(x) em um mesmo sistema de eixo (Figura 4.13). A funo ca h(x) = x tambm construda com o traado do grco mais no. e e c a > graf1 := plot(exp(x), x=-4..4, y=-4..4, scaling=constrained, > color=red, thickness=2): > graf2 := plot(ln(x), x=0..4, y=-4..4, scaling=constrained, > color=blue, thickness=2): > graf3 := plot(x, x=-4..4, y=-4..4, scaling=constrained,

4.2. GRAFICOS DEFINIDOS IMPLICITAMENTE

93

Figura 4.13:

0 1

2 x

> color=black, thickness=0): > with(plots): display(graf1, graf2, graf3); No pacote plots tem um comando bastante util chamado textplot. Sua funao c e colocar mensagens (textos) em um sistema de coordenadas. Sua sintaxe : e > textplot([x1, y1, mensagem1], [x2, y2, mensagem2], opes); co onde (x1, y1) corresponde `s coordenadas onde ser mostrada a mensagem1, etc. a a As opes so as mesmas do comando plot com apenas um acrscimo: a opao align co a e c que pode assumir valor em um conjunto formado por BELOW (abaixo), ABOVE (acima), LEFT (esquerda) ou RIGHT (direita). Exemplo: align = {ABOVE, LEFT} . Exemplo 4.13 Neste exemplo constru mos separadamente o grco da funo a ca 3 y = x 3x e duas mensagens indicando as posies dos pontos de mximo e m co a nimo locais (Figura ??). As posies foram calculadas usando-se a teoria conveniente. co > > > > > with(plots): A := plot(x^3 - 3*x, x=-2..2, y=-3..3, ytickmarks=2): B := textplot([-1, 2, "Maximo local"], color = blue, align=ABOVE): C := textplot([1, -2, "Minimo local"], color= cyan, align=BELOW): display(A, B,C );

4.2

Grcos denidos implicitamente a

Grcos denidos implicitamente podem ser constru a dos com o comando implicitplot que pertence ao pacote plots. Seu uso muito parecido com o do comando plot j visto e a anteriormente.

94

CAP ITULO 4. GRAFICOS

Figura 4.14:

Maximo local y

1 x

Minimo local

Exemplo 4.14 Neste exemplo construmos o grco da curva denida implicitamente a por x6 + y 6 = 1 (Figura 4.15). > with(plots): > implicitplot(x^6 + y^6 = 1, x=-1..1, y=-1..1, scaling=constrained);
Figura 4.15:

0.5

0.5

0.5 x

0.5

Exemplo 4.15 Neste exemplo construmos o grco da curva denida implicitamente a por x3 + y 3 = 3xy (Figura 4.16). Para aumentar a quantidade de pontos do grco a contru com o implicitplot podemos usar a opo grid = [x, y ]. do ca

4.3. GRAFICOS DE CURVAS PARAMETRIZADAS

95

> with(plots): > implicitplot(x^3 + y^3 = 3*x*y, x=-5..2, y=-5..2, scaling=constrained, > thickness=3, grid=[100,100], tickmarks=[4,4]);

Figura 4.16:

1 0

x 1

4.3

Grcos de curvas parametrizadas a

Se a curva for denida por equaes paramtricas, ento seu grco pode ser constru co e a a do com o comando plot. Para isso, basta formar uma lista com as equaoes envolvidas e a c variaao do parmetro: c a > plot([f 1(t), f 2(t), . . . , t = a..b], opes, ...); co Exemplo 4.16 Na Figura 4.17 construmos o grco da astride denida parametrica a o mente por x(t) = cos3 t , 0 t 2. y(t) = sen 3 t > plot([cos(t)^3, sin(t)^3, t=0..2*Pi], thickness=2, color=blue, > scaling=constrained); E importante no esquecer de colocar a variao do t entre colchetes. Por exemplo, o a ca comando > plot([cos(t)^3, sin(t)^3], t=0..2*Pi, thickness=2, color=blue); muito parecido com o anterior, mas seu resultado bem diferente: so constru e e a dos os 3 3 grcos das funes y = cos t e y = sen t em um mesmo sistema de eixos. a co

96

CAP ITULO 4. GRAFICOS

Figura 4.17:

0.5

0.5

0.5

0.5

Exemplo 4.17 Na Figura 4.18, construmos o grco da hipociclide denida para a o metricamente por x(t) = (a b) cos t + r cos( (a b)t ) 17 b , a = 10, b = , r = 1, 0 t 34. 2 y(t) = (a b) sen t r sen ( (a b)t ) b > a := 10; b := 17/2; r := 1; > plot([(a - b)*cos(t) + r*cos(t*(a - b)/b), > (a - b)*sin(t) - r*sin(t*(a - b)/b), t=0..34*Pi], scaling=constrained); Variando-se os valores de a, b e r obtemos uma diversidade de formatos das curvas. Refaa este exemplo considerando a = 11, b = 3, r = 23/10 e depois a = 11, b = 8, r = 5 c nb nb e compare os resultados. Devemos ter 0 t ab , onde n um inteiro tal que ab um e e inteiro par.

4.4

Grcos em coordenadas polares a

Grcos em coordenadas polares podem ser constru a dos com o comando polarplot que faz parte do pacote plots. Suas opoes so as mesmas do plot. c a Exemplo 4.18 Neste exemplo, construmos o grco de um rosceo de 8 ptalas denido a a e em coordenadas polares por r = sen (4) (Figura 4.19). > with(plots): > polarplot(sin(4*teta), teta=0..2*Pi, axes=none, scaling=constrained); Exemplo 4.19 Na Figura 4.20 constru mos o grco de r = a Para isso, depois do with(plots), usamos o comando:
1 2

+ cos(t),

0 t 2.

4.5. GRAFICOS TRIDIMENSIONAIS

97

Figura 4.18:

Figura 4.19:

> polarplot(1/2 + cos(t), t=0..2*Pi, scaling=constrained, thickness=3);

4.5

Grcos tridimensionais a

O Maple possui uma grande variedade de comandos para construo de grcos tridica a mensionais. Apresentamos aqui somente alguns comandos bsicos. a

98

CAP ITULO 4. GRAFICOS

Figura 4.20:

0.8 0.6 0.4 0.2

0 0.2 0.4 0.6 0.8

0.2

0.4

0.6

0.8

1.2

1.4

4.5.1

Grcos de funes z = f (x, y) a co

O grco de uma funao de duas variveis reais x, y denida por uma expresso a c a a algbrica f (x, y) pode ser constru com um comando e do plot3d(f(x, y), x = a..b, y = c..d, op1, op2, ...) onde f(x, y) uma funo real e ca x = a..b a variaao da varivel 1 e c a y = c..d a variaao da varivel 2 e c a op1, op2, ... outras opoes c Exemplo 4.20 Neste exemplo, construmos o grco do parabolide z = x2 y 2 . De a o nimos o intervalo de variao do x e do y como sendo o intervalo [2, 2]. O resultado ca mostrado na Figura 4.21. e > plot3d(-x^2 - y^2, x = -2..2, y=-2..2); Aps a construo do grco na tela, ele pode ser girado com o aux do mouse: o ca a lio basta dar um simples clique com o boto esquerdo e, mantendo o boto esquerdo preso, a a girar o grco para uma nova posio. Pode-se tambm modicar o grco constru a ca e a do com os botes da barra de contexto (abaixo da barra de ferramentas). o 4.5.2 As opoes do comando plot3d c

O comando plot3d admite as opoes axes, axesfont, color, font, labelfont, c labels, linestyle, numpoints, scaling, symbol, symbolsize, thickness, title, titlefont que so semelhantes `s do comando plot, denidas na seao 4.1.2. a a c Opes espec co cas do plot3d so: a

4.5. GRAFICOS TRIDIMENSIONAIS

99

Figura 4.21:

contours Especica o nmero de curvas de n utilizado. O valor padro 10. u vel a e coords Especica o sistema de coordenadas utilizado. O padro o sistema cartesian. a e Algumas das opoes so: bispherical, cardioidal, conical, cylindrical, ellipsoidal, c a logcylindrical, paraboloidal, spherical. lled=truefalse Pode ser TRUE ou FALSE. Se for TRUE, a regio entre o grco e o plano a a xOy preenchida. e grid=[m,n] Especica as dimenses da grade retangular com espaamento uniforme o c utilizada na construao do grco. c a lightmodel Especica a quantidade de fontes luminosas que iluminam o grco. Pode a ser none, light1, light2, light3 ou light4 conforme o modelo tenha 0, 1, 2, 3 ou 4 luzes iluminando, respectivamente. orientation=[theta,phi] Especica ngulos de rotaoes em graus (cujos valores padres a c o o so 45 ) sob as quais o grco mostrado. O valor de theta corresponde a uma a a e rotao em torno do eixo z e phi corresponde a rotao em torno do eixo y. ca ca projection Especica o tipo de projeao utilizado. c ORTHOGONAL. O padro a projeao ORTHOGONAL. a e c Pode ser FISHEYE, NORMAL ou

shading Especica o modo com o qual a superf pintada. Pode ser XYZ, XY, Z, cie e ZGRAYSCALE, ZHUE ou NONE. style Especica como o grco ser desenhado. Pode ser POINT, HIDDEN, PATCH, a a WIREFRAME, CONTOUR, PATCHNOGRID, PATCHCONTOUR ou LINE. O valor padro PATCH. a e tickmarks=[l,n,m] Especica o nmero de subdivises utilizadas em cada eixo. u o

100

CAP ITULO 4. GRAFICOS

view=zmin..zmax ou [xmin..xmax,ymin..ymax,zmin..zmax ] Indica a parte da superf cie para ser mostrada. O padro mostrar toda a superf a e cie. Para as opes axes, style, projection, shading e scaling os valores podem ser co em letras maisculas ou minsculas. Por exemplo axes=BOXED considerado como sendo u u e o mesmo que axes=boxed. Exemplo 4.21 Neste exemplo constru mos o grco de z = sen (x2 + y 2 ) com a usada uma caixa envolvendo o grco 3 x 3 e 3 y 3 (Figura 4.22). E a (axes = boxed) e ngulos de rotao como sendo 70 e 20 graus e uma grade de 40 40 a ca subdivises. o > plot3d(sin(x^2 + y^2), x=-3..3, y=-3..3, axes=boxed, grid=[40,40], > orientation=[70,20]); Experimente reconstruir este exemplo alterando os valores da grade e tambm dos ngulos e a de rotao. ca
Figura 4.22:

1 0 1 3 2 1 y 0 1 2 2 1 3 2 3 1 0 x 3

Agora, veja quanto muda o aspecto do mesmo grco se acrescentarmos uma opo a ca style=PATCHCONTOUR ao comando plot3d (Figura 4.23). > plot3d(sin(x^2 + y^2), x=-3..3, y=-3..3, axes=boxed, grid=[40,40], > orientation=[70,20], style=PATCHCONTOUR); Exemplo 4.22 Os grcos normalmente so mostrados com muitas cores. Para que eles a a sejam mostrados em tonalidades de uma mesma cor, basta acrescentar uma opo color ca ao comando plot3d. Por exemplo, acrescentando uma opo color=grey o grco ser ca a a todo em tons de cinza. a Neste exemplo (Figura 4.24) , construmos o grco z = x3 y xy 3 todo azul, com duas fontes de luz (lightmodel = light2), no estilo PATCHCONTOUR com grade 45 45. Isso d um bom efeito tridimensional ao grco. a a

4.5. GRAFICOS TRIDIMENSIONAIS

101

Figura 4.23:

1 0 1 3 2 1 y 0 1 2 2 1 3 2 3 1 0 x 3

> plot3d(x^3*y - x*y^3, x=-4..4, y=-4..4, grid=[45,45], > style=PATCHCONTOUR, lightmodel=light2, color=blue);
Figura 4.24:

Exemplo 4.23 Neste exemplo, construmos o grco de z = a

variando de 1 a 1 (Figura 4.25). Usamos a opo de sombreamento como sendo ZHUE (shading=zhue) com isso o ca grco colorido como um arco- a e ris, sendo o vermelho a parte mais alta e o violeta a parte mais baixa do grco. a

x , com x e y 1 + 3x2 + 5y 2

102

CAP ITULO 4. GRAFICOS

> plot3d(x/(1 + 3*x^2 + 5*y^2), x=-1..1, y=-1..1, axes=frame, > orientation=[70,20], shading=zhue, orientation=[130, 45]);

Figura 4.25:

0.3 0.2 0.1 0 0.1 0.2 0.3 1 1 0.5 x 0 0.5 1 1 0.5 0 y 0.5

4.5.3

Curvas de n vel

A biblioteca plots possui dois comandos para a construao das curvas de n c vel do grco de uma funo z = f (x, y): contourplot e contourplot3d. A diferena entre a ca c elas que contourplot mostra as curvas em um unico plano (como usual nos livros e e de Clculo) enquanto que contourplot3d mostra as curvas dispostas em vrios planos, a a cada uma na altura original. A sintaxe desses comandos semelhante ` do comando plot3d: e a contourplot(f(x,y), x = a..b, y = c..d, op1, op2, ...) As opoes tambm so parecidas. Destacamos aqui apenas duas opoes: c e a c
filled que pode ser TRUE ou FALSE. Se for TRUE, ento os espaos entre curvas de a c n vel consecutivas so preenchidos gradativamente usando cores fornecidas com a a opo coloring=[cor1, cor2]. ca A quantidade padro de curvas mostradas 8. Esse nmero pode ser alterado para a e u n curvas bastando para isso acrescentar uma opo contours = n ou ento fornecer ca a a lista de alturas das curvas de n contours = [z1, z2, z3, ...]. vel

Exemplo 4.24 Consideremos a sela z = x2 y 2 com x e y variando de 3 a 3. Vamos construir na cor azul suas curvas de nvel que correspondam aos valores z = 5, z = 3, z = 2, z = 1, z = 1/5, z = 1/5, z = 1, z = 2, z = 3 e z = 5 (Figura 4.26).

4.5. GRAFICOS TRIDIMENSIONAIS

103

Figura 4.26:

2 y 1

1 x

> with(plots): > contourplot(x^2 - y^2, x=-3..3, y=-3..3, contours = [-5, -3, -2, -1, > -1/5, 1/5, 1, 2, 3, 5], color=blue); Exemplo 4.25 Neste exemplo, construmos as curvas de n de z = sen (x) sen (y), x vel e y variando no intervalo [3, 3], usando os comandos contourplot e contourplot3d. Preenchemos os espaos entre as curvas de n c vel com tons de cinza e ciano (filled = true, coloring = [grey, cyan]). > with(plots): > contourplot(sin(x)*sin(y), x=-3..3, y=-3..3, filled=true, > coloring=[grey,cyan]); > > contourplot3d(sin(x)*sin(y), x=-3..3, y=-3..3, filled=true, > orientation=[80,40], coloring=[grey,cyan]); Os resultados esto nas Figuras 4.27 e 4.28. E necessrio que tenha sido usado antes a a um with(plots), a no ser que se queira escrever a forma completa dos nomes desses a comandos que so plots[contourplot] e plots[contourplot3d]. a 4.5.4 Grcos denidos implicitamente a

Grcos de superf a cies denidas implicitamente so muito comuns nos estudos de a Clculo ou Geometria Anal a tica. As primeiras superf cies estudadas so as qudricas a a 2 y2 x2 2 2 2 2 cujas equaoes so dadas na forma impl c a cita: x + y + z = R (esfera), a2 b2 + z2 = 1 c 2 2 2 (hiperbolide de uma folha), x2 y2 z2 = 1 (hiperbolide de duas folhas), etc. Esses tipo o o a b c de grco pode ser facilmente constru pelo Maple com o comando implicitplot3d a do

104

CAP ITULO 4. GRAFICOS

Figura 4.27:

2 y 1

1 x

Figura 4.28:

que faz parte do pacote plots. Seu uso muito parecido com outros comandos j vistos e a anteriormente de forma que vamos nos limitar aqui a fazer apenas dois exemplos. Exemplo 4.26 Consideremos o hiperbolide de duas folhas x2 y 2 z 2 = 1, com x, o y, z variando no intervalo [4, 4]. Vamos construir seu grco usando uma grade de a a dimenses 15 15 15 (Figura 4.29). Optamos pelo estilo PATCHNOGRID com ngulos o de rotaes iniciais iguais a 110 e 90 graus. co > with(plots): > implicitplot3d( x^2 - y^2 - z^2 = 1, x=-4..4, y=-4..4, z=-4..4, > grid=[15,15,15], style=patchnogrid, orientation=[110, 90]);

4.5. GRAFICOS TRIDIMENSIONAIS

105

Figura 4.29:

Exemplo 4.27 Vamos construir o grco da sela x2 y 2 = z, colorindo o grco de a a acordo com a altura e no estilo que coloca as curvas de n vel desenhadas no grco a (Figura 4.30). > with(plots): > implicitplot3d(x^2 - y^2 = z, x=-4..4, y=-4..4, z=-4..4, orientation = > [110,60], grid=[20,20,20], shading=zhue, style=patchcontour);

Figura 4.30:

106

CAP ITULO 4. GRAFICOS

4.5.5

Grcos de superf a cies parametrizadas

Em algumas reas de estudo como Geometria Diferencial e Computao Grca a ca a e muito comum o uso de superf cies denidas por equaes paramtricas. Nestes casos, os co e pontos (x, y, z) que pertencem ao grco da superf satisfazem equaoes do tipo a cie c x = f (u, v) y = g(u, v) z = h(u, v) com (u, v) pertencente a um dom nio do no plano que depende de cada superf cie. Esse tipo de grco pode ser constru de modo semelhante aos constru a do dos com o comando plot3d (sees 4.5.1 e 4.5.2), devendo-se apenas fornecer as equaoes paramtricas co c e em forma de lista como no exemplo: plot3d([f, g, h], x=a..b, y=c..d). Cuidado: se forem escritas chaves no lugar dos colchetes, como fazemos agora em plot3d({f, g, h}, x=a..b, y=c..d), ento sero constru a a dos simultaneamente os grcos das trs funes f (x, y), g(x, y) e h(x, y) que no tem nada a ver com a sua e co a perf parametrizada por (f (x, y), g(x, y), h(x, y)). cie Exemplo 4.28 Construamos o helicide (u cos v, u sen v, v) com 6 u 6 e o 8 v 8 (Figura 4.31). > plot3d([u*cos(v), u*sin(v), v], u = -6..6, v = -8..8, > grid=[25, 50], shading=zhue);
Figura 4.31:

Exemplo 4.29 Neste exemplo, construmos uma superf que tem a aparncia de uma cie e mola: F (u, v) = ((11 + 2 cos(u)) cos(v), (11 + 2 cos(u)) sen (v), 2 sen (u) + v) com 0 u 2 e 12 v 12 (Figura 4.32).

4.5. GRAFICOS TRIDIMENSIONAIS

107

> plot3d([(11+2*cos(u))*cos(v), (11+2*cos(u))*sin(v), 2*sin(u)+v], > u=0..2*Pi, v=-12..12, scaling=constrained, grid=[20,70], > orientation=[80,70]);

Figura 4.32:

O pacote plots contm um comando textplot3d com sintaxe e textplot3d([x, y, z, mensagem], opes) co cujo uso semelhante ao textplot e utilizado para imprimir mensagens em um sistema e e de eixos tridimensional. Exemplo 4.30 Construmos o grco do hiperbolide de uma folha parametrizado por a o (cos u v sen v, sen u + v cos u, v). O grco no mostrado na tela de imediato, pois a a e ele guardado em uma varivel auxiliar chamada hiperb. e a Depois, o textplot3d usado para imprimir a mensagem Hiperboloide ` direita da e a posio (0, 4, 0) e o resultado guardado na varivel auxiliar mens. ca a Finalmente o comando display mostra na tela os contedos das variveis auxiliares u a hiperb e mens. > > > > > > > hiperb := plot3d([cos(u) - v*sin(u), sin(u) + v*cos(u), v], u=0..2*Pi, v=-3..3, scaling=constrained, orientation=[45,10]): with(plots): mens := textplot3d([0, 4, 0, "Hiperboloide"], align=RIGHT, color=black, font=[COURIER, 15]): display(mens, hiperb);

108

CAP ITULO 4. GRAFICOS

Figura 4.33:

Hiperboloide

4.6

Outros grcos a

Alm dos tipos mostrados nas sees anteriores, o Maple dispe ainda de vrios outros e co o a comandos e pacotes para construo de grcos, por exemplo, para a construao de ca a c poliedros e outros tipos de objetos tridimensionais. Destacamos nesta seo mais um ca comando do pacote plots: o tubeplot que pode ser usado para desenhar superf cies tubulares. Dada uma curva no espao, o tubeplot constri uma superf que parece c o cie um cano seguindo o formato da curva dada. Em geral, gera grcos muito curiosos. a Exemplo 4.31 Aqui, criamos um tubo de raio 0, 4 envolvendo a curva espacial parametrizada por f (t) = (r cos(at) + s cos(bt), r sen (at) + s sen (bt), sen (dt) + sen(ct)/2), onde escolhemos a = 1, b = 3, c = 2, d = 4, r = 4/3 e s = 3. > > > > > with(plots): a := 1: b := 3: c := 2: d := 4: r := 4/3: s := 3: curva := [-r*cos(a*t) + s*cos(b*t), r*sin(a*t) + s*sin(b*t), sin(d*t) + sin(c*t)/2]: tubeplot(curva, radius = 0.4, t = 0..2*Pi, grid = [50, 20]);

4.7

Animaoes c

O pacote plots possui trs comandos para a construao de animaes: animate, e c co animate3d e animatecurve. Nesta seao descrevemos brevemente cada um desses coc mandos e acrescentamos vrios exemplos. a

4.7. ANIMACOES

109

Figura 4.34:

Uma animaao consiste simplesmente em uma seqncia de grcos, mostrados consec ue a cutivamente, um aps o outro. Isso gera uma iluso de movimento e normalmente chama o a muito a atenao. Fica parecendo que os grcos se movem na tela. c a 4.7.1 Animaes bidimensionais co

A sintaxe do animate e animate(F(x, t), x = a..b, t = c..d, opes) co onde F (x, t) uma expresso (ou funao) de duas variveis que nos nossos exemplos e a c a consideraremos sempre como x e t. O F (x, t) deve ser seguido pela variaao do x e do t e c opcionalmente por opoes (em forma de igualdades) que so as mesmas do comando plot. c a A variaao do x corresponde ao dom c nio das funes envolvidas na animaao, enquanto co c que a variaao do t corresponde `s posioes intermedirias. O valor t = c corresponde c a c a ao grco inicial e t = d corresponde ao grco nal. A quantidade n de grcos entre o a a a inicial e o nal controlado com uma opao frames = n. e c Exemplo 4.32 Neste exemplo criamos uma animao que corresponde a uma seqncia ca ue de 9 grcos iniciando com y = cos(x) e terminando com y = cos(x + 2). Essa seqncia a ue corresponde aos grcos de cos(x + t) com t variando no conjunto {0, 2/8, 4/8, 6/8, 1, a 10/8, 12/8, 14/8, 2}, assumindo assim 9 valores igualmente espaados de 0 a 2 (Figura c 4.35). Escolhendo o domnio como sendo o intervalo [7, 7] e grcos sem marcas nos a eixos x e y (tickmarks = [0, 0]), digitamos o seguinte comando no aviso do Maple: > with(plots): > animate(cos(x + t), x =-7..7, t=0..2, frames=9, tickmarks=[0,0]); Para iniciar a animao, deve-se pressionar em cima do grco inicial com o boto esca a a querdo do mouse. Com isso, a barra de contexto muda e poss dar in ` animao e vel cio a ca

110

CAP ITULO 4. GRAFICOS

Figura 4.35:

pressionando-se o boto Play the animation. Neste exemplo, a animao d a ima ca a presso de que o grco do cosseno est se deslocando para a esquerda. a a a Outra maneira de iniciar a animao, pressionar com o boto direito do mouse em ca e a cima do grco inicial da animao. Com isso, deve aparecer um menu com as opes: a ca co Copy, Style, Legend, Axes, Projection, Animation e Export As. Escolhendo Animation aparece outro menu de opes: Play, Next, Backward, Faster, Slower, Continuous. Escoco lhendo Play ter in a animao na tela. A opo Continuous permite que a animao a cio ca ca ca seja repetida indenidamente neste caso, para parar s repetir esse procedimento que e o no lugar da opo Play aparecer uma opo Stop. ca a ca Ao pressionar com o boto direito do mouse em cima do grco inicial e escolhendo a a a opao Export As poss c e vel salvar a animaao em vrios formatos, inclusive GIF c a animado. Exemplo 4.33 Para fazer f (x) transformar-se em g(x), basta usar no animate uma funo F (x, t) = (1 t) f (x) + t g(x) e 0 t 1. Neste exemplo, transformamos a ca funo |x| 1 na funo x2 + 1, usando um total de 16 grcos (Figura 4.36). ca ca a > with(plots): > animate((abs(x) - 1)*(1 - t) + (-x^2 + 1)*t, x=-2..2, t=0..1, > frames = 16, tickmarks = [0, 0]); Como no exemplo anterior, s escolher a opo Animation/Play ao pressionar com o e o ca boto direito do mouse em cima do grco inicial da animao. a a ca 4.7.2 Animaoes tridimensionais c

O comando animate3d pode ser usado para gerar animaes tridimensionais. Seu uso co semelhante ao do comando animate: e

4.7. ANIMACOES

111

Figura 4.36:

animate3d(F(x, y, t), x = a..b, y = c..d, t = e..f, opes) co Exemplo 4.34 O seguinte comando gera uma animao que inicia com o grco de ca a sen (x) sen (y) (que corresponde a t = 1) e termina com o grco de sen (2x) sen (2y) a (que corresponde a t = 2). > with(plots): > animate3d( sin(x*t)*sin(y*t), x=-3..3, y=-3..3, t=1..2, frames=10, > scaling=constrained); Neste caso usado um total de 10 grcos na animao. e a ca Com o animate3d parametrizada por e poss vel deformar o grco a de uma superf cie

X1 (u, v) = (f1 (u, v), g1 (u, v), h1 (u, v)) em outra superf parametrizada por cie X2 (u, v) = (f2 (u, v), g2 (u, v), h2 (u, v)). Para isso, basta usar no animate3d uma funao F (u, v, t) = (1 t)X1 (u, v) + tX2 (u, v) c = ((1 t)f1 (u, v) + tf2 (u, v), (1 t)g1 (u, v) + tg2 (u, v), ((1 t)h1 (u, v) + th2 (u, v)) com 0 t 1. Exemplo 4.35 Para deformar (u, v, sen (u2 + v 2 )) em (u, v, 5 cos(u)) com um total de 20 grcos na animao e grade de tamanho 30 30, basta usar depois do with(plots) a ca o seguinte comando: > animate3d([(1-t)*u+t*u, (1-t)*v+t*v, (1-t)*sin(u^2+v^2)+t*(5-cos(u))], > u=-4..4, v=-4..4, t=0..1, frames=20, grid=[30,30]);

112

CAP ITULO 4. GRAFICOS

Com o animate3d poss girar na tela o grco de qualquer superf parametrie vel a cie zada por X(u, v) = (f (u, v), g(u, v), h(u, v). Para isso, basta fazer o t variar no intervalo [0, 2] e usar uma funo F (u, v, t) nos seguintes formatos: ca
[f (u, v), g(u, v) cos t h(u, v) sen t, g(u, v) sen t + h(u, v) cos t], para girar o grco em a torno do eixo Ox [f (u, v) cos th(u, v) sen t, g(u, v), f (u, v) sen t+h(u, v) cos t], para girar o grco em a torno do eixo Oy [f (u, v) cos t g(u, v) sen t, f (u, v) sen t + g(u, v) cos t, h(u, v)], para girar o grco em a torno do eixo Oz

Exemplo 4.36 Vamos girar o grco de um catenide em torno do eixo Oy: a o > > > > > > > > > f := (u, v) -> cosh(v)*cos(u); g := (u, v) -> cosh(v)*sin(u); h := (u, v) -> v; F:=(u,v,t)->[f(u,v)*cos(t)-h(u,v)*sin(t),g(u,v),f(u,v)*sin(t)+h(u,v)*cos(t)]; teste:=plots[animate3d](F(u,v,t), u=-Pi..Pi, v=-2..2, t=0..2*Pi, frames=4, orientation=[0,45],scaling=constrained,shading=none): display(teste); teste; # mostra todos os grficos a # executa a animaao c~

A Figura 4.37 representa a animao. Ela foi constru com um comando display(teste); ca da
Figura 4.37:

4.7.3

Outras animaoes c

Com o comando animatecurve poss observarmos a construao de de uma curva e vel c por etapas. Sua sintaxe parecida com a do plot: e

4.8. SALVANDO GRAFICOS EM DIFERENTES FORMATOS

113

animatecurve(f, dom nio, opes, frames = n) co onde f pode ser uma funao de uma varivel real ou uma lista de funes (neste caso, c a co representando uma curva em forma paramtrica). e Exemplo 4.37 Neste exemplo, constru mos uma animao com a construo da curva ca ca denida parametricamente por f (t) = ( sen (3t), sen (4t)), com 0 t 2. Esta animao ca est representada na Figura 4.38 (construda com um comando display). a > with(plots): > X := animatecurve([sin(3*t), sin(4*t), t=0..2*Pi], numpoints=100, thickness=2,frames=9,tickmarks=[0,0], scaling=constrained); > X;
Figura 4.38:

4.8

Salvando grcos em diferentes formatos a

O Maple no s mostra grcos na tela, mas tambm pode salv-los em disco nos mais a o a e a diferentes formatos: EPS, GIF, BMP, JPG e outros. A maneira mais fcil de fazer isso pressionar com o boto direito do mouse em cima a e a do grco e escolher depois a opao Export As, escolher o formato desejado e digitar a c o nome do arquivo a ser criado. Mas, poss e vel tambm fazer isso de forma mais eciente, com uma maior variee dade de opes com comandos espec co cos do Maple. Para isso, basta usar um comando plotsetup: plotsetup(plotdevice, plotoutput, plotoptions)

114

CAP ITULO 4. GRAFICOS

onde plotoutput corresponde ao nome do arquivo de sa (por exemplo, "A:\\teste.gif" da ou "C:\\temp\\maple\\grafico.jpg") e plotdevice pode ser: ps para uma sa em um arquivo Encapsulated PostScript (EPS). Neste caso, ploda toptions pode incluir as opoes: color, noborder, portrait, landscape, width, height, c bottommargin, leftmargin, axiswidth, axisheight. gif para a sa ser em forma de imagem GIF. Neste caso, plotoptions pode incluir da valores para a altura, largura e nmero de cores como no exemplo: plotoptiu ons=colors=256, height=200, width=400 jpeg para a sa da ser em forma de arquivo JPG. Neste caso, plotoptions pode incluir informaoes sobre a altura e largura da imagem, como em plotoptic ons=height=200,width=320 bmp para a sa ser em forma de arquivo BMP (imagem bitmap true color do Windows) da pov para a sa ser na forma de arquivo POV do POVRay. Neste caso, plotoptida ons pode incluir informaoes sobre ngulos de rotaes como no exemplo plotopc a co tions=phi=20,theta=30.

Exemplo 4.38 Com o comando a seguir, os grcos gerados pelo Maple no vo ser a a a mostrados na tela, mas vo ser gravados em disco em um arquivo (imagem digital) de a extenso GIF: a > plotsetup(gif, plotoutput=c:\\graf\\teste.gif, plotoptions=width=300); Exemplo 4.39 Aqui gerado um arquivo EPS, ideal para ser inserido em textos em e A X: LTE > plotsetup(ps,plotoutput=plot.eps,plotoptions=color,portrait,noborder); Para fazer com que os grcos voltem a ser mostrados na tela novamente, basta digitar: a > plotsetup(default); Digite ?plotsetup ou ?plot,device para mais informaes. co

Cap tulo 5

Clculo Diferencial e Integral a


Este cap tulo pressupe que o leitor conhece conceitos de Clculo como limites, derio a vadas, integrais e sries. A maior parte desses assuntos vista em cursos de Clculo 1, e e a com uma pequena parte vista em Clculo 2 ou Clculo 3. a a

5.1
5.1.1

Limites
Limites de funes f (x) co

No Maple, o limite de uma funo quando a varivel tende a um certo valor calculado ca a e com um comando do tipo limit(funo, varivel = valor). Por exemplo, lim f (t) ca a e ta calculado com um comando limit(f(t), t = a). Exemplo 5.1 Os comandos a seguirpodem ser usados para calcular os limites: 5 1+t 51t ln(cos()) 2 R = lim (x 5x + 3), S = lim , T = lim e 3 3 x1 t0 /2 ln(tan()) 1+t 1t cos(m) cos(n) U = lim . 0 2 > R := limit (x^2 - 5*x + 3, x = -1); R := 9 > S := limit( ( root[5](1 + t) - root[5](1 - t))/ > ( root[3](1+t)-root[3](1-t)),t=0); 3 5 > T := limit ( ln(cos(theta))/ln(tan(theta)), theta = Pi/2); S := T := 1 > U := limit( (cos(m*alpha) - cos(n*alpha))/alpha^2, alpha=0); 1 1 U := m2 + n2 2 2
115

116

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

Exemplo 5.2 Vamos calcular o limite lim (x + 1)cotg(x) . Inicialmente, o comando die x0 gitado com erro, mas parece funcionar. > limit((x + 1)^cotg(x), x=0); # errado 1 A resposta assim obtida est errada porque a funo cotg(x) no uma funo pra ca a e ca e cotg(x) denida do programa. O que ele fez foi calcular a potncia 1 e onde cotg(x) um e considerado como sendo um s mbolo qualquer. A funo cotagente para o Maple cot(x), ca e conforme digitado a seguir. > limit((x+1)^cot(x), x=0); e Obtemos assim a resposta correta: lim (x + 1)cotg(x) = e.
x0

O Maple possui outro comando chamado Limit (iniciando com L maisculo), com u sintaxe idntica ` de limit, cujo objetivo mostrar o limite em formato usual, sem e a e calcul-lo. E chamada forma inercial ou forma inerte ou forma no avaliada do limite. a a Exemplo 5.3 Neste exemplo mostramos um limite na sua forma inercial. O valor de uma expresso desse tipo pode ser calculado se for aplicado um comando value ` exa a presso. a > Limit (( x - a)/(sqrt(x) - sqrt(a)), x = a); xa lim xa x a > value(%); 2 a O uso do Limit combinado com o limit melhoram a apresentao dos resultados, ca conforme mostramos nos seguintes exemplos. Exemplo 5.4 > Limit(sin(a*x)/(b*x), x = 0) = limit( sin(a*x)/(b*x), x = 0); lim sin(ax) a = bx b

x0

Exemplo 5.5 > > > > F L l L := (sin(3*x) - 3*x*exp(x) + 3*x^2)/(arctan(x) - sin(x) - x^3/6): := Limit (F, x = 0): := limit (F, x = 0): = l; sin(3x) 3xex + 3x2 = 18 1 x0 arctan(x) sin(x) x3 6 lim

5.1. LIMITES

117

5.1.2

Limites no innito

Os limites no innito, isto , com a varivel tendendo a + ou a , so calculados e a a usando-se um valor -infinity ou infinity para a varivel. a Exemplo 5.6 Neste exemplo calculado lim (3 + x 4x3 + x4 ). e
x

> limit ( 3 + x - 4*x^3 + x^4, x = -infinity); Exemplo 5.7 Aqui calculado lim e > > > > 5x7 3x4 + 2x2 + 11 . x 3x7 + x6 x3 + 10x2 + 4

F := (5*x^7-3*x^4+2*x^2+11)/(3*x^7+x^6-x^3+10*x^2+4): lim := limit(F, x=-infinity): Lim := Limit(F, x=-infinity): Lim = lim; 5x7 3x4 + 2x2 + 11 5 = 7 + x6 x3 + 10x2 + 4 x() 3x 3 lim

Exemplo 5.8 O Maple conhece a regra que arma que se no produto de duas funes, co se uma tender a zero e a outra for limitada, ento o limite do produto dessas funes a co e zero. Exemplicamos isso a seguir. > limit ( 1/x * cos(x), x = infinity); 0 Mas, se uma tender a zero e a outra funo no for limitada ento nada podemos armar ca a a a respeito do limite do produto dessas funes. Aqui, quando x temos que 1/x tende co a zero mas o produto 1/x . cosh(x) tende a innito. Isso acontece porque a funo cosh(x) ca no limitada. a e > limit( 1/x * cosh(x), x = infinity); Exemplo 5.9 Aqui usamos mais uma vez a forma inercial do limite para obtermos uma igualdade onde aparece o limite proposto seguido do seu valor calculado. > Limit(((x+7)/(x+3))^x,x=infinity): lim x+7 x+3 % = value(%);
x

= e4

118

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

5.1.3

Limites laterais

Limites laterais so calculados acrescentando-se uma opo left ou right aos coa ca mandos limit ou Limit. Se for acrescentada a opao left ento ser calculado o limite c a a lateral ` esquerda. Se for acrescentado right ento o limite ser lateral ` direita. a a a a Exemplo 5.10 Neste exemplo calculamos os limites ` esquerda e ` direita do 0 da funo a a ca cos(x)/x. Como esses limites no so iguais, conclu a a mos observando que o limite em x = 0 indenido, ou melhor, no existe. e a > Limit(cos(x)/x , x=0, left) = limit (cos(x)/x, x =0 , left); cos(x) = x0 x > Limit(cos(x)/x, x=0, right) = limit (cos(x)/x, x=0, right); lim cos(x) = x0+ x lim > limit( cos(x)/x, x=0); undef ined Exemplo 5.11 Denamos agora uma funo cont ca nua por partes: > y := piecewise(x < 0, sin(x), x >=0 and x < 2, 2*x - 1, x >= 2, 2); x<0 sin(x) 2x 1 x <= 0 and x < 2 y := 2 2 <= x Calculemos agora os limites nos pontos de descontinuidade. E recomendvel acompanhar a cada resposta obtida no grco da Figura 5.1. a > limit(y, x = 0, left); 0 > limit(y, x = 0, right); 1 > limit(y, x = 0); undef ined > limit(y, x = 2, left); 3 > limit(y, x = 2, right); 2 > limit(y, x = 2); undef ined

5.1. LIMITES

119

Figura 5.1:

2 x

5.1.4

Limites de funes de vrias variveis co a a

Apesar de muito eciente no clculo de limites de funoes de uma varivel, o Maple a c a mostra-se ineciente no clculo de limites de funoes de vrias variveis. Ele s consegue a c a a o calcular esse tipo de limite em pouqu ssimos casos. A sintaxe para o clculo desse tipo de limite idntica ` do caso de uma unica varivel, a e e a a tendo-se o cuidado de fornecer os valores das variveis em forma de conjunto: a limit ( funo, { varivel1 = valor1 , varivel2 = valor2 , . . . }) ca a a x2 y 2 . E um dos poucos casos que o (x,y)(0,0) x2 + y 2 Maple consegue resolver. A resposta undened, ou seja, o limite no existe. e a Exemplo 5.12 Consideremos o limite lim > limit( (x^2 - y^2)/(x^2 + y^2), {x = 0, y = 0}); undef ined xy . O Maple devolve + y2 como resposta o prprio limite proposto, ou seja, ele no consegue decidir nada. Mas, o a se o usurio pode dar uma ajuda ao programa fornecendo o limite de forma iterada a limit(limit( ... )) e indicando algum tipo de dependncia entre as variveis. Se zere a mos isso mais de uma vez e obtivermos respostas diferentes, ento o limite no existir. a a a Exemplo 5.13 Neste exemplo, estudamos o limite
(x,y)(0,0) x2

lim

> limit(x*y/(x^2 + y^2), {x =0, y = 0}); limit x2 xy , {x = 0, y = 0} + y2

120

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

> Limit(Limit ( x*y/(x^2 + y^2), x = y), y = 0); xy lim lim 2 y0 xy x + y 2 > limit(limit ( x*y/(x^2 + y^2), x = y), y = 0); 1 2 > limit(limit ( x*y/(x^2 + y^2), x = 2*y), y = 0); 2 5 Conclumos ento que o limite dado no existe pois obtivemos as respostas 1/2 e 2/5 a a quando zemos x = y e x = 2y, respectivamente.

5.2

Funoes cont c nuas

O Maple possui trs comandos relacionados com a continuidade de uma funao: e c discont(f(x), x) Calcula os pontos de descontinuidade da funo denida pela expresso ca a algbrica f (x) na varivel x. e a fdiscont(f(x), dom nio, opoes) Calcula aproximadamente usando mtodos numricos c e e as descontinuidades de f (x) no dom nio indicado. Podem ser feitas diversas opes co como escolher o nome do mtodo numrico utilizado. e e iscont(f(x), x=a..b, opo) Funao booleana que testa a continuidade de f (x) no inca c tervalo indicado. A opao pode decidir se o intervalo aberto (open) ou fechado c e (closed) os apstrofos aqui utilizados so opcionais. o a Exemplo 5.14 Vamos testar a descontinuidade de f (x) = dado. 1 1 + em cada intervalo x x+5

> iscont(1/x + 1/(x + 5), x = -10..1); # descontnua em ]-10, 1[ f alse > iscont(1/x + 1/(x + 5), x = 0..1); # contnua em ]0, 1[ true > iscont(1/x + 1/(x + 5), x = 0..1, closed); # descontnua em [0, 1] f alse > iscont(1/x + 1/(x + 5), x = -10..-6); # contnua em ]-10, -6[ true > iscont(1/x + 1/(x + 5), x = -10..-5, open); # contnua em ]-10, -5[

5.2. FUNCOES CONT INUAS

121

true > iscont(1/x + 1/(x + 5), x=-10..-5, closed); # descontnua em [-10,-5] f alse Exemplo 5.15 O discont bastante eciente para achar as descontinuidades de funes e co no muito complicadas. Ele fornece um conjunto com todas as descontinuidades ena contradas. Inicialmente usamos esse comando para determinar as descontinuidades de 1 1 f (x) = + . x x+5 > discont( 1/x + 1/(x + 5), x); {5, 0} Agora, vamos determinar as descontinuidades de g(x) = > discont((x^5 + x - 2)/(x^3 - 5*x^2 + 6*x), x); {0, 2, 3} Exemplo 5.16 Neste exemplo, determinamos as descontinuidades da funo tg(3x). O ca Maple representa inteiros quaisquer por Z1, Z2, etc. Em livros de Clculo, o usual a seria apresentar a resposta dada na forma 1 k + 1 , onde k Z. 3 6 > discont(tan(3*x), x); 1 1 Z1 + 3 6 O comando about fornece informaes sobre o co inteiro qualquer. > about(_Z1); Originally Z1, renamed Z1: is assumed to be: integer 1 + x + ex 1 + 3 cos(x) Z1, conrmando que ele um nmero e u x5 + x 2 . x3 5x2 + 6x

E agora vamos determinar as descontinuidades de

> discont( (1 + x + exp(x))/(1 + 3*cos(x)), x); 1 1 arccos( ) 2 B1 + 2 B1 arccos( ) + 2 Z2 3 3 O comando about fornece informaes sobre Z2 e B1. Neste caso, o co o inteiro qualquer e o B1 s pode assumir dois valores: 0 ou 1. > about(_Z2, _B1); Originally Originally Z2, renamed Z1: is assumed to be: integer B1, renamed B1: is assumed to be: OrProp(0,1) Z2 um e

122

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

Exemplo 5.17 Usamos o fdiscont para determinar de forma aproximada as desconti2 +x+1 nuidades das funes f (x) = ex +1tg x no intervalo [4, 3] e g(x) = xx3x+10 no intervalo co 7 [20, 20]. Utilizamos o mtodo de Newton para calcular cada resposta. e > fdiscont( 1/(exp(x) + tan(x)), x = -4..3, newton=true); [3.18302881311210760, .531390856652157129, 1.74388634680748878] > fdiscont((x^2 + x + 1)/(x^7 - 3*x + 10), x = -20..20, newton=true); [1.46366450027293738]

5.3
5.3.1

Derivadas
Derivadas de funes de uma varivel co a

A derivada de uma funo denida por uma expresso algbrica f (x) na varivel x ca a e a e calculada com um comando diff(f(x), x). Exemplo 5.18 Sejam f , g, h as funes denidas por f (x) = 3x4 + x2 + 3, co 3 2 w g(t) = t + 1 + t 1 e h(w) = w + 2 . Vamos calcular f (x), g (t) e h (w). > f(x) := 3*x^4 + x^2 + 3; f (x) := 3x4 + x2 + 3 > diff(f(x), x); # derivada de f(x) com relaao a x c~ 12x3 + 2x > g(t) := sqrt(t + 1) + root[3](t - 1); 1 g(t) := t + 1 + (t 1)( 3 ) > diff(g(t), t); # derivada de g(t) com relaao a t c~ 1 1 + 2 t+1 > h(w) := w^2 + 2^w; h(w) := w2 + 2w > diff(h(w), w); # derivada de h(w) com relaao a w c~ 2w + 2w ln(2) o Exemplo 5.19 E bvio que o Maple conhece as regras de derivao como a derivada do ca produto, derivada do quociente e a Regra da Cadeia, conforme exemplicamos a seguir. > diff(x^5 * cos(x), x); # derivada de um produto 1 3

2 3 (t 1)

5.3. DERIVADAS

123

5x4 cos(x) x5 sin(x) > diff(cos(cos(ln(x))), x); # Regra da Cadeia sin(cos(ln(x))) sin(ln(x)) x > diff(exp(4*x + 1)/(x^2 + 1), x); # derivada de um quociente 4 > simplify(%); e(4x+1) (2 + 2x2 x) 2 (1 + x2 )2 Exemplo 5.20 Denimos agora uma funo f e tentamos calcular sua derivada com ca o comando diff. Note que diff(f, x) no funciona, pois o diff no calcula derivaa a das de funes. Mas, diff(f(x), x) funciona da maneira que se espera, porque f (x) co e considerado pelo Maple como sendo uma expresso algbrica. a e > f:= x-> x^3 + sin(x); f := x x3 + sin(x) > diff(f, x); # n~o funciona para calcular f(x) a 0 > diff(f(x), x); # agora, sim, calcula f(x) 3x2 + cos(x) Exemplo 5.21 A resposta obtida com o diff nem sempre a mais simples. Neste e exemplo, o simplify faz uma simplicao bastante signicativa no resultado fornecido ca pelo diff. > y := x *sqrt(x^2 + 1)/2 + 1/2*ln(x + sqrt(x^2 +1)); 1 1 y := x x2 + 1 + ln(x + x2 + 1) 2 2 > diff(y, x); 1 x 1 2 1+ x 2+1 2 x x2 + 1 + 2 + 2+1 2 x x + x2 + 1 1 > simplify(%); x2 + 1 e(4x+1) 2e(4x+1) x 1 + x2 (1 + x2 )2

Exemplo 5.22 Se o Maple no conhece a derivada da funo, ento ele deixa-a india ca a cada, conforme exemplicamos aqui com as derivadas das funoes Q(x) e R(x)). c

124

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

> P(x) := (x^2 + x + 1)*Q(x) + R(x); P (x) := (x2 + x + 1)Q(x) + R(x) > diff(P(x), x); (2x + 1)Q(x) + (x2 + x + 1) Q(x) + x R(x) x

Nesses casos o Maple usa a notao ca f (x) para denotar a a derivada de f (x). Seria x d melhor ter utilizado a notao ca f (x), assim caria de acordo com a notao usual dos ca dx livros de Clculo. a Exemplo 5.23 O comando define pode ser usado para denir novas derivadas. Aqui denimos a derivada de F (x) como sendo a funo G(x). ca > define(F, diff(F(x),x)=G(x)); > diff(F(cos(x)), x); G(cos(x)) sin(x) > diff(cos(F(x)), x); sin(F (x))G(x) > diff(exp(F(x^2 + x - F(x))), x); G(x2 + x F (x))(2x + 1 G(x))e(F (x
2 +xF (x)))

O diff tem uma forma inercial que o Diff. As sintaxes do diff e do Diff so e a idnticas. Como toda forma inercial, o objetivo do Diff s mostrar a derivada a ser e e o calculada. Para efetuar o clculo deve-se usar o diff ou aplicar um comando value ao a Diff. Exemplo 5.24 Vamos calcular a derivada de ln(cos(x)) aplicando o comando value ` forma inercial Diff. a > Diff(-ln(cos(x)), x); ( ln(cos(x))) x > value(%); sin(x) cos(x) Exemplo 5.25 A forma inercial util para escrever frmulas, conforme mostramos neste e o exemplo. > Diff(F(x)^G(x), x) = diff(F(x)^G(x), x);

5.3. DERIVADAS

125

F (x)G(x) x

F (x) G(x) x G(x) = F (x) x G(x) ln(F (x)) + F (x) % = value(%); F (x) sin(G(x)) x G(x) x

> Diff(sin(F(x)) + cos(G(x)), x):

(sin(F (x)) + cos(G(x))) = cos(F (x)) x 5.3.2 Derivadas de ordem superior

Derivadas de ordem n podem ser calculadas escrevendo-se a varivel n vezes no coa mando diff. Mas, uma maneira mais prtica escrever um cifro e a ordem da derivada a e a ao lado da varivel. Assim, para calcular a derivada ensima de f (x) com relao a x, a e ca basta usar um comando diff(f(x), x$n). Outra maneira no muito prtica de calcular uma derivada de ordem superior ena a e caixar vrios comandos diff. A quantidade de comandos encaixados deve ser a mesma a ordem da derivada. Assim, a derivada segunda de f (x) pode ser calculada com um comando diff( diff(f(x), x), x). A forma inercial Diff tambm pode ser usada com derivadas de ordem superior. e Exemplo 5.26 Calculemos agora de quatro maneiras a derivada terceira de x7 + 4x4 + 1. > y := x^7 + 4*x^4 + 1: > diff(y, x, x, x); 210x4 + 96x > diff(y, x$3); 210x4 + 96x > diff( diff( diff(y, x), x), x); 210x4 + 96x > Diff(y, x$3); 3 7 (x + 4x4 + 1) x3 > value(%); 210x4 + 96x Exemplo 5.27 Vamos mostrar agora que y(t) = e4t (a cos(3t) + b sin(3t)) satisfaz y + 25y + 8y = 0, usando uma equao onde do lado esquerdo aparece a forma inercial ca Diff e do lado direito o diff que quem realmente efetua os clculos. E necessrio uma e a a chamada ao comando de simplicao, o simplify, para poder obtermos 0 no segundo ca membro da equao. ca

126

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

> y := exp(-4*t)*(a*cos(3*t) + b*sin(3*t)); y := e(4t) (a cos(3t) + b sin(3t)) Para evitar que o Maple substitua o valor de y no primeiro membro, vamos colocar o y entre apstrofos: o > Diff(y, t$2) + 8*Diff(y, t) + 25*y = simplify(diff(y, t$2) + 8*diff(y, t) + 25*y); 2 y +8 t2 y + 25y = 0 t

Exemplo 5.28 Para encerrar esta seo, um exemplo que util para chamar a ateno ca e ca para o potencial da Computao Algbrica. Calculamos aqui a derivada dcima quinta ca e e da funo tangente trigonomtrica, algo muito incoveniente para ser feito sem o aux ca e lio desse tipo de recurso. Note que a maioria dos nmeros inteiros obtidos como coecientes u ultrapassam 1 quatrilho, um clculo que no demora mais do que 3 centsimos de segundo a a a e se for usado um computador que no esteja muito ultrapassado. a > Diff(tan(x), x$15) = diff(tan(x), x$15); 15 tan(x) = 134094848(1 + tan(x)2 )2 tan(x)12 + 13754155008(1 + tan(x)2 )3 tan(x)10 15 x +182172651520(1 + tan(x)2 )4 tan(x)8 + 559148810240(1 + tan(x)2 )5 tan(x)6 +460858269696(1 + tan(x)2 )6 tan(x)4 + 89702612992(1 + tan(x)2 )7 tan(x)2 +1903757312(1 + tan(x)2 )8 + 16384 tan(x)14 (1 + tan(x)2 ) 5.3.3 Derivadas de funes de vrias variveis co a a

O clculo de derivadas de funoes com mais de uma varivel idntico ao clculo das a c a e e a funes de apenas uma varivel. co a Exemplo 5.29 Neste exemplo calculamos vrias derivadas da funo de duas variveis a ca a 7 5 denida por F (x, y) = x y + 10x. > F := x^7 * y^5 + 10*x; F := x7 y 5 + 10x > Diff(F, x) = diff(F, x); (x7 y 5 + 10x) = 7x6 y 5 + 10 x > Diff(F, y) = diff(F, y); (x7 y 5 + 10x) = 5x7 y 4 y > Diff(F, x, y) = diff(F, x, y);

5.3. DERIVADAS

127

2 (x7 y 5 + 10x) = 35x6 y 4 yx > Diff(F, y, x) = diff(F, y, x); 2 (x7 y 5 + 10x) = 35x6 y 4 xy > Diff(F, x$2, y$3) = diff(F, x$2, y$3); 5 (x7 y 5 + 10x) = 2520x5 y 2 y 3 x2 > Diff(F, x, x, y, y, y) = diff(F, x, x, y, y, y); 5 (x7 y 5 + 10x) = 2520x5 y 2 3 x2 y > Diff(F, y$6, x$8) = diff(F, y$10, x$10); 14 (x7 y 5 + 10x) = 0 8 y 6 x Note que diff(F, x$2, y$3) o mesmo que diff(F, x, x, y, y, y). e Exemplo 5.30 Reforamos aqui nossa advertncia de que o operador diff no aceita c e a funes como argumentos, mas expresses algbricas. co o e > f := (x, y, z) -> x^3 + cos(y*z^4); f := (x, y, z) x3 + cos(yz 4 ) > f(x, y, z) = f(x, y, z); # checando a defini~o da fun~o ca ca f (x, y, z) = x3 + cos(yz 4 ) > Diff(f, z, y) = diff(f, z, y); # n~o o que se espera a e 2 f =0 yz > Diff(f(x, y, z), z, y) = diff(f(x, y, z), z, y); 2 f (x, y, z) = 4 cos(yz 4 )z 7 y 4 sin(yz 4 )z 3 yz Os apstrofos foramo utilizados para evitar que o Maple substitu o valor de f (x, y, z) o sse

128

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

5.3.4

O operador diferencial

A derivada de uma funao calculada com o operador diferencial D. Derivadas de c e ordem n podem ser calculadas na forma D@@n ou na forma D(D(. . . (D) . . . )). Exemplo 5.31 Usamos o operador diferencial D para calcular aqui as derivadas de algumas funes conhecidas. Observe que o resultado retornado sempre outra funo. co e ca > D(cos); sin > D(sec)(x); sec(x) tan(x) > D(ln); a > D(arctan)(z); 1 1 + z2 > D(arcsin); a 1 1 a2 1 a

Exemplo 5.32 Denimos aqui uma funo f (x) = ln(1 + x + x2 ) e calculamos sua derica vada g(x) = f (x). Note que g realmente uma funo (e no uma expresso algbrica) e ca a a e pois, por exemplo, possvel calcular um valor como g(2). e > f := x -> ln(1 + x + x^2); f := x ln(1 + x + x2 ) > g := D(f); g := x > g(2); 5 7 Exemplo 5.33 Vamos denir agora um operador H que uma soma da funo dada e ca com suas derivadas, at a terceira ordem. e > Id := x -> x; # Definiao da funao identidade c~ c~ Id := x x > H := Id + D + D@@2 + D@@3 ; 1 + 2x 1 + x + x2

5.3. DERIVADAS

129

H := Id + D + D(2) + D(3) O operador H assim denido deve atuar em funes. Por exemplo, denimos uma co 7 funo f dada por f (x) = x e calculamos H(f ). Observe que o resultado uma soma ca e de funes. co > f := x ->x^7; f := x x7 > H(f); f + (x 7x6 ) + (x 42x5 ) + (x 210x4 ) Agora, como H(f ) uma funo, podemos calcular o valor dessa funo em um ponto e ca ca dado, por exemplo no ponto a: > H(f)(a); a7 + 7a6 + 42a5 + 210a4 Usando o operador D, a derivada parcial com relaao ` i-sima varivel xi de uma c a e a funo f (x1 , . . . , xi , . . . ) denotada por D[i](f ). ca e 2 Derivadas mistas como f podem ser indicadas por D[i, j](f ). Em geral, a xi xj derivada de ordem n da funao f (x1 , . . . , xi , . . . ) com relaao `s variveis xs1 , xs2 , . . . , xsn c c a a D[s1 , s2 , . . . , sn ](f ). e A repetiao de variveis pode ser abreviada com o uso do cifro. Por exemplo, c a a e D[i, i, . . . , i, j, j, . . . , j , ] o mesmo que D[i$n, j$m, ].
n vezes m vezes

Exemplo 5.34 Neste exemplo denimos uma funo f (x, y) e calculamos vrias derica a vadas dela usando o operador diferencial. Usamos a forma inercial Diff para mostrar o que est sendo calculado a cada passo. a > f := (x, y) -> x^10 - y^20 + x^3*y^4 + 1; f := (x, y) x10 y 20 + x3 y 4 + 1 > Diff(f(x,y),x,y) - Diff(f(x,y),y,x) = (D[1,2] - D[2,1])(f)(x, y); 2 f (x, y) yx 2 f (x, y) xy =0

> Diff(f(x,y), x$3, y$2) = D[1$3, 2$2](f)(x, y); 5 f (x, y) = 72y 2 y 2 x3 > Diff(f(x,y), x$7) = D[1$7](f)(x, y); 7 f (x, y) = 604800x3 7 x

130

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

Exemplo 5.35 Denamos agora uma funo laplaciano L(f ) = D1,1 f +D2,2 f +D3,3 f . A ca vantagem em usar o operador D (no lugar do diff, por exemplo) que podemos derivar e sem saber os nomes das variveis, no importando que elas se chamem x, y, a, b, c, , a a , etc. > L := f -> (D[1$2] + D[2$2] + D[3$2])(f); L := D[1, 1] + D[2, 2] + D[3, 3] > g := (a, b, c) -> a^3 + b^4 + c^5; g := (a, b, c) a3 + b4 + c5 > L(g); ((a, b, c) 6a) + ((a, b, c) 12b2 ) + ((a, b, c) 20c3 ) > L(g)(1, -2, 0); 54 > L(g)(x, y, z); 6x + 12y 2 + 20z 3 > L(g)(alpha, beta, omega); 6 + 12 2 + 20 3 5.3.5 Derivadas de funes denidas implicitamente co

Funoes de uma ou vrias variveis denidas implicitamente por equaoes podem ter c a a c suas derivadas calculadas com o uso de um comando do tipo implicitdiff(equao, varivel1, varivel2, ...). ca a a Exemplo 5.36 Suponhamos que y seja denido implicitamente como funo diferencivel ca a de x atravs da equao x2 + y 2 = 1. Ento, a derivada de y com relao a x calculada e ca a ca e com o seguinte comando: > implicitdiff(x^2 + y^2 = 1, y, x); x y

Exemplo 5.37 O clculo de derivadas de funes denidas implicitimente tambm pode a co e ser feito passo a passo, se os comandos diff e solve forem utilizados, conforme mostramos a seguir. Neste caso, preciso escrever y(x), em vez de simplesmente y. e > eq1 := x^2 + y(x)^2 = 1; eq1 := x2 + y(x)2 = 1 > deq1 := diff(eq1, x);

5.3. DERIVADAS

131

deq1 := 2x + 2y(x) > solve(deq1, diff(y(x), x)); x y(x)

y(x) x

=0

Exemplo 5.38 Funes de vrias variveis tambm podem ser derivadas implicitamente co a a e com o implicitdiff de modo semelhante `s funes de uma varivel. Supondo que a a co a z equao xyz + e 9 = 0 dena implicitamente z como uma funo diferencivel de x e ca ca a y, vamos calcular suas derivadas. > eq := x*y*z + exp(z) - 9 = 0; eq := xyz + ez 9 = 0 > Diff(z, x) = implicitdiff(eq, z, x); yz z= x xy + ez > Diff(z, y) = implicitdiff(eq, z, y); xz z= y xy + ez Se uma funao for denida implicitamente por um sistema de equaoes, ento o c c a implicitdiff tambm calcula sua derivada. Para isso, listam-se as equaoes do sistema e c em forma de conjunto {eq1, eq2, . . . } e escreve-se o resultado como primeiro parmetro a do implicitdiff. Depois, escreve-se o segundo parmetro que deve ser um conjunto a {d1 , d2 , . . . } com as variveis que so dependentes e, nalmente, duas variveis v1 e v2 a a a para indicar a derivada de de v1 com relaao v2 . Assim, o comando implicitdiff neste c caso deve ter a forma implicitdiff({eq1, eq2, . . . }, {d1 , d2 , . . . }, v1 , v2 ) Exemplo 5.39 Suponhamos que y e z sejam funes diferenciveis de x, denidas imco a plicitamente pelo sistema de equaes co x3 + y 3 + z 3 = 1 x5 + y 4 = 10 Vamos calcular as derivadas de y e de z com relao a x. ca > eq1 := x^3 + y^3 + z^3 = 1; eq1 := x3 + y 3 + z 3 = 1 > eq2 := x^5 + y^4 = 10; eq2 := x5 + y 4 = 10 > y(x) = implicitdiff({eq1, eq2}, {y, z}, y, x);

132

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

y (x) =

5 x4 4 y3

> z(x) = implicitdiff({eq1, eq2}, {y, z}, z, x); z (x) = 1 x2 (4y 5x2 ) 4 z2y

Exemplo 5.40 Sejam x = x(u, v) e y = y(u, v) denidas implicitamente pelo sistema u = x2 + y 2 v = xy Vamos calcular as derivadas > s1 := u = x^2 + y^2; s1 := u = x2 + y 2 > s2 := v = x*y; s2 := v = xy > Diff(x, u) = implicitdiff({s1, s2}, {x, y}, x, u); x 1 x= 2 + x2 u 2 y > Diff(y, v) = implicitdiff({s1, s2}, {x, y}, y, v); x y= 2 + x2 v y x y e . u v

5.4

Integrais

O Maple possui amplos recursos para o clculo de integrais denidas, indenidas ou a imprprias. Ele conhece as regras de integrao usuais e os valores de muitas integrais o ca em casos particulares. 5.4.1 Integrais de funes de uma varivel co a

A integral (primitiva) de uma funao denida por uma expresso algbrica f (x) na c a e varivel x calculada com um comando int(f(x), x). a e Esse comando tambm possui uma forma inercial: Int(f(x), x). A forma inercial no e a efetua clculos, apenas mostra a integral no formato usual e util na apresentaao de a e c frmulas. Seu valor pode ser calculado aplicando-lhe um comando value. o Exemplo 5.41 Neste exemplo calculamos (x4 + 5x3 + 9x 1)dx e derivamos a resposta obtida para ver se coincide com o integrando dado. Depois, calculamos sec()d e derivamos a resposta obtida. Muitas vezes necessrio uma simplicao na derivada e a ca para podermos observar que ela est relacionada com o integrando dado. a

5.4. INTEGRAIS

133

> F := int(x^4 + 5*x^3 + 9*x - 1, x); 1 5 9 F := x5 + x4 + x2 x 5 4 2 > diff(F, x); x4 + 5x3 + 9x 1 > G := int(sec(alpha), alpha); G := ln(sec() + tan()) > diff(G, alpha); sec() tan() + 1 + tan()2 sec() + tan() > simplify(%); 1 cos() Exemplo 5.42 As regras bsicas de integrao como substituio, fraes parciais e ina ca ca co tegrao por partes so bem conhecidas pelo programa. ca a > Int(x/(x^2 + 1), x) = int(x/(x^2 + 1), x); x 1 dx = ln(x2 + 1) 2+1 x 2 > Int(x^3*exp(x^2), x) = int(x^3*exp(x^2), x); 1 1 2 2 2 x3 ex dx = x2 ex ex 2 2 > Int(1/(x^4 + 1), x) = int(1/(x^4 + 1), x); 1 1 x2 + x 2 + 1 1 1 dx = 2 ln + 2 arctan(x 2 + 1) + 2 arctan(x 2 1) 4+1 x 8 4 4 x2 x 2 + 1 Exemplo 5.43 O Maple supe que as constantes das integrais satisfazem determinadas o condies de modo a simplicar a resposta. Por exemplo, nos exemplos a seguir ele supe co o n = 1, q = 0, r = s e r = s. > Int(x^n, x): % = value(%) + C; x(n+1) +C n+1 > Int(1/(x*(x^q+1)), x): % = value(%) + C; xn dx = 1 ln(xq + 1) ln(xq ) dx = + +C x(xq + 1) q q > Int(sin(r*t)*sin(s*t), t): % = value(%) + C; 1 sin((r + s)t) 1 sin((r + s)t) sin(rt) sin(st)dt = +C 2 r + s 2 r+s

134

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

5.4.2

Integrais denidas e imprprias o

Uma integral denida em um intervalo [a, b] calculada com um comando do tipo e int(f(x), x=a..b). A funo pode ser descont ca nua no intervalo dado. Integrais imprprias so fornecidas como integrais denidas. Nesses casos podemos o a ter a ou b iguais a + ou . Exemplo 5.44 Calculemos a integral da funo cos(5t) no intervalo [a, b] e de ca intervalo [1, 2]. > Int(cos(5*t), t = a..b) = int(cos(5*t), t = a..b);
b 1 x2 +4

no

cos(5t)dt =
a

1 1 sin(5b) sin(5a) 5 5

> Int(1/(x^2+4), x = 1..2) = int(1/(x^2 + 4), x = 1..2);


2 1

x2

1 1 1 1 dx = arctan( ) +4 8 2 2

Exemplo 5.45 Pode ser que o problema precise de condies adicionais para poder ser co 3 calculado. A funo f (x) = 1/(x p) possui uma descontinuidade no ponto p. Assim, ca para calcular a integral dessa funo em um intervalo, essencial saber se p pertence ou ca e no ao intervalo dado. O comando int aceita uma opo continuous para avisar que a ca a funo dada contnua no intervalo dado. ca e Sem denir se p pertence a [1, 5] a integral no pode ser calculada: a > int(1/(x - p)^3, x = 1..5);
5 1

1 dx (x p)3

Avisando que p no pertence ao intervalo dado, ou seja, denindo a funo como a ca contnua, ento ela pode ser calculada facilmente: a > int(1/(x - p)^3, x = 1..5, continuous); 4 3 + p (5 + p)2 (1 + p)2

Exemplo 5.46 Aqui calculamos uma integral imprpria bem simples. o > 1/(x^2 + 1), x=1/sqrt(3)..infinity: Int(%) = int(%);

1 3

1 1 dx = x2 + 1 3

` a o o co Exemplo 5.47 As vezes o clculo da integral imprpria s pode ser feito com condies 4 1 adicionais. Neste exemplo, tentamos calcular a integral imprpria 3 x dx. Mas, o o clculo s possvel se considerarmos o Valor Principal de Cauchy da integral. Para a o e isso, basta acrescentar no comando int uma opo CauchyPrincipalValue. ca

5.4. INTEGRAIS

135

> # Sem hipteses adicionais, o seguinte problema n~o o a > # tem soluao ( indefinido) c~ e > Int(1/x, x=-3..4) = int(1/x, x=-3..4);
4 3

1 dx = undef ined x

> # Acrescentando-se a hiptese do "Valor Principal de o > # Cauchy", o problema pode ser facilmente resolvido > int(1/x, x=-3..4, CauchyPrincipalValue); 2 ln(2) ln(3) Exemplo 5.48 O Maple tem conhecimento de integrais imprprias famosas cujos clculos o a normalmente no so acessveis a quem estiver iniciando o estudo do Clculo. Mostramos a a a a seguir dois representantes ilustres dessa famlia de integrais. > exp(-x^2), x=-infinity..infinity: Int(%)=int(%);

ex dx =

> sin(x)/x, x=0..infinity: Int(%)=int(%);


0

sin(x) 1 dx = x 2

Exemplo 5.49 E muito comum encontrarmos uma integral denida que no pode ser a calculada de forma exata. Nesses casos, ela pode ser calculada numericamente de forma aproximada. Para isso, basta aplicar ` integral um comando evalf. a > int( root[3](x^5 + 1), x=2..7); # n~o pode ser calculada de forma exata a
7 2

(x5 + 1) 3 dx

> evalf(%);

# obtm uma aproxima~o numrica para a integral dada e ca e 64.88537023

Exemplo 5.50 O Maple sabe como derivar funes denidas por integrais, mesmo que co as integrais no possam ser calculadas de forma exata, como as que so mostradas neste a a exemplo. > F := x -> Int((1 + 1/t)^t, t=1..x);
x

F := x
1

1 (1 + )t dt t

> diff(F(x), x); 1 (1 + )x x

136

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

> F(2); # N~o consegue calcular exatamente ... a


2 1

1 (1 + )t dt t

> evalf(F(2)); # ... mas calcula aproximadamente 2.142945126 > G := x -> Int(sin(t*cos(t)), t = -x^2..exp(-3*x));
e(3x)

G := x
x2

sin(t cos(t))dt

> D(G)(x); 3e(3x) sin(e(3x) cos(e(3x) )) 2x sin(x2 cos(x2 )) 5.4.3 Integrais duplas e triplas

O pacote student possui dois comandos na forma inercial que so uteis no clculos de a a integrais mltiplas iteradas. O value aplicado a essas formas inerciais permite calcular u seus valores. A forma inercial da integral dupla de uma funo de duas variveis denida por uma ca a expresso algbrica f (x, y) nas variveis x, y : a e a e Doubleint(f(x, y), x=a..b, y=c..d), onde a..b e c..d denotam a variao do x e do y, respectivamente. Essa forma inercial ca e equivalente a Int(Int(f(x, y), x=a..b), y=c..d). Os intervalos de integraao podem depender das variveis e a ordem da integraao c a c pode ser permutada em alguns casos. Exemplo 5.51 Calculemos a integral dupla de x + y com y x 3y e 1 y 2. > with(student): > Doubleint(x + y, x=y..3*y, y=1..2): %=value(%);
2 1 y 3y

x + y dx dy = 14 > # O Doubleint anterior equivalente a: e > Int(Int(x + y, x=y..3*y), y=1..2): %=value(%);


2 1 y 3y

x + y dx dy = 14 Exemplo 5.52 Calculemos a integral dupla de f (x, y, z) = x + 2y + 3 com 0 y 4 x2 e 2 x 2. > Doubleint(x + 2*y + 3, y=0..4-x^2, x=-2..2): %=value(%);

5.4. INTEGRAIS
2 2 0 4x2

137

x + 2y + 3 dy dx =

992 15

Exemplo 5.53 Integrais duplas em coordenadas polares tambm podem ser calculadas e com o Doubleint. Neste exemplo calculamos a integral dupla de sin() com 0 cos() e 0 . > Doubleint(rho*sin(theta), rho=0..cos(theta), theta=0..Pi): > % = value(%);
0 0 cos()

d d =

1 3

A forma inercial da integral tripla de uma funao de trs variveis denida por uma c e a expresso algbrica f (x, y, z) nas variveis x, y, z dada por: a e a e Tripleint(f(x, y, z), x=a..b, y=c..d, z=e..f), onde a..b, c..d e e..f denotam a variao do x, y e do z, respectivamente. O Tripleint ca e equivalente a trs comandos Int encaixados: e Int(Int(Int(f(x, y, z), x=a..b), y=c..d), z=e..f). Exemplo 5.54 Calculemos a integral tripla de f (x, y, z) = z com 0 z 2 y x 6 2y e 0 y 2. > with(student): > Tripleint(z, z=0..sqrt(4-y^2), x=2-y..6-2*y, y=0..2): %=value(%); 2 62y 4y 2 26 z dz dx dy = 3 0 2y 0 > # O Tripleint anterior equivalente a: e > Int(Int(Int(z, z=0..sqrt(4-y^2)), x=2-y..6-2*y), y=0..2): %=value(%); 2 62y 2 4y 26 z dz dx dy = 3 0 2y 0 Exemplo 5.55 Integrais triplas em coordenadas esfricas ou cil e ndricas podem ser calculadas sem maiores diculdades. Aqui, calculamos a integral tripla de com 0 z 2 , 0 2 cos() e 0 /2. > Tripleint(rho, z=0..rho^2, rho=0..2*cos(theta), theta=0..Pi/2): > % = value(%);
1 2

4 y2,

2 cos() 0 0

dz d d =

3 4

138

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

5.5

Gradiente, Divergente, Rotacional e Laplaciano

O gradiente, o divergente, o rotacional e o laplaciano podem ser calculados com os comandos grad, diverge, curl e laplacian do pacote linalg. A sintaxe deles so parecidas entre si: nome do comando seguido da funo e da lista a ca de variveis. No caso do divergente e do rotacional a funao deve ser uma funao vetorial. a c c Exemplo 5.56 Neste exemplo as denies desses operadores podem ser recordadas. co > with(linalg): # Ignore a advert^ncia bobinha a seguir e

W arning, the protected names norm and trace have been redef ined and unprotected > F := [f(x,y,z), g(x,y,z), h(x,y,z)]: > v := [x, y, z]: # lista de variveis a > > curl(F, v); # rotacional de F f (x, y, z) y f (x, y, z) , z f (x, y, z) x > diverge(F, v); # divergente de F f (x, y, z) + x g(x, y, z) + y h(x, y, z) z f (x, y, z) z f (x, y, z) y f (x, y, z) , x

> grad(f(x,y,z), v); # gradiente de f f (x, y, z), f (x, y, z), f (x, y, z) x y z > laplacian(f(x,y,z), v); # laplaciano de f 2 f (x, y, z) + x2 2 f (x, y, z) + y 2 2 f (x, y, z) z 2

Exemplo 5.57 Neste exemplo calculado o gradiente de x3 + y 4 9z 2 nas variveis e a x, y, z e o gradiente de rset nas variveis r, s, t. a > grad(x^3 + y^4 - 9*z^2, [x,y,z]); 3x2 , 4y 3 , 18z > F := r*s^2*exp(t): var := [r, s, t]: > grad(F, var); s2 et , 2rset , rs2 et Exemplo 5.58 Um exemplo simples de clculo de laplaciano a

5.5. GRADIENTE, DIVERGENTE, ROTACIONAL E LAPLACIANO

139

> laplacian(x^4 + y^4 + z^4, [x,y,z]); 12x2 + 12y 2 + 12z 2 Exemplo 5.59 Consideremos a funo vetorial f (u, v, w) = (eu cos(v), eu sin(v), ln(w)) ca e calculemos seus rotacional e divergente. > f := [exp(u)*cos(v), exp(u)*sin(v), ln(w)]: > X := [u, v, w]: # lista de variveis a > curl(f, X); # rotacional de f [0, 0, 2eu sin(v)] > diverge(f, X); # divergente de f 2eu cos(v) + 1 w

Exemplo 5.60 Neste exemplo calculamos o rotacional e o divergente da funo vetorial ca 3 F (x, y, z) = (y, x cos(z), xyz). > F := [y, x^3*cos(z), x*y*z]: var := [x, y, z]: > RF := curl(F, var); # rotacional de F RF := xz + x3 sin(z), yz, 3x2 cos(z) 1 > diverge(F, var); # divergente de F xy > diverge(RF, var); # divergente do rotacional de F 0 Exemplo 5.61 Agora vamos ver como ca o clculo desses operadores nos sistemas de a coordenadas cilndricas e esfricas. Os comandos so semelhantes ao do caso do sistema e a de coordenadas cartesianas, com a unica diferena de acrescentar um terceiro parmetro c a do tipo coords = cylindrical ou coords = esferical. > > > > > with(linalg): # gradiente em coordenadas cilndricas f := r^2*cos(theta)*z^3: v := [r, theta, z]: grad(f, v, coords=cylindrical); 2r cos()z 3 , r sin()z 3 , 3r2 cos()z 2 > > # laplaciano em coordenadas cilndricas > f := z*cos(theta): v := [r, theta, z]: > laplacian(f, v, coords=cylindrical);

140

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

z cos() r2

> > # divergente em coordenadas esfricas e > G := vector([r, sin(theta), cos(phi)]): > diverge(G, v, coords=spherical);

v := vector([r, theta, phi]):

3r sin() + 2 sin() cos() sin() r sin()

5.6
5.6.1

Somatrios, produtrios, sries de potncias o o e e


Somatrios o

Um somatrio pode ser calculado pelo Maple com um comando sum(f(n), n=a..b) que o admite dois parmetros: um com o termo geral f (n) do somatrio dependendo de um a o inteiro n e outro parmetro com o intervalo de variao da varivel no formato n = a..b a ca a signicando que a n b. A forma inercial Sum(f(n), n=a..b) possui a mesma sintaxe e pode ser calculada aplicando-lhe um comando value. Exemplo 5.62 A soma da progresso geomtrica cujo termo geral an = 2n , com n a e e variando de 1 a k calculada com o comando: e > sum(2^n, n = 1..k); 2(k+1) 2 De modo semelhante, a soma da progresso aritmtica cujo termo geral an = 4n + 7 a e e com n variando de 1 a k calculada por: e > sum(4*n + 7, n = 1..k); 2(n + 1)2 + 5n 2 Podemos ter uma soma de uma quantidade innita de termos, como mostrado a seguir onde calculamos a soma de uma progresso geomtrica innita cujo termo geral (3/5)n : a e e > sum((3/5)^n, n=0..infinity); 5 2 Exemplo 5.63 Com o uso da forma inercial Sum podemos escrever frmulas ou seno tenas completas, que dispensam enunciados. c > Sum(a[n], n=1..10) = sum(a[n], n=1..10);
10

an = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10
n=1

> Sum(x^n/n!, n=0..6) = sum(x^n/n!, n=0..6);

5.6. SOMATORIOS, PRODUTORIOS, SERIES DE POTENCIAS


6

141

n=0

1 1 1 1 5 1 6 xn = 1 + x + x2 + x3 + x4 + x + x n! 2 6 24 120 720

> Limit(Sum(x^n/n!, n=0..k), k=infinity) = exp(x);


k k

lim

n=0

xn = ex n!

Em alguns casos o uso de apstrofos recomendado para evitar que sejam feitas subso e tituies indesejveis, por exemplo, quando variveis com mesmos nomes tiverem sido co a a usadas anteriormente. Exemplo 5.64 O Maple conhece o valor da soma de vrias sries innitas, como por a e p exemplo as somas das p-sries (cujo termo geral an = 1/n ) com p par e p 48. Neste e e 1 1 1 exemplo, calculamos a soma 1 + + + + 4 + que, surpreendentemente, e 16 81 n 4 uma expresso onde aparece . a > Sum(1/k^4, k = 1..infinity): %=value(%);

k=1

1 1 4 = 4 k 90

Calculando a soma parcial $P$ dos $20$ primeiros termos da srie: e \begin{verbatim} > P := sum(1/k^4, k = 1..20); 3178468114001972330616643665140369 2936813615588238080381960232960000 > P := evalf(P); # substitui P pelo seu valor decimal P := P := 1.082284588 Note que P uma aproximao para a soma da srie, cujo valor na notao decimal e ca e ca mostrado a seguir: e > Pi^4/90: % = evalf(%); 1 4 = 1.082323234 90 Sendo P uma aproximao para a soma da srie, a raiz quarta de 90P uma aproca e e ximao para o o valor de Pi: ca > root[4](90*P); 3.141564610 Exemplo 5.65 Seguem diversos clculos de somas de sries, alguns so bem conhecidos. a e a > Sum(1/n!, n=0..infinity): %=value(%);

142

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

n=0

1 = e n!

> Sum(k^2, k=1..n): %=value(%);


n

k2 =
k=1

1 1 1 1 (n + 1)3 (n + 1)2 + n + 3 2 6 6

> Sum(k^5, k = 1..n): %=value(%);


n

k5 =
k=1

1 1 5 1 (n + 1)6 (n + 1)5 + (n + 1)4 (n + 1)2 6 2 12 12

> Sum( 1/n, n=1..infinity): %=value(%); # srie harm^nica e o 1 = n

n=1

> Sum (1/(3*n+7), n=2..infinity): %=value(%);

n=2

1 = 3n + 7

> Sum ((-1)^n/(3*n + 7), n=2..infinity): %=value(%);

n=2

(1)n 111 1 1 = + 3 + ln(2) 3n + 7 140 9 3

5.6.2

Produtrios o

O clculo de produtrios feito com o comando product, cujo sintaxe semelhante ` a o e e a do comando sum. Esse comando tambm possui uma forma inercial chamada Product. e Exemplo 5.66 Utilizamos a forma inercial combinada com o value para calcular trs e produtos. > Product( a[k], k=1..8): %=value(%);
8

ak = a1 a2 a3 a4 a5 a6 a7 a8
k=1

> Product( 2^n, n=0..100):

% = ifactor(value(%));
100

2n = (2)5050
n=0

> Product( (1+1/n^2), n=1..infinity): %=value(%);

1+
n=1

1 n2

sinh()

5.6. SOMATORIOS, PRODUTORIOS, SERIES DE POTENCIAS

143

5.6.3

Sries de potncias e e

O Maple possui muitos comandos para serem utilizados com sries de potncias. e e Vamos inicialmente citar um dos mais simples: o que obtm desenvolvimento em srie e e de Taylor de uma funao. c A sintaxe desse comando taylor(f(x), x=a, n) ou series(f(x), x=a, n) onde e f (x) uma expresso algbrica na varivel x, a o ponto em torno do qual ser feito e a e a e a o desenvolvimento em srie (ou seja, os termos da srie so potncias de (x a)) e n e e a e corresponde ` ordem. a Exemplo 5.67 Neste exemplo, obtemos desenvolvimentos de Taylor da funo sen (x) ca em srie de potncias de x e de (x 1). Depois, convertemos as sries obtidas para e e e polinmios com um comando convert(srie, polynom). o e > S1 := taylor( sin(x), x=0, 10); 1 1 5 1 7 1 S1 := x x3 + x x + x9 + O(x10 ) 6 120 5040 362880 > S2 := taylor( sin(x), x = 1, 4); 1 1 sin(1)(x 1)2 cos(1)(x 1)3 + O((x 1)4 ) 2 6 A notao O(f (x a)) representa uma funo que tende a 0 mais rapidamente do ca ca O(f (x a)) que f (x a) quando x a, ou seja, signica que lim = 0. Por exemplo, o xa f (x a) O(x10 ) O(x10 ) utilizado anteriormente signica que lim = 0. x0 x10 S2 := sin(1) + cos(1)(x 1) > P1 := convert(S1, polynom); # converte S1 para polin^mio o 1 1 5 1 7 1 P 1 := x x3 + x x + x9 6 120 5040 362880 > P2 := convert(S2, polynom); # converte S2 para polin^mio o 1 1 sin(1)(x 1)2 cos(1)(x 1)3 2 6 Depois da converso para polinmio, diversas operaes podem ser feitas como clculo a o co a de derivadas, integrais, construo de grcos, etc. Aqui, transformamos P 1 em uma ca a funo f e calculamos f (/6) que uma aproximao para sen (/6). ca e ca P 2 := sin(1) + cos(1)(x 1) > f := unapply(P1, x); 1 1 5 1 7 1 f := x x x3 + x x + x9 6 120 5040 362880 > evalf( f(Pi/6) ); .5000000003 O pacote powseries possui vrios comandos para manipulaao de sries de potncias. a c e e

144

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

> with(powseries); [compose, evalpow, inverse, multconst, multiply, negative, powadd, powcos, powcreate, powdi, powexp, powint, powlog, powpoly, powsin, powsolve, powsqrt, quotient, reversion, subtract, template, tpsform] Normalmente, as sries obtidas com esses comandos no so mostradas automaticae a a mente. Para ver uma expresso truncada da srie, devemos usar um comando a e tpsform(f, varivel, ordem) onde f est relacionado com os coecientes da srie. a a e Nesse pacote, uma srie cujos coecientes do termo geral so denidos por igualdade(s) e a do tipo f (n) = expr denida com um comando powcreate(f(n) = expr). Depois disso, e o f pode ser passado como parmetros para comandos que executam operaes com as a co sries. e Exemplo 5.68 Aqui criamos uma srie S1 cujo termo geral an = 1/n!. Depois, usamos e e S1 para construir uma srie S2 cujos valores nos pontos do seu dom e nio correspondem aos inversos multiplicativo dos de S1 . > with(powseries): > powcreate(a(n) = 1/n!): > tpsform(a, x, 6); 1 1 1 5 1 + x + x2 + x3 + 1/24x4 + x + O(x6 ) 2 6 120 > b := inverse(a): > tpsform(b, x, 6); 1 1 1 1 5 1 x + x2 x3 + x4 x + O(x6 ) 2 6 24 120 Agora, vamos multiplicar as sries com coecientes denidos por a e b. Note que o e resultado a srie constante igual a 1. e e > c := multiply(a, b): > tpsform(c, x, 6); 1 + O(x6 ) Exemplo 5.69 Neste exemplo denimos duas sries cujos coecientes dos termos gerais e so an e bn , duas seqncias denidas recursivamente por an = an1 + an2 , a0 = a1 = 1 a ue 1 e bn = 1 + , b0 = 1. Depois, somamos as sries obtidas, integramos a primeira e e bn1 derivamos a segunda termo a termo. > > > > > > with(powseries): # Defini~o da srie 1 cujo termo geral a(n) ca e e powcreate(a(n) = a(n-2) + a(n-1), a(0)=1, a(1)=1): # Defini~o da srie 2 cujo termo geral b(n) ca e e

5.6. SOMATORIOS, PRODUTORIOS, SERIES DE POTENCIAS

145

> powcreate(b(n)=1 + 1/b(n-1), b(0)=1): > > tpsform(a, x, 7); # mostra termos da srie 1 e 1 + x + 2x2 + 3x3 + 5x4 + 8x5 + 13x6 + O(x7 ) > tpsform(b, x, 7); # mostra termos da srie 2 e 3 5 8 13 21 1 + 2x + x2 + x3 + x4 + x5 + x6 + O(x7 ) 2 3 5 8 13 > s := powadd(a, b): # soma das sries 1 e 2 e > tpsform(s, x, 7); 7 14 33 77 190 6 2 + 3x + x2 + x3 + x4 + x5 + x + O(x7 ) 2 3 5 8 13 > d := powdiff(b); # derivada da srie 2 e d := proc(powparm) . . . end proc > tpsform(d, x, 7); 32 3 65 4 126 5 34 6 x + x + x + x + O(x7 ) 5 8 13 3 > i := powint(a); # integral da srie 1 e 2 + 3x + 5x2 + i := proc(powparm) . . . end proc > tpsform(i, x, 7); 1 2 3 4 x + x2 + x3 + x4 + x5 + x6 + O(x7 ) 2 3 4 3 Exemplo 5.70 O pacote powseries possui comandos para a construo de sries de ca e potncias de vrias funes bsicas como logaritmo, raiz quadrada, seno, cosseno, etc. e a co a Aqui, Construmos as sries do seno e da exponencial (de base e) e efetuamos algumas e operaes aritmticas com essas sries. co e e > with(powseries): > SENO := powsin(x): # srie para sen(x) e > tpsform(SENO, x, 8); 1 5 1 7 1 x x + O(x8 ) x x3 + 6 120 5040 > EXPO := powexp(x): # srie para exp(x) e > tpsform(EXPO, x, 8); 1 1 1 5 1 6 1 7 1 x + x + x + O(x8 ) 1 + x + x2 + x3 + x4 + 2 6 24 120 720 5040 > COMP := compose(EXPO, SENO): # srie para a composta exp(sen(x)) e > tpsform(COMP, x, 8);

146

CAP ITULO 5. CALCULO DIFERENCIAL E INTEGRAL

1 1 1 1 6 1 1 + x + x2 x4 x5 x + x7 + O(x8 ) 2 8 15 240 90 > MULT := multiply(EXPO, SENO): # srie para sen(x) exp(x) e > tpsform(MULT, x, 8); 1 1 1 1 7 x + x2 + x3 x5 x6 x + O(x8 ) 3 30 90 630 > QUOC := quotient(SENO, EXPO): # srie para sen(x)/exp(x) e > tpsform(QUOC, x, 8); 1 1 1 1 7 x x2 + x3 x5 + x6 x + O(x8 ) 3 30 90 630

Cap tulo 6

Equaes Diferenciais co
O Maple possui vrios algoritmos implementados em forma de comandos que servem a para resolver equaoes e sistemas de equaes diferenciais, sejam elas ordinrias ou parc co a ciais. Neste cap tulo, damos apenas uma pequena amostra da resoluo desse tipo de proca blema. Introduzimos brevemente alguns comandos dos pacotes DEtools (que tem mais de 100 comandos) e PDEtools. As soluoes de equaoes diferenciais (ou sistemas) podem ser obtidas usando mtodos c c e numricos, mas no abordaremos esses mtodos neste cap e a e tulo.

6.1

Equaes Diferenciais Ordinrias co a

O comando bsico para resoluao de Equaes Diferenciais Ordinrias (EDO) o a c co a e dsolve. Ele pode ser usado de vrias maneiras: a dsolve(EDO) Resolve a EDO fornecida como parmetro. a dsolve(EDO, y(x), opes) Calcula y(x) na EDO fornecida como primeiro parmetro. co a Opcionalmente pode denir o mtodo de resoluao que pode ser implicit, explicit, pae c rametric, useInt, quadrature, linear, homogeneous, separable, Bernoulli, Abel, entre outros. dsolve({EDO, CI}, y(x), opes) Calcula y(x) na EDO, usando as condioes iniciais co c CI e opoes fornecidas. c dsolve({sistema, condioes}, {funes}, opes) Determina as funes que so c co co co a solues do sistema de EDO usando condioes iniciais e opes fornecidas. co c co Uma EDO pode ser denida com o operador diferencial D ou com o comando diff. Por exemplo, a equao ca y 3y + y 5y = cos(x) pode ser fornecida na forma diff(y(x), x$3) - 3*diff(y(x), x$2) + diff(y(x), x) - 5*y(x) = cos(x) ou na forma
147

148

CAP ITULO 6. EQUACOES DIFERENCIAIS

(D@@3)(y)(x) - 3*(D@@2)(y)(x) + D(y)(x) - 5*y(x) = cos(x) As constantes reais arbitrrias que aparecem aps a resoluo das equaoes so denoa o ca c a tadas pelo Maple por C1, C2, C3, . . . Exemplo 6.1 Vamos resolver a equao diferencial de primeira ordem linear y + y = y 2 ca escrevendo-a inicialemente com o operador diferencial D. A funo y deve ser escrita ca acompanhada de uma varivel, como em y(x). a > eq1 := D(y)(x) + y(x) = y(x)^2; eq1 := D(y)(x) + y(x) = y(x)2 dsolve(eq1); # resolve a EDO definida em eq1 y(x) = 1 1 + ex C1 Escrevendo a mesma equao com o comando diff: ca > eq2 := diff(y(x), x) + y(x) = y(x)^2; eq2 := > dsolve(eq2); y(x) + y(x) = y(x)2 x

# resolve a EDO definida em eq2 y(x) =

1 1 + ex C1 Obtendo soluao escrita na forma de integral: c > dsolve(eq1, useInt); y(x) = ex 1 1 x dx + C1 e

Obtendo agora soluo na forma impl ca cita: > dsolve(eq1, implicit); 1 1 ex C1 = 0 y(x) Os comandos odeadvisor(equao) e intfactor(equao) do pacote DEtools clasca ca sica e calcula um fator integrante para a equaao diferencial fornecida como parmetro, c a respectivamente. Exemplo 6.2 Consideremos a equao diferencial linear homognea de quarta ordem ca e com coecientes constantes y + 8y + 24y + 32y + 16y = 0. Vamos resolv-la com o e dsolve e classic-la com o odeadvisor. a > eq3 := diff(y(x), x$4) + 8*diff(y(x), x$3) + 24*diff(y(x), x$2) + > 32*diff(y(x), x) + 16*y(x) = 0;

6.1. EQUACOES DIFERENCIAIS ORDINARIAS

149

eq3 :=

4 y(x) + 8 x4

3 y(x) + 24 x3

2 y(x) + 32 x2

y(x) + 16y(x) = 0 x

> dsolve(eq3); y(x) = C1e(2x) + C2e(2x) x + C3e(2x) x2 + C4e(2x) x3 > with(DEtools): odeadvisor(eq3); [[ high order, missing x]] A classicao mostrada indica que a equao dada de ordem superior (higher order) ca ca e com coecientes constantes (missing x). Exemplo 6.3 Vamos obter um fator integrante, resolver e classicar a equao ca 3yx2 y = 3 . x 2y 4 > with(DEtools): > eq4 := D(y)(x) = 3*y(x)*x^2/(x^3 + 2*y(x)^4); eq4 := D(y)(x) = 3 y(x)x2 x3 + 2y(x)4

> intfactor(eq4); # obtm fator integrante e x3 + 2y(x)4 y(x)2 > dsolve(eq4); ln(x) C1 4 ln 9 y(x) x3/4 + 4 3x3 2y(x)4 ln 9 x3 =0

Note que a soluo fornecida est na forma impl ca a cita. > odeadvisor(eq4); # classifica a equaao c~ [[ homogeneous, classG], rational] Para informaes sobre as classicaao das equaoes, digite co c c > ?odeadvisor,types O comando declare do pacote PDEtools simplica as notaoes de derivada que apac recem nas equaoes diferenciais, deixando a apresentao da equaao mais prxima do c ca c o formato usual. Exemplo 6.4 Neste exemplo, escrevemos algumas EDOs dadas no formato usual. > with(PDEtools): > declare(y(x), prime=x); y(x) will now be displayed as y derivatives with respect to: x of functions of one variable will now be displayed with

150

CAP ITULO 6. EQUACOES DIFERENCIAIS

> diff(y(x), x$4) - 10*diff(y(x), x$2) + 9 = 0; y 10y + 9 = 0

> diff(y(x), x$4) + 8*diff(y(x), x$3) + 24*diff(y(x), x$2) + > 32*diff(y(x), x) + 16*y(x) = 0; y + 8y + 24y + 32y + 16y = 0

> diff(y(x), x) = 2*x*y(x) - x; y = 2xy x Para testar se uma soluo encontrada est correta, podemos substitu diretamente ca a -la na equaao e observar a igualdade obtida. Outra maneira, mais fcil, usar um comando c a e odetest(soluo, equao). Se esse comando retornar uma resposta igual a zero, ento ca ca a a soluao encontrada realmente uma soluao da equaao dada. c e c c Exemplo 6.5 Vamos resolver a equao linear de primeira ordem y = 2xy x. ca eq5 := diff(y(x),x) = 2*x*y(x) - x; eq5 := > sol := dsolve(eq5); 1 2 + e(x ) C1 2 Agora vamos substituir a resposta obtida na equao dada e simplicar: ca sol := y(x) = > subs(sol, eq5); x > simplify(%); 2xe(x > odetest(sol, eq1);
2)

y(x) = 2xy(x) x x

1 2 + e(x ) C1 2

1 2 = 2x( + e(x ) C1) x 2


2)

C1 = 2xe(x

C1

# retorna 0 se sol for realmente uma soluao c~ 0

6.2

Problemas de Valor Inicial

Valores iniciais das solues de EDO podem ser fornecidas juntamente com a prpria co o equao. A equaao e as condioes iniciais devem formar um conjunto a ser fornecido ca c c como primeiro parmetro do dsolve. a Exemplo 6.6 Determine a soluo de y + 4y + 13y = 2t + 3e2t cos(3t), y(0) = 0, ca y (0) = 1.

6.3. SISTEMAS DE EQUACOES DIFERENCIAIS

151

> pvi := {diff(y(t), t$2) + 4*diff(y(t), t) + 13*y(t) = 2*t + > 3*exp(-2*t)* cos(3*t), y(0) = 0, D(y)(0) = -1}; pvi := 2 y(t) + 4 t2 y(t) + 13y(t) = 2t + 3e(2t) cos(3t), t y(0) = 0, D(y)(0) = 1

> solucao := dsolve({pvi}); solucao := y(t) = 179 (2t) 121 (2t) e sin(3t) e cos(3t)+ 507 1014 1 (48e(2t) + 507 sin(3t)t + 156te(2t) + 169 cos(3t))e(2t) 1014

> combine(solucao); y(t) = 179 (2t) 8 (2t) 8 1 2 e sin(3t) + e cos(3t) + e(2t) sin(3t)t + t 507 169 169 2 13

Exemplo 6.7 Vamos resolver o problema de valor inicial y (4) 10y + 9 = 0, y(0) = y (0) = y (0) = y (0) = 0 e usar a resposta para denir uma funo F (x). ca eq := (D@@4)(y)(x)- 10*(D@@2)(y)(x) + 9 = 0; eq := (D(4) )(y)(x) 10(D(2) )(y)(x) + 9 = 0 cond := y(0) = 0, D(y)(0) = 0, (D@@2)(y)(0) = 0, (D@@3)(y)(0) = 0; cond := y(0) = 0, D(y)(0) = 0, (D(2) )(y)(0) = 0, (D(3) )(y)(0) = 0 > sol := dsolve({eq, cond}); 9 (10x) 9 (10x) 9 9 e e + x2 + 200 200 20 100 > F := unapply(rhs(sol), x); 9 (10x) 9 (10x) 9 9 F := x e e + x2 + 200 200 20 100 sol := y(x) =

6.3

Sistemas de Equaes Diferenciais co

Sistemas de equaes diferenciais podem ser resolvido de maneira semelhante ` reco a soluo de uma unica EDO, bastando para isso escrever todas as equaoes envolvidas em ca c um unico conjunto e fornec-lo como primeiro parmetro do dsolve. Se houver condies e a co iniciais, elas devem ser anexadas a esse conjunto tambm. e Exemplo 6.8 Consideremos o sistema f (x) = f (x) + g(x) g (x) = 3f (x) g(x) Vamos formar um conjunto com essas equaes e resolv-lo com o dsolve. co e

152

CAP ITULO 6. EQUACOES DIFERENCIAIS

> sis1 := D(f)(x) = f(x) + g(x), D(g)(x) = 3*f(x) - g(x); sis1 := D(f )(x) = f (x) + g(x), D(g)(x) = 3f (x) g(x) > dsolve({sis1}); {g(x) = 3 C1e(2x) + C2e(2x) , f (x) = C1e(2x) + C2e(2x) } Exemplo 6.9 Resolver o sistema y (t) + x (t) = cos(t) x (t) y(t) = sen (t) com as condies iniciais y(0) = 1, y (0) = 1, x(0) = 1, x (0) = 0. co > sis2 := diff(y(t), t$2) + diff(x(t), t) = cos(t), diff(x(t), t$2) - y(t) = sin(t); 2 y(t) + t2 x(t) t = cos(t), 2 x(t) y(t) = sin(t) t2

sis2 := > ini2 :=

y(0) = -1, D(y)(0) = -1, x(0) = 1, D(x)(0) = 0; ini2 := x(0) = 1, y(0) = 1, D(y)(0) = 1, D(x)(0) = 0

> dsolve({sis2, ini2}); {y(t) = cos(t) sin(t), x(t) = cos(t)}

6.4

Soluo em Sries de Potncias ca e e

H duas maneiras de se obter a soluo de uma equaao diferencial em srie de a ca c e potncias: usando o comando dsolve ou o comando powsolve do pacote powseries. e Para obter sries de potncias com o dsolve, basta acrescentar uma opao series ou e e c type=series como terceiro parmetro: a dsolve({equao, condies}, funo, series) ca co ca Um comando do tipo Order = n obtm desenvolvimento em srie (feito posteriore e mente) at ordem n. e Para obtermos sries de potncias de (x a) , devemos fornecer as condioes inicie e c ais denidas em a (y(a), y (a), y (a), . . . ). Tambm podem ser resolvidos dessa forma e sistemas de equaes diferenciais. co A desvantagem no uso do comando dsolve que ele no fornece o termo geral da srie e a e apresentada como soluao da EDO dada. c Exemplo 6.10 > EDO := (D@@3)(y)(x) - x*D(y)(x) = x^2 + exp(x); EDO := (D(3) )(y)(x) xD(y)(x) = x2 + ex > cond1 := y(1)=0, D(y)(1)=0, (D@@2)(y)(1) = 0;

6.4. SOLUCAO EM SERIES DE POTENCIAS

153

cond1 := y(1) = 0, D(y)(1) = 0, (D(2) )(y)(1) = 0 > dsolve({EDO, cond1}, y(x), series); 1 1 1 1 1 1 1 1 y(x) = ( + e)(x1)3 +( + e)(x1)4 +( + e)(x1)5 +( + e)(x1)6 + 6 6 12 24 40 60 144 144 11 1 1 1 + e (x 1)7 + ( + e)(x 1)8 + O((x 1)9 ) 5040 720 2016 2520 Exemplo 6.11 Obter a soluo em srie de potncias de y xy = x2 ex com as ca e e condies iniciais y(0) = 0, y (0) = 1, y (0) = 3. co > EDO := (D@@3)(y)(x) - x*D(y)(x) = x^2 + exp(x): > Order:=9: > cond2 := y(0)=0, D(y)(0)=1, (D@@2)(y)(0) = -3; cond2 := y(0) = 0, D(y)(0) = 1, (D(2) )(y)(0) = 3 > dsolve({EDO, cond2}, y(x), series); 3 1 1 1 1 6 1 7 1 8 y(x) = x x2 + x3 + x4 x5 + x + x x + O(x9 ) 2 6 12 40 180 560 2880 O pacote powseries possui o comando powsolve para resolver EDO em sries de e potncias: e powsolve(equao) ou powsolve({equao, condies}) ca ca co As sries obtidas podem ser mostradas com o comando tpsform(srie, varivel, ordem) e e a ou fornecidas como parmetros para outros comandos desse pacote (veja seo 5.6.3). a ca Devem ser observados os seguintes itens:
A equaao fornecida ao powsolve deve ser denida com o comando diff. c Se houver condies iniciais, elas devem ser calculadas em 0 (y(0), y (0), y (0), etc.) co e denidas com o operador diferencial D. O termo geral pode ser mostrado se for usado um comando da forma a(_k) = X(_k) onde X deve ser o nome da srie (primeiro parmetro do tpsform). e a

Exemplo 6.12 Vamos obter a soluo da Equao de Legendre ca ca (1 x2 )y 2xy + n(n + 1)y = 0 em srie de potncias. e e > restart; > legendre := (1-x^2)*diff(y(x),x$2) - 2*x*diff(y(x),x) + n*(n+1)*y(x)=0; legendre := (1 x2 ) 2 y(x) 2x x2 y(x) + n(n + 1)y(x) = 0 x

154

CAP ITULO 6. EQUACOES DIFERENCIAIS

> with(powseries): > solucao := powsolve(legendre): > tpsform(solucao, x, 6); 1 1 1 C0 + C1x C0(n2 + n)x2 C1(n2 + n 2)x3 + C0(n2 + n)(n2 + n 6)x4 + 2 6 24 1 C1(n2 + n 2)(n2 + n 12)x5 + O(x6 ) 120 Para obter o termo geral da srie obtida: e > a(_k) = solucao(_k); a( k) = a( k 2)(n2 + n + 3 k 2 k 2 ) k( k 1)

Exemplo 6.13 Resolver o problema de valor inicial y xy = 0, y(0) = 1, y (0) = 1 obtendo o desenvolvimento da soluo em srie de potncias e o seu termo geral. ca e e > EDO := diff(y(x),x$2) - x*y(x) = 0; EDO := > CI := y(0)=1, D(y)(0)=1; CI := y(0) = 1, D(y)(0) = 1 > with(powseries): > sol := powsolve({EDO, CI}): > tpsform(sol,x,10); 1 1 1 6 1 7 1 1 + x + x3 + x4 + x + x + x9 + O(x10 ) 6 12 180 504 12960 > a(_k) = sol(_k); a( k) = a( k 3) k( k 1) 2 y(x) xy(x) = 0 x2

6.5

Equaoes Diferenciais Parciais c

Diversos tipos de Equaoes Diferenciais Parciais podem ser resolvidas com o comando c pdsolve(equaao, op~es). Na deniao da equao, podemos usar o diff o operador c~ co c ca diferencial D. Nas solues apresentadas pelo pdsolve, as constantes arbitrrias so denotadas por co a a C1, C2, . . . , c1 , c2 , . . . e as funes arbitrrias por F 1, F 2, . . . co a Exemplo 6.14 Iniciamos resolvendo a equao x ca f (x, y) y f (x, y) = 0. y x

> edp1 := x*D[2](f)(x,y)-y*D[1](f)(x,y) = 0;

6.5. EQUACOES DIFERENCIAIS PARCIAIS

155

edp1 := xD[2](f )(x, y) yD[1](f )(x, y) = 0 > pdsolve(edp2); f (x, y) = F 1(x2 + y 2 ) Exemplo 6.15 Usamos o declare do pacote PDEtools para indicar em forma de ndices as derivadas que aparecem na equao da onda utt = c2 uxx . ca with(PDEtools): declare(u(x, t)); u(x, t) will now be displayed as u > edp2 := diff(u(x, t), t$2) = c^2*diff(u(x, t), x$2); edp2 := ut,t = c2 ux,x > pdsolve(edp2); u = F 1(ct + x) + F 2(ct x) > undeclare(u); u(x, t) will now be displayed *as is* Exemplo 6.16 A equao do calor pode ser resolvida acrescentando-se uma opo ca ca HINT=* ao comando pdsolve para ele usar separao de variveis e uma opo build ca a ca para ele resolver qualquer EDO que aparea na resoluo. c ca > edp3 := diff(u(x, t), t) - k*diff(u(x, t), x$2) = 0; 2 edp3 := u(x, t) k u(x, t) = 0 t x2 > sol := pdsolve(edp3, u(x, t), HINT=*, build); sol := u(x, t) = C3e(k c1 t) C1e( Fazendo as constantes iguais a 1, obtemos:
c1 x)

C3e(k c1 t) C2 e( c1 x

> S := eval(rhs(sol), {_C1 = 1, _C2 = 1, _C3 = 1, k = 1, _c[1] = 1}); et S := et ex + x e Exemplo 6.17 Para encerrar, resolvemos a equao de Laplace no caso bidimensional. ca edp4 := diff(f(x, y), x$2) + diff(f(x, y), y$2) = 0; 2 2 edp4 := f (x, y) + f (x, y) = 0 x2 y 2 > pdsolve(edp4); f (x, y) = F 1(y + Ix) + F 2(y Ix) > pdsolve(edp4, f(x, y), HINT=*, build); f (x, y) = e
( c1 x)

C1 C3 sin(

c1 y) + e

( c1 x)

C1 C4 cos(

C2 C3 sin( c1 y) c1 y) + e( c1 x) C2 C4 cos( c1 )y) + e( c1 x)

156

CAP ITULO 6. EQUACOES DIFERENCIAIS

6.6

Grcos de solues de equaoes diferenciais a co c

O pacote DEtools possui um comando DEplot para construao de grcos de solues c a co de EDO, at mesmo em casos em que o dsolve no consiga resolver a equaao de forma e a c exata: DEplot(EDO, y(x), x=a..b, [[condies]], y=c..d, opes) co co Exemplo 6.18 Construir o grco da soluo de y + 4y = sen 2 (2x) com as condies a ca co iniciais y() = 0 e y () = 0. > > > > > with(DEtools): edo := diff(y(x), x$2) + 4*y(x) = (sin(2*x))^2: ini := y(Pi) = 0, D(y)(Pi) = 0: opcoes := linecolor=red, stepsize=0.02: DEplot(edo, y(x), x=-2..2, [[ini]], y=0..0.4, opcoes);

Veja o grco na Figura 6.1. a


Figura 6.1:

0.4

0.3

y(x)

0.2

0.1

1 x

Outra opao usar o comando odeplot(soluo, opes) do pacote plots. Ele c e ca co constri o grco da soluao retornada por um dsolve, conforme exemplicamos a seguir. o a c Nesses casos, recomendvel que o dsolve tenha um parmetro opcional numeric. e a a > > > > > with(plots): edo := diff(y(x), x$2) + 4*y(x) = (sin(2*x))^2: ini := y(Pi) = 0, D(y)(Pi) = 0: p := dsolve({edo, ini}, y(x), numeric): odeplot(p, x=-2..2, y=0..0.4);

O grco assim obtido semelhante ao da Figura 6.1. a e

Cap tulo 7

Problemas de Clculo e de a Geometria Anal tica


Inmeros problemas de Clculo Diferencial e Integral e de Geometria Anal u a tica podem ser resolvidos com o aux do Maple. Praticamente todo tipo de problema pode ter uma lio participao maior ou menor desse tipo de programa na sua resoluao. O que mostramos ca c neste cap tulo apenas uma pequena amostra dessa variedade de problemas. e O pacote student possui comandos que podem ser uteis na resoluo de problemas ca passo a passo. Neste cap tulo, vrios exemplos utilizam os comandos desse pacote: a > with(student); [D, Di, 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]

7.1

Operaoes elementares com grcos de funes c a co

Conhecido o grco de uma funo f (x), podemos construir a partir dele vrios outros a ca a grcos atravs de operaoes de translaao, reexo, ampliaao e reduao. O Maple a e c c a c c util para observar esse tipo de operaao ao construir o grco de f (x) e o grco e c a a transformado em um mesmo sistema de eixos, conforme exemplicamos a seguir com uma funao polinomial f (x). c > f := x -> x^3 - x; f := x x3 x Exemplo 7.1 O grco de f (x) o grco de f (x) virado de cabea para baixo, ou a e a c seja, reetido com relao ao eixo Ox (Figura 7.1). ca > plot([f(x), -f(x)], x=-2..2, y=-2..2, thickness=[0, 3], > color=[red, blue]);
157

158

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

Figura 7.1:

1 x

Exemplo 7.2 Ao somar uma constante positiva k ` varivel x, o grco desloca-se k a a a unidades para a esquerda (Figura 7.2). > plot([f(x), f(x + 1)], x=-3..2, y=-2..2, thickness=[0, 3], > color=[red, blue]);
Figura 7.2:

2 x

Exemplo 7.3 Uma operao do tipo kf (x/k) causa uma ampliao ou reduo no grco ca ca ca a de f (x) (Figura 7.3). > plot([f(x), 2*f(x/2)], x=-3..3, y=-2..2, thickness=[0, 3],

7.2. TEOREMA DO VALOR MEDIO

159

>
Figura 7.3:

color=[red, blue]);

1 x

Outras grcos que podem ser constru a dos so os de |f (x)|, f (|x|), f (x) + k, f (x) k, a f (x k), f (x), kf (x) e f (kx) onde k > 0.

7.2

Teorema do Valor Mdio e

Um dos mais importantes teoremas do Clculo o Teorema do Valor Mdio que arma a e e que se uma funo cont ca e nua em um intervalo fechado [a, b] e derivvel no seu interior, a ento existe um ponto c do seu interior tal que a f (c) = f (b) f (a) . ba

Geometricamente, isso signica que poss construir uma reta tangente ao grco de e vel a f em (c, f (c)) que seja paralela ` reta que passa pelos pontos (a, f (a)) e (b, f (b)). a Exemplo 7.4 Consideremos a funo f (x) = x + sen x no intervalo [1, 3]. Vamos deca terminar inicialmente um c que satisfaa o do Teorema do Valor Mdio. O clculo desse c e a c em geral s pode ser feito numericamente de forma aproximada. o > > > > a := 1.0: b := 3.0: f := x -> x + sin(x): m := (f(b) - f(a))/(b - a): eq := D(f)(c) = m; eq := 1 + cos(c) = .6498245115 > c := fsolve(eq);

160

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

c := 1.928554775 Agora, construmos o grco de f , da reta y = f (a) + m(x a) que passa por (a, f (a)) a e por (b, f (b)) e da sua paralela y = f (c) + m(x c) que passa por (c, f (c)). > > > > > > > > fa := f(a): fb := f(b): fc := f(c): opcao := x=a..b, xtickmarks=[a, b, c], ytickmarks=[fa,fb,fc], labels=[ , ]: graf1 := plot(f(x), opcao, thickness=2, color=blue, title = "Exemplificando o Teorema do Valor Mdio"): e graf2 := plot(f(a) + (x - a)*m, opcao): graf3 := plot(f(c) + (x - c)*m, opcao): plots[display](graf1, graf2, graf3);

Figura 7.4:

Exemplificando o Teorema do Valor Medio

3.14112

2.86524

1.84147 1 1.92855 3

7.3

Problemas de mximos e m a nimos

Os problemas que consistem no clculo de mximos ou m a a nimos de funes so muitos co a freqentes e podem ser aplicados a muitas situaoes de natureza prtica. Nesta seao u c a c resolvemos passo a passo alguns problemas desse tipo (Exemplo 7.7) e de forma direta (Exemplo 7.5), usando comandos do pacote student. Os comandos maximize(f(x), x=a..b) e minimize(f(x), x=a..b) do pacote student calculam o valor mximo e o valor m a nimo de f (x) no intervalo [a, b], respectivamente. Se for acrescentado um terceiro parmetro igual a location, ento, alm do valor mximo a a e a ou m nimo, mostrado tambm os pontos do dom e e nio onde eles ocorrem. Exemplo 7.5 Calcular os mximos e m a nimos locais da funo y = x3 24x + 40 no ca intervalo [3, 3].

7.3. PROBLEMAS DE MAXIMOS E M INIMOS

161

> with(student): > y := x^3 - 24*x + 40; y := x3 24x + 40 > maximize(y, x=-3..3, location); 40 + 32 2, { {x = 2 2}, 40 + 32 2 } > minimize(y, x=-3..3, location); 40 32 2, { {x = 2 2}, 40 32 2 } Exemplo 7.6 Calcular os mximos locais da funo seno no intervalo [10, 10] com a ca suas respectivas localizaes: co > with(student): maximize(sin(x), x=-10..10, location); 5 1 3 1, { {x = }, 1 , {x = }, 1 , {x = }, 1 } 2 2 2 Agora calculando os mnimos locais da funo cos(x) + ca
cos(2x) 2

no intervalo [6, 6]:

> minimize( cos(x) + cos(2*x)/2, x=-6..6, location); 3 4 3 2 3 4 3 2 3 , { {x = }, , {x = }, , {x = }, , {x = }, } 4 3 4 3 4 3 4 3 4 Observe agora que se no for fornecido o parmetro opcional location ao comando a a minimize, ento mostrado apenas o valor m a e nimo, sem a localizao do mesmo no ca domnio da funo. ca > minimize(cos(x) + cos(2*x)/2, x=-6..6); Exemplo 7.7 Seja f (x) = locais de f . 3 4

2x . Vamos determinar passo a passo mximos ou m a nimos 1 + x2

> f := x -> 2*x/(1 + x^2); x 1 + x2 Inicialmente determinamos os pontos crticos de f . Para isso, resolvemos a equao ca f (x) = 0. Denominamos a e b as razes encontradas e escolhemos a < b. f := x 2 > s := solve(D(f)(x) = 0); # poderia ser simplesmente solve(D(f)(x)) s := 1, 1 > a := s[1]; b := s[2];

162

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

a := 1 b := 1 Agora, calculamos f (a), f (a), f (b) e f (b). > f(a) = (D@@2)(f)(a), f(a) = f(a); f (a) = 1, f (a) = 1 > f(b) = (D@@2)(f)(b), f(b) = f(b); f (b) = 1, f (b) = 1 Como f (a) > 0 chegamos ` concluso de que a = 1 um ponto de m a a e nimo local. Como f (b) < 0, temos que b = 1 um mximo local. e a Para encerrar este exemplo, construmos grco de f (Figura 7.5) para visualizar os a extremos locais da funo. ca > plot(f(x), x = -4..4);
Figura 7.5:

0.5

2 x

0.5

7.4

Somas de Riemann

Consideremos uma funao f : [a, b] R e uma subdiviso do intervalo [a, b] em c a n partes [xi1 , xi ], i = 1, 2, , n tais que a = x0 < x1 < x2 < < xn = b. Sejam xi = xi xi1 o comprimento e ci um ponto qualquer do i-simo subintervalo. A e
n

soma f (c1 )x1 + f (c2 )x2 + f (cn )xn =


i=1

f (ci )xi chamada soma de Riemann. e

Quando f positiva em [a, b], n e os comprimentos xi 0, para todo i, ento a e a

7.4. SOMAS DE RIEMANN

163

soma de Riemann tende ` rea da regio delimitada pelo grco de y = f (x) e pelo eixo aa a a dos x Essa rea numericamente igual ` integral de f (x) no intervalo [a, b]. a e a O pacote student possui 6 funoes relacionadas com as somas de Riemann de uma c funo f (x) em o intervalo [a, b]: ca leftsum(f(x), x=a..b, n) Forma inercial da soma de Riemann com n subintervalos de comprimentos iguais e escolhe cada ci como sendo a extremidade esquerda de cada subintervalo. leftbox(f(x), x=a..b, n) Constri um grco relacionado com o leftsum. o a middlesum(f(x), x=a..b, n) Forma inercial da soma de Riemann com n subintervalos de comprimentos iguais e escolhe cada ci como sendo o ponto mdio de cada e subintervalo. middlebox(f(x), x=a..b, n) Constri um grco relacionado com o middlesum. o a rightsum(f(x), x=a..b, n) Forma inercial da soma de Riemann com n subintervalos de comprimentos iguais e escolhe cada ci como sendo a extremidade direita de cada subintervalo. rightbox(f(x), x=a..b, n) Constri um grco relacionado com o rightsum. o a Exemplo 7.8 Seja f : [1, 3] R denida por f (x) = 1/x. Inicialmente, constru mos o grco e calculamos o valor da soma de Riemann de f com 10 subintervalos, escolhendo a o ponto mdio em cada subintervalo. Observe que o resultado obtido prximo do valor e e o da rea cujo valor exato ln(3). a e > with(student): > middlebox(1/x, x=1..3, 10);
Figura 7.6:

0.8

0.6

0.4

0.2

1.2

1.4

1.6

1.8

2 x

2.2

2.4

2.6

2.8

164

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

> s := middlesum(1/x, x=1..3, 10);


9

s := > value(s);

1 1 5 i=0 11 1 + i 10 5 159708887504 145568097675

> evalf(s); 1.097142094 > ln(3) = ln(3.0); ln(3) = 1.098612289 Se aumentarmos a quantidade de subintervalos para 100, a soma obtida ca ainda mais prxima de ln(3). o > s2 := middlesum(1/x, x=1..3, 100): > evalf(s2); 1.098597475 > middlebox(1/x, x=1..3, 100);
Figura 7.7:

0.8

0.6

0.4

0.2

1.2

1.4

1.6

1.8

2 x

2.2

2.4

2.6

2.8

Quando n o limite da soma de Riemann com n subintervalos igual a ln(3), ou e seja, igual ` integral de 1/x no intervalo [1, 3] : e a

7.4. SOMAS DE RIEMANN

165

> Limit(middlesum(1/x, x=1..3, n), n=infinity);


n1

1 1+ n
2(i+1/2) n

lim 2 i=0

> S := value(%); S := ln(3) Exemplo 7.9 Ainda com relao ` funo f (x) = 1/x no intervalo [1, 3], denimos ca a ca e constru mos o grco de uma soma de Riemann dessa funo com 10 subintervalos, a ca escolhendo a extremidade direita de cada subintervalo. O grco o da Figura 7.8. a e > rightbox(1/x, x=1..3, 10);

Figura 7.8:

0.8

0.6

0.4

0.2

1.2

1.4

1.6

1.8

2 x

2.2

2.4

2.6

2.8

> rightsum(1/x, x=1..3, 10); 1 5 i=1 > evalf(%); 1.034895660


10

1 1+ i 5 1

166

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

7.5

Regras de Integrao ca

As regras de integraao costumam fazer parte dos cursos introdutrios de Clculo. E c o a comum encontrarmos problemas trabalhosos, com muitos clculos, envolvendo tais regras. a Nesta seo resolvemos passo a passo algumas integrais usando regras bsicas como inca a tegrao por substituio, integraao por partes e integrao de funoes racionais atravs ca ca c ca c e da separaao em fraoes parciais. c c 7.5.1 Integrao por substituio ca ca

O pacote student traz o comando changevar(f(x) = u, I, u) que faz a mudana de c recomendvel que a integral esteja na sua forma varivel x para u em uma integral I. E a a inercial, para no ser calculada de imediato. a Exemplo 7.10 Seja G = (3x2 2)ex 2x+1 dx. Vamos calcul-la usando a mudana de a c varivel u = x3 2x + 1. Neste caso, o clculo du = f (x)dx feito automaticamente. a a e > with(student): > G := Int((3*x^2 - 2)*exp(x^3 - 2*x + 1), x); G := (3x2 2)e(x
3 2x+1) 3

dx

> G1 := changevar(x^3 - 2*x + 1 = u, G, u); G1 := > G2 := value(G1) + C; G2 := eu + C A integral est calculada na varivel u e agora basta usar o comando subs para subsa a tituir u por x. > G = subs(u = x^3 - 2*x + 1, G2); (3x2 2)e(x
3 2x+1)

eu du

dx = e(x

3 2x+1)

+C

Fica calculada assim, passo a passo, a integral G dada. E claro que o C que foi acrescentado no nal dos clculos representa uma constante real qualquer. a Exemplo 7.11 Neste exemplo, calculamos x(x + 1)2002 dx. Essa integral interessante e porque o Maple no consegue calcul-la sozinho, sem ajuda do usurio. Ele tenta a a a desenvolver o binmio e, com isso, termina encontrando algum problema de falta de o memria. Mas, se algum recomend-lo fazer a substituio x + 1 = u, ele conclui o o e a ca clculo imediatamente. a > H := Int( x*(x + 1)^2002, x); H := x(x + 1)2002 dx

7.5. REGRAS DE INTEGRACAO

167

> H1 := changevar(x + 1 = u, H, u); H1 := > H2 := value(H1) + C; H2 := > H = subs(u = x + 1, H2); x(x + 1)2002 dx = onde C uma constante qualquer. e Exemplo 7.12 O sucesso da integrao por substituio depende da escolha correta da ca ca mudana de varivel. Uma boa mudana de varivel deve simplicar a integral. Neste c a c a cos(x) exemplo calculamos a integral dx. Inicialmente, fazemos uma mudana c 1 + sen (x) inadequada cos(x) = u para ver o que acontece. > J := Int(cos(x)/sqrt(1 + sin(x)), x); J := > changevar(cos(x) = u, J, u); 1+ du 1 u2 1 u2 u cos(x) 1 + sin(x) dx 1 1 (x + 1)2004 (x + 1)2003 + C 2004 2003 1 2004 1 2003 u u +C 2004 2003 (1 + u)u2002 du

Observando o resultado mostrado vemos que a integral obtida ca mais complicada do que a integral dada. Por isso, desistimos dessa mudana de varivel e tentamos usar c a outra: sen(x) = u. > changevar(sin(x) = u, J, u); 1 du 1+u

Agora, sim, a integral cou simplicada ao ponto de poder ser calculada diretamente (com um comando value). > value(%); 2 1+u Usamos o comando subs para voltar ` varivel x inicial: a a > J = subs(u = sin(x), %);

168

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

cos(x) 1 + sin(x)

dx = 2

1 + sin(x)

Agora, derivando ambos os membros da igualdade anterior para conferir se os clculos a foram feitos corretamente. > diff(%, x); cos(x) 1 + sin(x) = cos(x) 1 + sin(x) x2

Exemplo 7.13 Vamos calcular a integral da funo racional ca

x . Como o po+ 7x + 13 linmio do 2 grau que aparece no denominador no tem ra o a zes reais, iniciamos fazendo um completamento de quadrado do mesmo. Fazemos isso apelando para o comando completesquare do pacote student.

> with(student): > K := Int(x/(x^2 + 7*x + 13), x); x dx + 7x + 13 Substitumos o denominador pelo completamento de quadrado dele mesmo: K := x2 > subs(x^2 + 7*x + 13 = completesquare(x^2 + 7*x + 13), K); x (x +
7 2 ) 2

3 4

dx

Observando o quadrado completado no denominador camos sabendo qual a substi3 7 tuio de varivel a ser utilizada: x + = ca a t 2 4 > changevar(x + 7/2 = sqrt(3/4)*t, %, t); 7 1 ( 2 + 1 3t) 3 2 dt 3 2 2 t +3 4 4 Simplicamos e expandimos o ultimo resultado mostrado, at obtermos integrais que e sejam suciente simples para poderem ser calculadas diretamente. > simplify(%); 1 3 3 > expand(%); > value(%); 7 3 3 1 dt + t2 + 1 t dt t2 + 1 7 + 3t dt t2 + 1

7.5. REGRAS DE INTEGRACAO

169

7 1 3 arctan(t) + ln(t2 + 1) 3 2 4 3 x+ 7 2 para voltarmos ` varivel original. a a

Finalmente, substitumos t =

> subs(t = sqrt(4/3)*(x + 7/2), %); 7 2 7 1 4 7 3 arctan( 3(x + )) + ln( (x + )2 + 1) 3 3 2 2 3 2 7 1 1 4 28 52 3 arctan( 3(2x + 7) + ln( x2 + x + ) 3 3 2 3 3 3

> K = normal(%); K = 7.5.2

Integrao por partes ca

O pacote student possui o comando intparts(I, u)) que calcula a integral I por partes, considerando o segundo parmetro como sendo a funao u da frmula da intea c o grao por partes udv = uv vdu. ca O critrio da escolha da funao u deve ser o de que a integral obtida aps a aplicaao e c o c da frmula seja mais simples de calcular do que a integral original. Uma m escolha dessa o a funo leva a resultados desastrosos. ca Exemplo 7.14 Neste exemplo, o Maple mostra uma variao da frmula da integrao ca o ca por partes. > with(student): > Int(U(x)*Diff(V(x), x), x) = intparts(Int(U(x)*Diff(V(x), x), x), U(x)); U (x) V (x)dx = U (x)V (x) x U (x) V (x)dx x

Exemplo 7.15 Seja F = x3 ln xdx. Se quisermos usar integrao por partes, temos ca 3 pelo menos duas opes para a escolha da funo u: u = x ou u = ln x. Testamos co ca inicialmente u = ln x. > F := Int(x^3*ln(x), x); F := > intparts(F, ln(x)); 1 ln(x)x4 4 1 3 x dx 4 x3 ln(x)dx

A nova integral obtida mais simples do que a integral dada originalmente. Logo, u = ln x e foi uma boa escolha. Calculamos agora a integral diretamente: > value(%);

170

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

1 1 ln(x)x4 x4 4 16 Veja agora o que aconteceria se no clculo de F tivssemos escolhido u = x3 : a e > intparts(F, x^3); x3 (x ln(x) x) 3x2 (x ln(x) x)dx

Observe que a integral obtida mais complicada do que a original. e Exemplo 7.16 Agora vamos calcular x2 cos xdx. Podemos escolher u = x2 ou u = cos x. Inicialmente, vamos escolher u = cos x: > G := Int(x^2*cos(x), x); G := > intparts(G, cos(x)); 1 1 cos(x)x3 sin(x)x3 dx 3 3 Vemos que a integral complica. Logo, u = cos x uma m escolha. e a Agora, escolhamos u = x2 : > G0 := intparts(G, x^2); G0 := x2 sin(x) 2x sin(x)dx x2 cos(x)dx

A integral obtida mais simples do que a original, portanto foi feita uma boa escolha e da funo u. No entanto, ainda no uma integral to simples, deve ser usada integrao ca a e a ca por partes novamente para ela poder ser calculada. > G1 := op(1, G0); G2 := op(2, G0); G1 := x2 sin(x) G2 := > G2 := intparts(G2, 2*x); G2 := 2x cos(x) + 2 cos(x)dx 2x sin(x)dx

A integral assim obtida pode ser calculada diretamente: > G2 := value(G2); G2 := 2x cos(x) 2 sin(x) > G = G1 + G2; x2 cos(x)dx = x2 sin(x) + 2x cos(x) 2 sin(x)

7.5. REGRAS DE INTEGRACAO

171

7.5.3

Fraoes parciais c

Com a opo parfrac, o comando convert(R(x), parfrac, x) pode ser usado para ca escrever a funao racional R(x) como soma de fraoes parciais na varivel x, fornecida c c a como terceiro parmetro. a Exemplo 7.17 Vamos escrever as funes racionais co somas de fraes parciais. co > F1 := (x+3)/(x^3 + 8*x^2 + 7*x); F 1 := > convert(F1, parfrac, x); 31 2 1 1 1 7 x 21 x + 7 3 x + 1 > 1/(x^2 - 5*x + 6) = convert( 1/(x^2 - 5*x + 6), parfrac, x); x2 1 1 1 = + 5x + 6 x2 x3 x3 x+3 + 8x2 + 7x x3 x+3 1 e 2 como 2 + 7x + 8x x 5x + 6

Exemplo 7.18 Neste exemplo calculamos a integral P = 10x5 + 43x4 9x3 + 138x2 331x 189 dx (x2 + 9)(x2 + 3x 10)2

usando o mtodo da separao em fraes parciais. e ca co > P := Int((10*x^5 + 43*x^4 - 9*x^3 + 138*x^2 - 331*x - 189)/ > ((x^2 + 9)*(x^2 + 3*x - 10)^2), x); P := > with(student): > R := integrand(P); R := 10x5 + 43x4 9x3 + 138x2 331x 189 (x2 + 9)(x2 + 3x 10)2 10x5 + 43x4 9x3 + 138x2 331x 189 dx (x2 + 9)(x2 + 3x 10)2

> R := convert(R, parfrac, x); 5 1 3 2x 1 + + + + 2 2 2 (x + 5) x + 5 (x 2) x2 x +9 Concluda a separao em fraes parciais, calculamos as integrais de cada frao ca co ca assim obtida. R := > intR := Int(R, x); R := 5 1 3 2x 1 + + + + 2 dx 2 2 (x + 5) x + 5 (x 2) x2 x +9

172

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

> expand(intR); 1 dx + 5 (x + 5)2 > P = value(%); P = 1 1 + 5 ln(x + 5) + 3 ln(x 2) + ln(x2 + 9) x+5 x2 1 dx + x+5 1 dx + (x 2)2 1 dx + x2 3 dx + 2 x2 x dx x2 + 9

7.6

Clculo de reas a a

Uma das aplicaao da integral denida ao clculo da rea de regies do plano delic e a a o mitadas por grcos de funoes. A resoluo desse tipo de problema requer que sejam a c ca determinados os pontos de interseao dos grcos (um caso para usar um comando solve c a ou fsolve) e que sejam conhecidas as posies relativas das curvas envolvidas, ou seja, co qual a curva que aparece em cima e qual a que aparece na parte de baixo da regio. Isso a pode ser decidido facilmente observando-se os grcos constru a dos em um mesmo sistema de eixos coordenados (com um comando plot). Exemplo 7.19 Queremos calcular a rea delimitada pelos grcos de f (x) = x/2 + 1 e a a por g(x) = (2 + x)(1 x). > f := x/2 + 1; g := (2 + x)*(1 - x); f := 1/2x + 1 g := (2 + x)(1 x)
Figura 7.9:

1.5

0.5

1.5

1 x

0.5

0.5

Determinamos os pontos de interseo dos grcos: ca a

7.7. GEOMETRIA ANAL ITICA PLANA

173

> S := solve(f = g); S := > b := S[1]; a := S[2]; b := 1/2 a := 2 Temos assim que os grcos interceptam-se nos pontos a = 2 e b = 1/2 do dom a nio comum a essas funes. co Construmos os grcos de f e de g no intervalo [a, b]. O resultado mostrado na a e Figura 7.9. > plot([f, g], x=a..b, thickness=2); Na Figura 7.9, vemos que o grco da funo g aparece acima do da f . Logo a integral a ca a ser calculada a da diferena gf no intervalo [a, b], que corresponde ao valor numrico e c e A da rea desejada. a > A = int(g - f, x = a..b); A= 125 48 1 , 2 2

7.7

Geometria Anal tica Plana

O Maple possui um interessante pacote chamado geometry com mais de 100 comandos relacionados com itens de geometria euclidiana plana. > with(geometry); [ Apollonius, Appolonius, AreCollinear, AreConcurrent, AreConcyclic, AreConjugate, AreHarmonic, AreOrthogonal, AreParallel, ArePerpendicular, AreSimilar, AreTangent, CircleOfSimilitude, CrossProduct, CrossRatio, DenedAs, Equation, EulerCircle, EulerLine, ExteriorAngle, ExternalBisector, FindAngle, GergonnePoint, GlideReection, HorizontalCoord, HorizontalName, InteriorAngle, IsEquilateral, IsOnCircle, IsOnLine, IsRightTriangle, MajorAxis, MakeSquare, MinorAxis, NagelPoint, OnSegment, ParallelLine, PedalTriangle, PerpenBisector, PerpendicularLine, Polar, Pole, RadicalAxis, RadicalCenter, RegularPolygon, RegularStarPolygon, SensedMagnitude, SimsonLine, SpiralRotation, StretchReection, StretchRotation, TangentLine, VerticalCoord, VerticalName, altitude, apothem, area, asymptotes, bisector, center, centroid, circle, circumcircle, conic, convexhull, coordinates, detail, diagonal, diameter, dilatation, directrix, distance, draw, dsegment, ellipse, excircle, expansion, foci, focus, form, homology, homothety, hyperbola, incircle, inradius, intersection, inversion, line, medial, median, method, midpoint, orthocenter, parabola, perimeter, point, powerpc, projection, radius, randpoint, reciprocation, reection, rotation, segment, sides, similitude, slope, square, stretch, tangentpc, translation, triangle, vertex, vertices ]

174

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

7.7.1

Pontos e retas

No pacote geometry um ponto P = (a, b) denido na forma point(P, a, b). Depois e de usado um comando point, o ponto assim denido pode ser fornecido como parmetro a de outros comandos. Uma reta L pode ser denida de duas maneiras com um comando line:
Com sua equao e a lista de variveis: line(L, equao, [variveis]) ca a ca a Com dois de seus pontos A, B e as variveis: line(L, [A, B], [variveis]) a a

A lista de variveis opcional. Se ela no for denida logo, o programa perguntar por a e a a ela quando for preciso. Entre as muitas funoes do pacote geometry que exigem os objetos point ou line c como parmetros, vamos citar algumas: a coordinates(P) Coordenadas do ponto P Equation(L) Equao da reta L ca slope(L) Declividade da reta L detail(P) Informaoes detalhadas sobre o ponto P c detail(L) Informaoes detalhadas sobre a reta L c distance(P, Q) Distncia entre os pontos P e Q a distance(P, L) Distncia entre o ponto P e a reta L a PerpendicularLine(L2, P, L1) Dene a reta L2 que passa pelo ponto P e perpendie cular ` reta L1 a ParallelLine(L3, Q, L4) Dene a reta L3 que passa pelo ponto Q e paralela ` reta e a L4 draw(O) Desenha o objeto O draw([O1, O2, ...]) Desenha uma lista de objetos O1, O2, ... Exemplo 7.20 Vamos denir um ponto P = (5, 6) e mostrar suas coordenadas com um comando coordinates. > with(geometry): > point(P, 5, -6); P > coordinates(P); [5, 6] Agora, denimos a reta r1 que passa pelos pontos A = (1, 1) e B = (3, 2), calculamos sua equao e declividade. ca

7.7. GEOMETRIA ANAL ITICA PLANA

175

> line(r1, [point(A, 1, 1), point(B, -3, 2)], [x, y]); r1 > Equation(r1); 5 x 4y = 0 > slope(r1); # declividade de r1 1 4 Denimos a reta r2 que passa por P e perpendicular a r1, calculamos sua declividade e e equao. ca > PerpendicularLine(r2, P, r1); r2 > slope(r2); # declividade de r2 4 > Equation(r2); 26 4x + y = 0 Denimos a reta r3 que passa por P e paralela a r1 e calculamos sua equao. e ca > ParallelLine(r3, P, r1); r3 > Equation(r3); 19 x 4y = 0 Calculamos a distncia do ponto P ` reta r1. a a > distance(P, r1); 24 17 17 7.7.2 Circunferncias e

Uma circunferncia C pode ser denida usando-se o comando circle de uma das e quatro maneiras mostradas a seguir:
Com trs pontos P , Q e R e lista de variveis: circ(C, [P, Q, R], [variveis]) e a a Com dois de seus pontos P e Q diametralmente opostos e a lista de variveis: a circ(C, [P, Q], [variveis]) a Com sua equaao e a lista de variveis: circle(C, equao, [variveis]) c a ca a Com o centro O e o raio r: circ(C, [O, r], [variveis]) a

176

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

A lista de variveis opcional. Tem tambm um quarto parmetro opcional com o a e e a nome do centro da circunferncia que deve ser escrito na seguinte forma: e centername = NomeCentro. Citemos algumas das funoes do pacote geometry relacionadas com o comando circle: c center(C) Centro da circunferncia C e radius(C) Raio da circunferncia C e area(C) Area do c rculo C Equation(C) Equaao da circunferncia C c e detail(C) Informaes detalhadas sobre a circunferncia C co e Exemplo 7.21 Neste exemplo denida uma circunferncia C1 de centro O1 = (1, 7) e e e raio 4 sem a lista de variveis. O Maple pergunta pela lista na hora de mostrar sua a equao. ca > with(geometry): > circle(C1, [point(O1, -1, 7), 4]); C1 > Equation(C1); enter name of the horizontal axis> m; enter name of the vertical axis> n; m2 + 34 + n2 + 2m 14n = 0 Equivalentemente, essa mesma circunferncia poderia ter sido denida na forma: e > point(O1, -1, 7); > circle(C1, [O1, 4], [m, n]): Depois de denida, podemos obter alguns dados sobre C1. > radius(C1); 4 > center(C1); O1 > coordinates(center(C1)); [1, 7] > area(C1); 16

7.7. GEOMETRIA ANAL ITICA PLANA

177

Se a lista de variveis [var1, var2] de um determinado objeto grco no tiver sido a a a denida, ela pode ser denida com os seguintes comandos: EnvHorizontalName = var1 e EnvHorizontalName = var2. Exemplo 7.22 Neste exemplo denimos uma circunferncia C2 de raio 2 e centro e O2 = (3, 4/5) e usamos algumas funes relacionadas. co > _EnvHorizontalName := x: _EnvVerticalName := y: > circle(C2, [point(O2, 3, -4/5), sqrt(2)]): > eq := Equation(C2); eq := x2 + > area(C2); 2 > detail(C2); name of the object: C2 form of the object: circle2d name of the center: O2 coordinates of the center: [3, -4/5] radius of the circle: 2(1/2) equation of the circle: x2+191/25+y2-6*x+8/5*y = 0 Agora usamos o comando completesquare do pacote student para completar o quadrado da varivel x na equao da circunferncia: a ca e > with(student): completesquare(eq, x); 34 8 + y2 + y = 0 25 5 E agora completamos o quadrado da varivel y: a (x 3)2 > completesquare(%, y); 4 (y + )2 2 + (x 3)2 = 0 5 Somamos 2 aos dois membros da equao (equivale a passar o 2 para o segundo memca bro) > 2 + lhs(%) = 2 + rhs(%); 4 (y + )2 + (x 3)2 = 2 5 Obtivemos assim a equao da circunferncia C2 escrita em um formato usual. ca e Exemplo 7.23 Seja C3 a circunferncia cuja equao x2 +y 2 3x+7y 1 = 0. Calcule e ca e as coordenadas do seu centro e o seu raio. 191 8 + y 2 6x + y = 0 25 5

178

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

> with(geometry): > circle(C3, x^2 + y^2 - 3*x + 7*y - 1 = 0, [x, y]); C3 > coordinates(center(C3)); 3 7 , 2 2 > radius(C3); 1 31 2 2 > Equation(C3); x2 + y 2 3x + 7y 1 = 0 Exemplo 7.24 Determine a interseo da circunferncia C4 que passa pelos pontos ca e A(5, 4), B(6, 1) e C(3, 2) com a reta R1 que passa pelos pontos D(1, 2) e E(4, 1). > > > > with(geometry): circle(C4, [point(A,5,4), point(B,6,1), point(C,-3,-2)], [x,y]): line(R1, [point(D, 1, 2), point(E, -4, 1)], [x,y]): EqCirc := Equation(C4); EqCirc := x2 23 + y 2 2x 2y = 0 > EqReta := Equation(R1); EqReta := 9 + x 5y = 0 > solve({EqCirc, EqReta}); 38 73 ,x= } 13 13 Obtivemos ento uma interseo formada pelo conjunto de pontos a ca {y = 1, x = 4}, {y = (4, 1), ( 7.7.3 Cnicas o 73 38 , ) 13 13

No pacote geometry, cada cnica pode ser denida de vrias maneiras. o a Parbola Uma parbola P da qual sejam conhecidos cinco de seus pontos A, B, C, D, a a E, ou seu foco F ou seu vrtice V ou sua diretriz R ou sua equao pode ser denida e ca de um dos seguintes modos:
parabola(P, [A, B, C, D, E], [variveis]) a parabola(P, [focus = F, vertex = V], [variveis]) a parabola(P, [directrix = R, focus = F], [variveis]) a

7.7. GEOMETRIA ANAL ITICA PLANA

179

parabola(P, equao, [variveis]) ca a

Elipse Uma elipse EL da qual sejam conhecidos cinco de seus pontos A, B, C, D, E, ou seus focos F1, F2 ou sua diretriz R ou sua excentricidade e ou a soma s dos raios focais ou o comprimento do eixo maior EMaior ou o comprimento do eixo menor EMenor ou pontos P1, P2 extremos do eixo maior ou os pontos Q1, Q2 extremos do eixo menor pode ser denida de um dos seguintes modos:
ellipse(EL, [A, B, C, D, E], [variveis]) a ellipse(EL, [directrix=R, focus=F1, eccentricity=e], [variveis]) a ellipse(EL, [foci = [F1, F2], MajorAxis = EMaior], [variveis]) a ellipse(EL, [foci = [F1, F2], MinorAxis = EMenor], [variveis]) a ellipse(EL, [foci = [F1, F2], distance= s], [variveis]) a ellipse(EL, [MajorAxis=[P1, P2], MinorAxis=[Q1, Q2], [variveis]) a ellipse(EL, equao, [variveis]) ca a

Hiprbole Uma hiprbole H da qual sejam conhecidos cinco de seus pontos A, B, C, e e D, E, ou seus focos F1, F2 ou sua diretriz R ou sua excentricidade e ou a distncia a focal DistF ou a distncia entre os vrtices DistV ou os vrtices V1, V2 ou sua a e e equao pode ser denida de um dos seguintes modos: ca
hyperbola(H, [A, B, C, D, E], [variveis]) a hyperbola(H, [directrix=R, focus=F1, eccentricity=e], [variveis]) a hyperbola(H, [foci = [F1, F2], vertices = [V1, V2]], [variveis]) a hyperbola(H, [foci = [F1, F2], distancev = DistV], [variveis]) a hyperbola(H, [vertices = [V1, V2], distancef = DistF], [variveis]) a hyperbola(H, [equao], [variveis]) ca a

Uma cnica G da qual sejam conhecidos (1) cinco de seus pontos A, B, C, D, E ou o (2) sua diretriz R, foco F e excentricidade e ou (3) sua equao, pode ser denida com ca um dos seguintes comandos:
conic(G, [A, B, C, D, E], [variveis]) a conic(G, [R, F, e], [variveis]) a conic(G, [equao], [variveis]) ca a

O comando conic admite inclusive os casos degenerados de cnicas como par de retas, o ponto, etc. Na elipse devemos ter a excentricidade e < 1, na parbola e = 1, e na hiprbole e > 1. a e Depois de denida, podemos obter informaoes a respeito de uma cnica G com os c o seguintes comandos: form(G) Classicaao de G c Equation(G) Equao de G ca

180

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

detail(G) Informaoes detalhadas sobre G c focus(G) Foco de G (parbola) a foci(G) Focos de G vertex(G) Vrtice de G (parbola) e a vertices(G) Vrtices de G e center(G) Centro de G asymptotes(G) Ass ntotas de G (hiprbole) e directrix(G) Diretriz de G MajorAxis(G) Comprimento do eixo maior (elipse) MinorAxis(G) Comprimento do eixo menor (elipse) Exemplo 7.25 Neste exemplo, denimos a parbola y = x2 5x + 6 como sendo um a objeto geomtrico p1 do pacote geometry e obtemos as coordenadas do vrtice, as coore e denadas do foco e a equao da reta diretriz. ca > with(geometry): > parabola(p1, y = x^2 - 5*x + 6, [x,y]): > coordinates(vertex(p1)); 5 1 , 2 4 > coordinates(focus(p1)); 5 ,0 2 > Equation(directrix(p1)); y+ 1 =0 2

Exemplo 7.26 Consideremos a hiprbole h1 denida por xy = 1 e a elipse e2 dee x2 y2 nida por + = 1. Vamos obter todas as informaes bsicas sobre esses objetos co a 36 100 geomtricos. e > hyperbola(h1, x*y = 1, [x, y]); h1 > detail(h1);

7.7. GEOMETRIA ANAL ITICA PLANA

181

name of the object: h1 form of the object: hyperbola2d center: [0, 0] foci: [[-2(1/2), -2(1/2)], [2(1/2), 2(1/2)]] vertices: [[-1, -1], [1, 1]] the asymptotes: [y*2(1/2) = 0, -x*2(1/2) = 0] equation of the hyperbola: x*y-1 = 0 > ellipse(e2, x^2/36 + y^2/100 = 1, [x, y]); e2 > detail(e2); name of the object: e2 form of the object: ellipse2d center: [0, 0] foci: [[0, -8], [0, 8]] length of the major axis: 20 length of the minor axis: 12 equation of the ellipse: 1/36*x2+1/100*y2-1 = 0 Exemplo 7.27 Considere a parbola com vrtice V = (3, 4) e foco F = (2, 4). Detera e mine sua equao e sua diretriz. ca > with(geometry): > parabola(p2, [vertex = point(V,-3,4), focus = point(F,2,4)], [x,y]); p2 > EqPar := Equation(p2); EqP ar := 1100 + 25y 2 500x 200y = 0 > EqPar/25; 44 + y 2 20x 8y = 0 > Equation(directrix(p2)); x+8=0 Exemplo 7.28 Determine a equao da elipse e4 de focos F1 = (2, 3), F2 = (12, 3) ca e eixo maior de comprimento 16. > with(geometry): > point(F3, 2, -3), point(F4, 12, -3); F 3, F 4 > ellipse(e4, [foci=[F3, F4], MajorAxis=16], [x, y]);

182

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

e4 > Equation(e4); 624x2 8736x + 1024y 2 + 6144y 144 = 0 > foci(e4); [f oci 1 e4, f oci 2 e4] > map(coordinates, foci(e4)); [[2, 3], [12, 3]] > detail(e4); name of the object: e4 form of the object: ellipse2d center: [7, -3] foci: [[2, -3], [12, -3]] length of the major axis: 16 length of the minor axis: 2*39(1/2) equation of the ellipse: 624*x2-8736*x+1024*y2+6144*y-144 = 0 Exemplo 7.29 Determine a equao da elipse e5 de focos F1 = (4, 3), F2 = (4, 5) e ca soma dos raios focais igual a 12. > with(geometry): > point(F1, 4, 3), point(F2, 4, -5); F 1, F 2 > ellipse(e5, [foci=[F1, F2], distance=12], [x, y]); e5 > eq5 := Equation(e5); eq5 := 576x2 4608x + 320y 2 + 640y 1984 = 0 Podemos usar o comando completesquare(equao, varivel) do pacote student ca a para completar os quadrados e escrever a equao em um formato usual. ca > with(student): eq5 := completesquare(eq5, x); Warning, the names distance, midpoint and slope have been redened eq5 := 576(x 4)2 11200 + 320y 2 + 640y = 0 > eq5 := completesquare(eq5, y); eq5 := 320(y + 1)2 11520 + 576(x 4)2 = 0 > eq5 := lhs(eq5) + 11520 = rhs(eq5) + 11520;

7.7. GEOMETRIA ANAL ITICA PLANA

183

eq5 := 320(y + 1)2 + 576(x 4)2 = 11520 > eq5 := eq5/11520; eq5 := 1 1 (y + 1)2 + (x 4)2 = 1 36 20

Exemplo 7.30 Determine o centro, os focos, os vrtices, as ass e ntotas e construa o grco da hiprbole H de equao 9y 2 4x2 36y + 20x = 100. a e ca > with(geometry): > hyperbola(H, 9*y^2 - 4*x^2 - 36*y + 20*x = 100, [x,y]): > coordinates(center(H)); 5 [ , 2] 2 > map(coordinates, foci(H)); 5 5 1 1 [[ , 2 1443], [ , 2 + 1443]] 2 6 2 6 > map(coordinates, vertices(H)); 5 1 5 1 [[ , 2 111], [ , 2 + 111]] 2 3 2 3 > map(Equation, asymptotes(H)); 2 11 2 1 [y + x = 0, y x = 0] 3 3 3 3
Figura 7.10:

30

20

10

10

20

30 40 20 0 20 40

Finalmente, construmos o grco de H (Figura 7.10). a > draw(H);

184

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

Exemplo 7.31 Identique as cnicas denidas pelas equaes 9x2 + 16y 2 24xy 20x + o co 2 2 2 2 110y 50 = 0, 2x + 3y + 8x 6y 13 = 0, e x + 3y + 4xy + x 7y 20 = 0. > with(geometry): > conic(c1, 9*x^2 + 16*y^2 - 24*x*y - 20*x + 110*y - 50 = 0, [x,y]); c1 > form(c1); parabola2d
Figura 7.11:

1.5

2.5

3.5

4.5

Pode parecer estranho ` primeira vista que c1 seja uma parbola, mas veja seu grco a a a na Figura 7.11. > draw(c1); > detail(c1); name of the object: c1 form of the object: parabola2d vertex: [18/5, 1/5] focus: [16/5, -1/10] directrix: 4/5*x+3/5*y-7/2 = 0 equation of the parabola: 9*x2+16*y2-24*x*y-20*x+110*y- 50 = 0 > conic(c2, 2*x^2 + 3*y^2 + 8*x - 6*y - 13 = 0, [x, y]); c2

7.7. GEOMETRIA ANAL ITICA PLANA

185

> form(c2); ellipse2d > detail(c2); name of the object: c2 form of the object: ellipse2d center: [2, 1] foci: [[4, 1], [0, 1]] length of the major axis: 4*3(1/2) length of the minor axis: 4*2(1/2) equation of the ellipse: 2*x2+3*y2+8*x-6*y-13 = 0 > conic(c3, x^2 + 3*y^2 + 4*x*y + x - 7*y - 20 = 0, [x, y]); geometry/conic/classify: degenerate case: two intersecting lines [Line 1 c3, Line 2 c3] A terceira equao corresponde a um par de retas concorrentes, considerado um caso ca degenerado de cnica. o Exemplo 7.32 Uma cnica em posio geral pode ser denida se forem dados 5 de seus o ca pontos, desde que no existam 3 colineares entre eles. Determine a equao e identique a ca a cnica que passa pelos pontos P1 = (1, 1), P2 = (3, 4), P3 = (0, 2), P4 = (2, 2), e o P5 = (6, 7). > point(P1, 1, 1), point(P2, -3, 4), point(P3, 0, -2), point(P4, 2, -2), point(P5, 6, 7); P 1, P 2, P 3, P 4, P 5 > conic(c4, [P1, P2, P3, P4, P5], [x, y]); c4 > form(c4); hyperbola2d > eq := Equation(c4); eq := 20196 20088x 6858y + 2592xy + 12636x2 8478y 2 = 0 > eq := eq/igcd(20196, 20088, 6858, 2592, 12636, 8478); eq := 374 372x 127y + 48xy + 234x2 157y 2 = 0 Exemplo 7.33 Obtenha a equao da cnica de excentricidade 1 que tem uma diretriz ca o de equao x + 5 = 0 e um foco no ponto F = (1, 2). ca

186

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

> line(R, x + 5 = 0, [x, y]): point(F, -1, -2): > conic(c5, [R, F, 1], [x, y]) > form(c5); parabola2d > Equation(c5); 20 + y 2 8x + 4y = 0 Com essa mesma diretriz e mesmo foco, aumentando a excentricidade para 4/3, vamos ver como ca a equao da cnica. ca o > conic(c6, [R, F, 4/3], [x, y]): > form(c6); hyperbola2d > Equation(c6); 85 34 1 + y 2 x + 4y = 0 x2 3 3 3

7.8

Geometria Anal tica Tridimensional

O pacote geom3d dene vrios objetos e comandos relacionados com a geometria eua clidiana espacial. > with(geom3d); Warning, the name polar has been redened [Archimedean, AreCollinear, AreConcurrent, AreConjugate, AreCoplanar, AreDistinct, AreParallel, ArePerpendicular, AreSameObjects, AreSamePlane, AreSkewLines, DenedAs, DirectionRatios, Equation, FindAngle, FixedPoint, GlideReect, GlideReection, GreatDodecahedron, GreatIcosahedron, GreatRhombicuboctahedron, GreatRhombiicosidodecahedron, GreatStellatedDodecahedron, HarmonicConjugate, HexakisIcosahedron, HexakisOctahedron, InRadius, IsArchimedean, IsEquilateral, IsFacetted, IsOnObject, IsQuasi, IsRegular, IsRightTriangle, IsStellated, IsTangent, MidRadius, NormalVector, OnSegment, ParallelVector, PentagonalHexacontahedron, PentagonalIcositetrahedron, PentakisDodecahedron, QuasiRegularPolyhedron, RadicalCenter, RadicalLine, RadicalPlane, RegularPolyhedron, RhombicDodecahedron, RhombicTriacontahedron, RotatoryReect, RotatoryReection, ScrewDisplace, ScrewDisplacement, SmallRhombicuboctahedron, SmallRhombiicosidodecahedron, SmallStellatedDodecahedron, SnubCube, SnubDodecahedron, StereographicProjection, StretchRotate, TangentPlane, TetrakisHexahedron, TrapezoidalHexecontahedron, TrapezoidalIcositetrahedron, TriakisIcosahedron, TriakisOctahedron, TriakisTetrahedron, TruncatedCuboctahedron, TruncatedDodecahedron, TruncatedHexahedron, TruncatedIcosahedron, TruncatedIcosidodecahedron, TruncatedOctahedron,

7.8. GEOMETRIA ANAL ITICA TRIDIMENSIONAL

187

TruncatedTetrahedron, altitude, area, center, centroid, circle, coordinates, cube, cuboctahedron, detail, dilate, distance, dodecahedron, draw, dsegment, duality, faces, facet, form, gtetrahedron, hexahedron, homology, homothety, icosahedron, icosidodecahedron, identity, incident, intersection, inverse, inversion, line, midpoint, octahedron, parallel, parallelepiped, parallelpiped, plane, point, polar, pole, powerps, projection, radius, randpoint, reect, reection, rotate, rotation, schlai, segment, sides, sphere, stellate, tetrahedron, tname, transform, translate, translation, transprod, triangle, unit, valuesubs, vertices, volume, xcoord, xname, ycoord, yname, zcoord, zname] 7.8.1 Pontos, Retas e Planos

Um ponto no espao tridimensional denido de maneira semelhante ao que feito c e e no caso plano. Por exemplo, point(X, a, b, c) dene um ponto X = (a, b, c). Um plano P do qual sejam conhecidos (1) trs de seus pontos A, B, C ou (2) um de e seus pontos A e o vetor normal v ou (3) duas retas L1, L2 distintas (se as retas forem paralelas ou concorrentes, ento a equaao calculada a do plano que contm L1 e L2; se a c e e as retas forem reversas, ento calculada a equaao do plano que passa por L1 e paralelo a e c e a L2) ou (4) um ponto A pelo qual ele passa e duas retas L1, L2 distintas paralelas a ele ou (5) sua equao cartesiana, pode ser denido de um dos seguintes modos: ca
plane(P, [A, B, C], plane(P, [A, v], plane(P, [L1, L2], plane(P, equao, ca

[variveis]) a

[variveis]) a [variveis]) a [variveis]) a

plane(P, [A, L1, L2],

[variveis]) a

A lista de variveis fornecida como terceiro parmetro do comando plane opcional. a a e Uma reta L da qual sejam conhecidos (1) dois de seus pontos A, B ou (2) um de seus pontos A e o vetor diretor v ou (3) um de seus pontos A e um plano P ao qual ela e normal ou (4) dois planos P1, P2 concorrentes que passam por ela ou (5) suas equaes co paramtricas no parmetro t, pode ser denida com um dos seguintes comandos: e a
line(L, [A, B], t) line(L, [A, v], t) line(L, [A, P], t) line(L, [P1, P2], t) line(L, [equaes], t) co

O parmetro t fornecido como terceiro parmetro opcional. a a e Podemos obter informaoes a respeito de objetos j denidos ou denir novos objetos c a com os seguintes comandos: Equation(X) Equaao de X (plano ou reta) c

188

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

Equation(P, [x, y, z]) Equaao do plano P nas variveis x, y, z c a Equation(L, t) Equao da reta L no parmetro t ca a detail(X) Informaes detalhadas sobre X (plano ou reta) co NormalVector(P) Vetor normal ao plano P ParallelVector(L) Vetor paralelo ` reta L a AreCoplanar(A, B, C) Verica se os pontos A, B, C so coplanares a AreCollinear(A, B, C) Verica se os pontos A, B, C so colineares a AreCoplanar(L1, L2) Verica se as retas L1 e L2 so coplanares a AreConcurrent(L1, L2) Verica se as retas L1 e L2 so concorrentes a AreParallel(L1, L2) Verica se as retas L1 e L2 so paralelas a ArePerpendicular(L1, L2) Verica se as retas L1 e L2 so perpendiculares a AreSkewLines(L1, L2) Verica se as retas L1 e L2 so reversas a AreParallel(P1, P2) Verica se os planos P1 e P2 so paralelos a ArePerpendicular(P1, P2) Verica se os planos P1 e P2 so perpendiculares a AreDistinct(X, Y) Verica se os objetos X e Y (pontos, retas, planos ou esferas) so a distintos distance(X, Y) Distncia entre os objetos X e Y (pontos ou retas ou planos) a FindAngle(X, Y) Angulo entre os objetos X e Y (retas ou planos) intersection(A, X, Y) Dene o objeto geomtrico A como sendo a interseo entre os e ca objetos X e Y (retas ou planos) randpoint(P, x1..x2, y1..y2, z1..z2) Ponto P gerado aleatoriamente com coordenadas x, y, z nos intervalos [x1, x2], [y1, y2], [z1, z2], respectivamente randpoint(P, X) Ponto P escolhido aleatoriamente no objeto X (plano, reta ou esfera) IsOnObject(P, X) Testa se o ponto P pertence ao objeto X (plano, reta ou esfera) Exemplo 7.34 Vamos determinar um vetor normal ao plano P 1 denido pela equao ca x + 2y + 3z = 1. > with(geom3d): > plane(P1, x+2*y+3*z=1, [x,y,z]); P1 > NormalVector(P1);

7.8. GEOMETRIA ANAL ITICA TRIDIMENSIONAL

189

[1, 2, 3] Agora, vamos determinar a equao e um vetor normal ao plano P 2 que passa pelos ca pontos A = (0, 1, 1), B = (1, 1, 2) e C = (4, 3, 0). > point(A, 0, 1, 1), point(B, -1, 1, 2), point(C, 4, 3, 0): > plane(P2, [A, B, C], [x, y, z]); P2 > Equation(P2); 1 2x + 3y 2z = 0 > NormalVector(P2); [2, 3, 2] Calculemos o ngulo entre os planos P 1 e P 2: a > FindAngle(P1, P2); 1 14 17) 119 Peguemos aleatoriamente um ponto X no plano P 1 e um ponto Y em P 2 e calculemos a distncia entre esses pontos. a arccos( > randpoint(X, P1); X > randpoint(Y, P2); Y > evalf(distance(X, Y)); .7558255869 Finalmente, vamos testar se os pontos Z = (0, 7, 11) e W = (0, 7, 23/3) pertencem ao plano P 1: > IsOnObject(point(Z, 0, 7, -11), P1); f alse > IsOnObject(point(W, 0, 7, -13/3), P1); true Exemplo 7.35 Neste exemplo denimos os planos : 2x + ry + sz + 5 = 0 e : 2x + ry + sz 7 = 0, calculamos a distncia de um ponto p = (a, b, c) ao plano , a vericamos se os planos so paralelos e calculamos a distncia entre eles. a a > with(geom3d): > plane(alpha, 2*x + r*y + s*z + 5 = 0, [x, y, z]);

190

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

> distance(point(p, a, b, c), alpha); |2a + rb + sc + 5| 4 + r2 + s2 > plane(beta, 2*x + r*y + s*z - 7 = 0, [x, y, z]); > AreParallel(alpha, beta); # s~o paralelos? a true > distance(alpha, beta); 12 1 4 + r2 + s2

Exemplo 7.36 Determine a equao e um vetor paralelo ` reta R1 que passa pelos pontos ca a P = (0, 3, 8) e Q = (4, 0, 1). > with(geom3d): > point(P, 0, 3, -8): point(Q, -4, 0, 1): > line(R1, [P, Q], t); R1 > Equation(R1); [4t, 3 3t, 8 + 9t] > ParallelVector(R1); [4, 3, 9] Exemplo 7.37 Obter a equao da reta R2 que passa por um ponto A dado e perpenca e dicular a um plano . > > > > with(geom3d): point(A, 1, 2, 3), plane(pi, 2*x - 5*y + 3*z = 9, [x,y,z]): line(R2, [A, pi]): Equation(R2, t); [1 + 2t, 2 5t, 3 + 3t] Exemplo 7.38 Obter as equaes paramtricas da reta L denida pela interseo de dois co e ca planos P 1 : x + y = 4 e P 2 : 4y + 3z = 1. > > > > with(geom3d): plane(P1, x + y = 4, [x, y, z]), plane(P2, -4*y + 3*z = 1, [x, y,z]): line(L, [P1, P2]): Equation(L, s); # equaao de L com par^metro s c~ a

7.8. GEOMETRIA ANAL ITICA TRIDIMENSIONAL

191

17 1 + 3s, 3s, 4s 4 4 Exemplo 7.39 Seja R3 a reta que passa pelo ponto P 2 = (1, 4, 1/2) com vetor diretor v2 = (4, 3, 6). Determine as equaes paramtricas de R3 e sua interseo com o plano co e ca 2x y + 4z = 5. > with(geom3d): > point(P2, -1, 4, 1/2); P2 > v2 := vector([4, -3, 6]); v2 := [4, 3, 6] > line(R3, [P2, v2], s); R3 > EqReta := Equation(R3); EqReta := [1 + 4s, 4 3s, > EqPlano := 2*x - y + 4*z = 5; EqP lano := 2x y + 4z = 5 Para determinar a interseo, basta resolver o sistema formado pelas equaes da reta ca co e do plano dado: > solve({x = EqReta[1], y = EqReta[2], z = EqReta[3], EqPlano}); 9 113 143 1 ,y= ,z= ,x= } 35 35 70 35 1 113 143 Logo, a interseo de R2 com P 2 o ponto ca e , , . 35 35 70 Uma outra soluo usar o comando intersection. Para isso, precisamos denir o ca e plano dado como um objeto geomtrico do pacote geom3d: e {s = > plane(P, 2*x-y+4*z=5, [x,y,z]): > intersection(Q, R3, P); > coordinates(Q); 1 113 143 , , 35 35 70 Os parmetros do comando intersection devem ser objetos geomtricos e no equaes. a e a co Por isso, obtm-se uma mensagem de erro do Maple ao ser digitado algo como e > intersection(Q, R3, EqPlano); # erro 1 + 6s] 2

192

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

Exemplo 7.40 Sejam L1 e L2 as retas parametrizadas por [2t 4, t + 4, 2t 1] e [4t 5, 3t + 5, 5t + 5], respectivamente. Calcule a distncia entre essas retas e verique a se elas so paralelas ou reversas. a > with(geom3d): > line(L1, [ 2*t - 4, -t+4, -2*t-1], t); L1 > line(L2, [4*t - 5, -3*t + 5, -5*t + 5], t); L2 > distance(L1, L2); 3 > AreParallel(L1, L2); # s~o retas paralelas? a f alse > AreSkewLines(L1,L2); # s~o retas reversas? a true Conclumos ento que as retas dadas so reversas e que a distncia entre elas 3. a a a e Exemplo 7.41 Sejam P = (4, 1, 6) um ponto no espao tridimensional e R4 a reta que c passa pelos pontos A = (8, 3, 2) e B = (2, 3, 5). Verique se P pertence a R4 e calcule a distncia entre eles. a > > > > with(geom3d): point(P, 4, 1, 6), point(A, 8, 3, 2), point(B, 2, -3, 5): line(R4, [A, B]): IsOnObject(P, R4); f alse > distance(P, R4); 2 17 3 7.8.2 Esferas

Uma esfera E da qual sejam conhecidos (1) quatro de seus pontos A, B, C, D ou (2) dois de seus pontos A, B diametralmente opostos ou (3) o centro C e o raio R ou (4) o centro C e um plano tangente P ou (5) sua equao, pode ser denida com um comando ca sphere de uma das seguintes maneiras:
sphere(E, [A, B, C, D], [variveis]) a sphere(E, [A, B], [variveis]) a

7.8. GEOMETRIA ANAL ITICA TRIDIMENSIONAL

193

sphere(E, [C, R], [variveis]) a sphere(E, [C, P], [variveis]) a sphere(E, [equao], [variveis]) ca a

O comando sphere admite ainda um quarto parmetro opcional com o nome do centro a que deve ser escrito na forma centername = centro. Podemos obter informaes a respeito de uma esfera E j denida com os seguintes co a comandos: Equation(E) Equao de E ca center(E) Centro de E radius(E) Raio de E area(E) Area de E volume(E) Volume de E detail(E) Informaoes detalhadas sobre E c Exemplo 7.42 Denimos uma esfera de centro O = (3, 2, 1) e raio 3 e vericamos os detalhes do objeto geomtrico assim constru e do. > with(geom3d): > sphere(E, [point(O, 3, 2, 1), 3], [x, y, z]): > detail(E); name of the object: E form of the object: sphere3d name of the center: O coordinates of the center: [3, 2, 1] radius of the sphere: 3 surface area of the sphere: 36*Pi volume of the sphere: 36*Pi equation of the sphere: x2+y2+z2+5-6*x-4*y-2*z = 0 Exemplo 7.43 Calcule a equao, o centro e o raio da esfera que passa pelos pontos ca A = (1, 1, 1), B = (2, 2, 2), C = (3, 2, 1) e D = (0, 0, 3). > point(A, 1, 1, 1), point(B, 2, 2, 2), > point(C, -3, 2, 1), point(D, 0, 0, -3)]: > sphere(E2, [A, B, C, D], [x, y, z]): > Equation(E2); 67 3 x2 + y 2 + z 2 + 6 x y + 5z = 0 5 5 > coordinates(center(E2));

194

CAP ITULO 7. PROBLEMAS DE CALCULO E DE GEOMETRIA ANAL ITICA

[ > radius(E2);

3 67 5 , , ] 10 10 2

1 4523 10 Agora, vamos gerar aleatoriamente um ponto P com coordenadas no intervalo [1, 5] e vericar se P pertence ` esfera E2. a > randpoint(P, 1..5, 1..5, 1..5): > evalf(coordinates(P)); [3.967867632, 1.444277308, 2.453229479] > IsOnObject(P, E2); f alse Finalmente, vamos escolher aleatoriamente um ponto Q da esfera. > randpoint(Q, E2): > evalf(coordinates(Q)); [2.494929023, 8.110524397, 8.452209059] > IsOnObject(Q, E2); true Exemplo 7.44 Determinar a equao da esfera E3 com centro C = (3, 4, 11) e tanca gente ao plano : 3x y + 4z = 8. > > > > > with(geom3d): point(C, 3, 4, -11): plane(pi, 3*x - y + 4*z = 8, [x, y, z]): sphere(E3, [C, pi], [x, y, z], centername = C): Equation(E3); x2 + y 2 + z 2 + > coordinates(C); [3, 4, 11] > radius(E3); 47 26 26 > distance(C, pi); 47 26 26 1587 6x 8y + 22z = 0 26

Cap tulo 8

Noes de programao com o Maple co ca


O Maple pode ser utilizado tambm como linguagem de programaao para clculos e c a algbricos. Apesar de possuir poucos comandos para serem utilizados com esse m, a e combinao deles pode gerar praticamente uma innidade de novos comandos, limitados ca apenas pela criatividade e habilidade do programador. Um usurio que j tenha tido experincia anterior com outras linguagens de proa a e gramao como C, Pascal, FORTRAN ou BASIC, achar tudo muito familiar e certaca a mente no ter diculdade em dominar esses novos conceitos. a a Um dos manuais originais do Maple, o Programming Guide [5], elaborado pela Waterloo Maple, possui mais de 600 pginas. Assim, pode-se perceber que h muito o que a a se estudar sobre esse assunto. Neste cap tulo usaremos vrias vezes o comando print(v1, v2, ...) cuja funao a c mostrar os valores das variveis v1, v2, .... No modo interativo da execuao, esse e a c comando no necessrio, uma vez que ele equivale a digitar simplesmente: a e a > v1; v2; ...

8.1

A declarao condicional ca

Ao tentar codicar determinado algoritmo em comandos de uma linguagem de programao, muitas vezes camos na situao de precisar denir que determinado grupo ca ca de comandos vai ser executado sob determinadas condioes, ou ento escolher um entre c a vrios grupos de comandos para ser executado. a Para isso, o Maple possui a declaraao condicional if cuja forma de usar mais simples c : e if condio then comando end if; ca onde condio uma expresso lgica que deve ser avaliada em verdadeira ou falsa (true ca e a o ou false) e o comando (ou grupo de comandos) escrito depois da palavra then e antes de end if ser executado somente se a condio for verdadeira. a ca Exemplo 8.1 Consideremos a seguinte linha de comando: > if x < 100 then print(x menor do que 100) end if; e
195

196

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

Neste caso, o comando print(x menor do que 100) ser executado somente se e a tivermos x < 100. O x precisa ter sido denido antes desse comando, seno o Maple a mostra uma mensagem de erro como a mostrada a seguir: Error, cannot evaluate boolean: x < 100 E comum escrever um if ocupando mais de uma linha, escrevendo algumas linhas mais avanadas para a direita. Por exemplo, usual escrever o if anterior na forma: c e > if x < 0 then > print(x menor do que 100) e > end if; Exemplo 8.2 A expresso lgica do if pode ser composta de vrias condies ligadas a o a co pelos operadores lgicos and, or ou not. Consideremos o seguinte if distribu por o do vrias linhas: a > if type(x, numeric) and x > 0 then > y := sqrt(x); > z := ln(x); > w := x^x; > end if; Neste caso, a expresso lgica a ser avaliada type(x, numeric) and x > 0 que a o e e verdadeira somente se x for do tipo numrico e for positivo. Se a expresso for falsa, as e a atribuies de valores a y, z e w sero ignoradas. co a Observe que mais fcil entender um comando desses escrito em vrias linhas do que e a a se ele ocupasse uma unica linha. Exemplo 8.3 Neste exemplo, denimos os valores de inteiros m e n e denimos um bloco de comandos que ser executado somente se m < n. a > > > > > > > m := 4: n := 10: if (m < n) then temp := m; m := n; n := temp; end if: m = m, n = n; m = 10, n = 4 Os comandos depois do then tm por objetivo trocar os valores das variveis m e n. e a O que determina se os comandos dentro do if vo ser mostrados na sua execuo a ca ou no a utilizao de um ponto e vrgula ou dois pontos depois do end if. a e ca Uma forma mais completa da declarao condicional if ca e if condio then comando1 else comando2 end if; ca Neste caso, se a condio for verdadeira ser executado o comando1; seno, ser executado ca a a a o comando2. No lugar de comando1 ou comando2 podemos ter vrios comandos. a

8.1. A DECLARACAO CONDICIONAL

197

Exemplo 8.4 No if mostrado a seguir, temos y = x se x 0 e y = x se x < 0. > x := -5: > if x >= 0 then y := x else y := -x end if; y := 5 No importa que seja colocado sinal de : ou ; antes do else ou antes do end if, de a modo que o if anterior equivalente a e > if x >= 0 then y := x; else y := -x; end if; e tambm equivalente a e e > if x >= 0 then y := x: else y := -x: end if; Exemplo 8.5 Podemos ter if dentro de outro if, conforme mostrado a seguir. Neste exemplo, o M escolhido como sendo o maior entre os valores de a, b e c. Para isso, e inicialmente feita uma comparao entre a e b. Se a for o maior, ento b no tem e ca a a chance de ser o maior dos trs e, por isso, resta comparar a com c para saber qual o e e maior. Se a no for maior do que b, ento a deve ser descartado do clculo do maior a a a dos trs, restando apenas comparar b com c. e > > > > > > > > > > > > > > > > > a := -4: if a > b if a > M := else M := end if else if c > M := else M := end if end if: M = M; M =3 A forma mais completa do if a mostrada a seguir, onde pode aparecer uma condio1 e ca e uma ou vrias outras condioes condio2, condio3, . . . , condioN. a c ca ca ca if elif elif ... else end if; condio1 ca condio2 ca condio3 ca comandoN then then then comando1 comando2 comando3 b := 1: then c then a c b then c b c := 3:

198

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

Se condio1 for verdadeira, ento executado o comando1 e o if encerra. Seno, ca a e a e vericada a condio2 e, se ela for verdadeira, executado o comando2 e o if encerra. ca e E assim todas as condioes vo sendo testadas at chegar em uma condiao verdadeira. c a e c Se todas as condies testadas forem falsas ento ser executado o comando que estiver co a a depois do else, se esse comando tiver sido denido. Exemplo 8.6 O if a seguir testa se um inteiro n dado divis por 2, 3, 5 ou 7. Se e vel for, mostrada uma mensagem especca e o quociente Q da diviso. A funo frac(x) e a ca calcula a parte fracionria de x. a > > > > > > > > n := 35: # inteiro dado por 2); Q por 3); Q por 5); Q por 7); Q 3, nem por := n/2; := n/3; := n/5; := n/7; 5 e nem por 7)

if frac(n/2) = 0 then print( divisvel E divisvel elif frac(n/3) = 0 then print(E elif frac(n/5) = 0 then print( divisvel E divisvel elif frac(n/7) = 0 then print(E else print(N~o divisvel por 2, nem por a e end if; E divisvel por 5 Q := 7

Note que a estrutura condicional acima detecta apenas que n divis por 5. O fato e vel dele tambm ser divisvel por 7 foi ignorado. e

8.2

Estruturas de repetio ca

A repetiao na execuo de comandos essencial para quase toda computaao. O c ca e c Maple possui os comandos for e while que so bastante ecientes para a repetiao de a c determinadas aoes. c A forma simplicada e a mais utilizada do comando for e for varivel from valor1 to valor2 do comando end do a e funciona da seguinte maneira: o comando (ou grupo de comandos) escrito depois do do e antes do end do executado para cada valor que a varivel assumir no intervalo e a [valor1 , valor2 ]. A varivel inicia com valor1, vai sendo aumentada sucessivamente de a 1 em 1 e, enquanto seu valor for menor ou igual a valor2, o comando (ou grupo de comandos) vai sendo executado. Assim que a varivel assumir um valor maior do que a valor2, o for encerra. Exemplo 8.7 O for a seguir mostra i, com i assumindo todos os valores inteiros de 2 a 9. > for i from 2 to 9 do print(sqrt(i)) end do;

8.2. ESTRUTURAS DE REPETICAO

199

2 3

2 5 6 7 2 2 3 Exemplo 8.8 Dadas duas listas L1 e L2 de mesmo tamanho, substituir L1[i], o i-simo e elemento de L1, por (L1[i] + L2[i])/2, a mdia aritmtica entre o i-simo elemento de L1 e e e e o i-simo elemento de L2. Depois do clculo de cada mdia, atribuir o valor 0 a cada e a e elemento de L2. > > > > > > > > > > > > L1 := [5, 7, 1, 1, -3, 4, 10]: L2 := [1, 2, 0, 8, 1, 2, 6]: for n from 1 to nops(L1) do x := L1[n]: y := L2[n]: z := (x + y)/2: L1[n] := z: L2[n] := 0: end do: L1, L2; 9 1 9 [3, , , , 1, 3, 8], [0, 0, 0, 0, 0, 0, 0] 2 2 2 O for admite que seja denido um incremento para a varivel: a for varivel from valor1 to valor2 by incremento do comando end do; a O valor do incremento fornecido usado para ir alterando o valor da varivel, at que e a e ela ultrapasse valor2. A seqncia de valores da varivel crescente se o incremento for ue a e positivo e decrescente se ele for negativo. e Exemplo 8.9 Calcular o valor de [n, ln(n), sen ( n)] para n iniciando em 1 e aumen4 tando de 3 em 3 enquanto for menor ou igual a 12. > for n from 1 to 12 by 3 do [n, ln(n), sin(Pi/4*n)] end do;

200

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

1 2] 2 [4, ln(4), 0] 1 [7, ln(7), 2] 2 [10, ln(10), 1] [1, 0, Observe que a ultima lista mostrada corresponde a n = 10. Dessa forma, o valor n = 12 no atingido. a e Exemplo 8.10 Se o valor do incremento for negativo, ento a seqncia dos valores a ue assumidos pela varivel decrescente. Neste exemplo, k inicia com valor 10 e vai decresa e cendo de 4 em 4 enquanto seu valor no for menor do que 1. Para cada valor de k assim a obtido, calculada k. e > for k from 10 to 1 by -4 do evalf(sqrt(k)) end do; 3.162277660 2.449489743 1.414213562 Os valores mostrados correspondem a k = 10, k = 6 e k = 2. 1 . Para isso, iniciamos com o valor n2 n=1 0 para uma varivel soma e, para cada valor de n de 1 a 10, calculamos 1.0/n2 e a adicionamos o resultado a soma. Exemplo 8.11 Vamos calcular o somatrio o > soma := 0: > for n from 1 to 10 do > soma := soma + 1.0/n^2: > end do; soma := 1.0 soma := 1.250000000 soma := 1.361111111 soma := 1.423611111 soma := 1.463611111 soma := 1.491388889 soma := 1.511797052 soma := 1.527422052 soma := 1.539767731 soma := 1.549767731 Devido ao ; depois do end do os resultados parciais 1.0, 1.0+1.0/4, 1.0+1.0/4+1.0/9, 1.0 + 1.0/4 + 1.0/9 + 1.0/16, . . . so mostrados. A ultima soma mostrada, 1, 549767731, a corresponde ao valor procurado.
10

8.2. ESTRUTURAS DE REPETICAO

201

Podemos ter um comando for dentro de outro for. Isso se faz necessrio quando a usamos vrios a ndices i, j, . . . para ter acesso aos elementos de vrios conjuntos. a Exemplo 8.12 Calcular o produto cartesiano dos conjuntos A = {a, b, c} e B = {1, 2, 3}. Neste caso, precisamos de dois for encaixados, um para pegar cada elemento A[i] do conjunto A e outro para pegar cada elemento B[j] do conjunto B. Seja P = A B. Inicialmente, antes de percorrer os conjuntos A e B, o P no tem elemento, a ` isto , P = { } (conjunto vazio). A medida que os pares de elementos [A[i], B[j]] forem e sendo formados, vamos anexando-os ao conjunto P , ou seja, substituindo P pela unio a P {[A[i], B[j]]}. > > > > > > > > > > > A := {a, b, c}: B := {1, 2, 3}: P := {}: # conjunto vazio for i from 1 to nops(A) do for j from 1 to nops(B) do elemento := [A[i], B[j]]; P := P union {elemento} end do end do; P; {[a, 1], [a, 2], [a, 3], [b, 1], [b, 2], [b, 3], [c, 1], [c, 2], [c, 3]} Exemplo 8.13 Dada uma matriz M , queremos calcular a soma e o produto de todos os seus elementos. Como os elementos de uma matriz possuem dois ndices, precisamos de dois for encaixados para percorrer toda a matriz. Inicialmente, atribu mos o valor ` inicial da soma S dos elementos da matriz como sendo 0 e o produto P como sendo 1. A medida que matriz for sendo percorrida, adicionamos cada elemento M [i, j] a S e tambm e multiplicamos P por M [i, j]. Por exemplo, como S vale 0 inicialmente, quando pegarmos o primeiro elemento da matriz, o M11 = M [1, 1] e somarmos a S, S passar a valer 0 + M11 = M11 . Como a P vale inicialmente 1, quando esse valor for multiplicado por M11 , P passar a valer a 1 M11 = M11 . Quando pegarmos o segundo elemento M12 = M [1, 2] e somarmos a S passar a valer M11 + M12 e quando multiplicarmos esse segundo elemento por P, P a passar a valer M11 M12 . No nal, S valer a soma de todos os elementos da matriz e a a P valer o produto deles. a Optamos por gerar a matriz M aleatoriamente e com ordem 4 7. > S := 0: P := 1: > with(LinearAlgebra): M := RandomMatrix(4, 7); 89 52 72 55 54 11 53 70 37 22 12 88 35 61 M := 44 58 34 98 90 61 70 48 45 69 56 66 96 22

202

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

> for i from 1 to 4 do > for j from 1 to 7 do > S := S + M[i, j]; > P := P*M[i, j]; > end do: > end do: > S; # mostra a soma dos elementos de M 200 > P; # mostra o produto dos elementos de M 281786289757108779456206641837226304995328000000 Alm do for-from visto anteriormente, uma outra forma do for o for-in: e e for varivel in lista do comando end do; a Nessa forma, a varivel percorre toda a lista e, para cada valor assumido, executado o a e comando (ou grupo de comandos). No lugar de lista podemos ter tambm um conjunto e ou uma seqncia. ue Exemplo 8.14 Percorrer com uma varivel n uma lista de inteiros, e, para cada valor a 2 que n assuma, calcular n . > lista := [-3, 0, 1, 7, 11, 97]: > for n in lista do print(n^2) end do; 9 0 1 49 121 9409 Outra forma de criar uma estrutura de repetio usando um comando ca e while condio do comando end do; ca que funciona da seguinte maneira: a condio avaliada e se ela for verdadeira o comando ca e (ou grupo de comandos) escrito aps o do e antes do end do executado. Se ela for falsa, o e o comando ser ignorado. Sempre que o comando for executado, a condiao ser avaliada a c a e, enquanto ela for verdadeira, o comando ser executado novamente. O lao avalia a c condio, executa comando, avalia condiao, . . . se repetir at que a condio seja falsa. ca c a e ca O comando deve ter instrues que possam em algum momento tornar a condio co ca falsa, seno o lao while se repetir indenidamente. a c a A vantagem em usar o while que no nos preocupamos em saber quantas vezes o e a comando ser repetido. No for diferente: devemos especicar a priori o valor inicial e a e o valor nal de determinadas variveis e isso equivale a saber quantas vezes o comando a ser repetido. a

8.2. ESTRUTURAS DE REPETICAO

203

Exemplo 8.15 Neste exemplo vamos calcular mais um somatrio. Mas, desta vez ser o a diferente: no vamos especicar quantos termos devemos somar. Vamos fornecer a a condio que deve ser observada para continuar somando termos. Dados uma funo ca ca ln(n + 1) f (n) = (termo geral do somatrio) e um valor real = 108 , queremos somar o n3 + 1 todos os termos f (n), n = 1, 2, 3, cujo mdulos sejam maiores do que . Como no o a sabemos quantos termos devemos somar, temos um caso t pico de uso do while. Como no clculo de todo somatrio, iniciamos atribuindo um valor 0 a uma varivel auxiliar a o a Soma. > f := n -> ln(n + 1.0)/(n^3 + 1); f := n > > > > > > > ln(n + 1.0) n3 + 1

Soma := 0: # valor inicial da Soma n := 1: # valor inicial de n while abs(f(n)) > 10^(-8) do Soma := Soma + f(n); n := n + 1; end do: n, Soma; # mostra os valores finais de n e de Soma 879, .5951569400

O valor 0, 5951569400 mostrado corresponde ` soma procurada. a Agora, quantos termos foram somados? 879 termos? No. O n = 879 cujo valor foi a mostrado no nal corresponde ao primeiro termo da srie que no satisfaz a condio do e a ca while, ou seja, o f(879) foi o primeiro termo deixado fora do clculo da soma. Portanto, a foram somados 878 termos. Tanto o for quanto o while so casos particulares de um tipo de lao mais geral cuja a c sintaxe : e for varivel from valor1 to valor2 by incremento a while condio do comando ca end do; Pode-se deixar de escrever vrias partes desse comando. O unico trecho que no a a pode ser omitido o do e o end do. Se os trechos from valor1, to valor2, by incree mento e while condio forem omitidos, sero assumidos from 1, to infinity, by 1 e ca a while true nos lugares deles, respectivamente. Alm disso, a ordem em que esses trechos aparecem no for pode ser alterada ` vone a tade. Por exemplo, usar um for i from 1 to 10 by 2 ... o mesmo que usar e for i from 1 by 2 to 10 .... Exemplo 8.16 Calcular a soma 17 + 22 + 27 + de todos os inteiros da forma 17 + 5n, n 0, que so menores do que 1000. a

204

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

> > > > >

total := 0: # valor inicial da soma for i from 17 by 5 while i < 1000 do total := total + i; end do: total; # mostra a soma total obtida 378902

Exemplo 8.17 Listar todos os n inteiros primos que satisfaam 17 n < 2000. c > for i from 17 by 2 > while i < 2000 do > if isprime(i) then print(i) end if > end do; 17 19 23 ... 1999 Exemplo 8.18 Determinar o menor primo maior do que 109 (1 bilho). a > for j from 10^9 while not isprime(j) do end do; > j; 1000000007 A idia iniciar com j = 109 e, enquanto j no for primo, ir aumentando seu valor de e e a 1 em 1. Toda estrutura de repetio admite vrias maneiras equivalentes de ser codicada. ca a Neste caso, se quisssemos usar s a verso simplicada do while ter e o a amos a seguinte codicao: ca > j := 10^9: > while not isprime(j) do j := j + 1 end do: De modo semelhante, para determinar o maior primo menor do que 1 bilho basta a usar o seguinte for-while: > for k from 10^9 by -1 while not isprime(k) do end do; > k; 999999937 Exemplo 8.19 O uso da forma completa do for pode simplicar a codicao de deca terminados trechos. Veja como ca um pouco mais simples o somatrio calculado no o Exemplo 8.15.

8.2. ESTRUTURAS DE REPETICAO

205

> > > > >

f := n -> ln(n + 1.0)/(n^3 + 1): # defini~o de f(n) ca Soma := 0; # valor inicial da Soma for n from 1 while abs(f(n)) > 10^(-8) do Soma := Soma + f(n); end do:

O Maple possui os comandos break e next para serem usados em estruturas de repetio, sejam elas do tipo for ou while. ca O break faz com que a repetio encerre (prematuramente). Quando um break ca e executado, o prximo comando ser o que estiver depois do end do. o a O next faz iniciar uma nova iteraao, sem necessariamente sair da estrutura de rec petio. Quando um next executado, ele pega o prximo valor da varivel e retorna ` ca e o a a execuo do in do lao. ca cio c Exemplo 8.20 Neste exemplo a varivel n aumentada de 1 em 1 a partir de 1000. a e Estava programado inicialmente para o n chegar at 2000, mas um break encontrado e pelo caminho faz com que o lao for seja encerrado bem antes disso. O break c e encontrado na hora em que a parte fracionria de n/17 for 0, ou seja, quando n for um a mltiplo de 17. u > for n from 1000 to 2000 do > if frac(n/17) = 0 then break end if; > print(n); > end do; 1000 1001 1002 Os valores mostrados levam-nos a concluir que 1003 o menor mltiplo de 17 maior do e u que 1000. Exemplo 8.21 O lao for deste exemplo lista todos os inteiros de 1 a 100, exceto os c mltiplos de 7. u > for i from 1 to 100 do > if frac(i/7) = 0 then next end if; > print(i); > end do; No caso de vrios for ou while encaixados, o break ou o next atua apenas no n a vel em que eles estiverem. Por exemplo, > for i from ... do > from j from ... > break; O break faz sair somente do for j ... de modo que o for i ... continua funcionando.

206

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

8.3

Tipos pr-denidos e

Em vrias situaoes muito importante saber quais so os tipos dos objetos envolvidos. a c e a Por exemplo, uma funao f (x) com x inteiro deve fornecer resposta invlida se o x for c a fracionrio. Um procedimento para somar vetores u e v tambm no dever funcionar se a e a a u e v forem conjuntos ou listas. Nesta seo apresentamos algumas funoes (comandos) ca c que podem ser usadas para detectar a tempo esse tipo de situao. ca Alm dos tipos float (real), integer (inteiro), . . . o Maple possui mais de 160 tipos e considerados bsicos. Uma listagem de uma pequena parte deles est mostrada a seguir. a a Para uma listagem completa consulte a documentao on line digitando ?type . ca TIPO BASICO Breve descriao; exemplo c integer Inteiro; 0 posint Inteiro positivo; 3 negint Inteiro negativo; 3 odd Inteiro mpar; 5 even Inteiro par; 4 oat Nmero real (ponto utuante); 3.14159 u realcons Inteiro, racional, real, innity ou -innity; 2.71828 complex a + b I, onde a e b so do tipo realcons; 5 + 4 I a fraction Fraao p/q com p e q inteiros; 2/3 c rational Frao ou inteiro; 5 ca numeric Numrico (inteiro, frao ou real); 4.5/3 e ca positive Numrico positivo; 1.2345 e negative Numrico negativo; 11 e algebraic Algbrico; sqrt(2) I e polynom Polinmio; x2+5*x+3 o list Lista; [v, w, 1, 2, 3] listlist Lista de listas; [[1, 2], [a, b]] set Conjunto; {1, 0, x, y} series Srie; series(sin(x), x = 0, 4) e exprseq Seqncia; m, n, p ue anything Qualquer tipo, exceto seqncia ue symbol S mbolo; alpha

8.3. TIPOS PRE-DEFINIDOS

207

+ Soma; a + b * Produto; x y Potncia; 2x e < Desigualdade; x < 0 = Igualdade; y = 4 name Nome de varivel; x a function Funao; f (x) c procedure Procedimento; f Matrix Matriz; M atrix([[1, 2], [3, 4]]) string Caracteres entre aspas; teste indexed Varivel indexada; a[n] a Para mostrar o tipo de uma varivel, constante ou expresso X podemos usar o coa a mando whattype(X). Exemplo 8.22 Usamos vrias vezes o comando whattype para obter o tipo bsico das a a expresses fornecidas como parmetro desse comando. o a > whattype(cos(x)); f unction > whattype(cos); symbol > whattype([a, b, c]); list > whattype(x > 1); < > whattype(a[i, j]); indexed > whattype(-4); integer > whattype(-4.0); f loat > whattype(-4*I);

208

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

complex > whattype(x = 1); = Exemplo 8.23 Se uma expresso contiver vrias operaes, ento o tipo da expresso a a co a a o da operao que tiver menor prioridade no clculo. Por exemplo, uma soma de e ca a potncias do tipo soma e no do tipo potncia. e e a e > whattype(a + 4); + > whattype(x*f(x)); > whattype(2^(x + 1)); > whattype(2^x + 1); + > whattype(ln(2)); f unction > whattype(3 + ln(2)); + O comando type(expresso, tipo) pode ser usado para checar se uma expresso de a a e determinado tipo. Dependendo do resultado do teste efetuado, o type retorna sempre true ou false, ou seja, verdadeiro ou falso. Exemplo 8.24 Usamos o type vrias vezes para vericar se a expresso dada pertence a a ao tipo fornecido como segundo parmetro. a > type( {1, 2, 3}, list); f alse > type( {1, 2, 3}, Matrix); f alse > type( {1, 2, 3}, set); true > type(4, integer); true

8.3. TIPOS PRE-DEFINIDOS

209

> type(4, positive); true > type(4, numeric); true > type(4, float); f alse > type(x, name); true > type(x, string); f alse > type("x", string); true Podemos agrupar os tipos bsicos e, a partir deles, construir novos tipos que so a a chamados tipos compostos ou tipos estruturados. Praticamente no h limite para a a a quantidade e variedade de tipos estruturados que podem ser criados. Vamos mencionar aqui apenas alguns poucos:
Um novo tipo formado pela unio de outros tipos pode ser denida colocando-se os a nomes dos tipos entre chaves e separados por v rgulas. Por exemplo, {T1, T2} um e tipo composto que corresponde ` unio dos tipos T1 e T2. a a O tipo lista de elementos do tipo T pode ser denido na forma list(T). O tipo conjunto de elementos do tipo T pode ser denido na forma set(T). O resultado da operaao var1var2 onde var1, var2 so objetos dos tipos T1 e T2, c a respectivamente, pode ser considerado como sendo do tipo T1T2. No lugar de (potenciaao) poder c amos ter outras operaes como &+ (adio) ou &* co ca (multiplicaao). c

Exemplo 8.25 Denimos um tipo POTENCIA que corresponde a uma potncia na qual a e base pode ser do tipo nome de varivel (name) e o expoente pode ser do tipo inteiro, real a ou do tipo nome de varivel. Depois, testamos se algumas expresses pertencem ao novo a o tipo assim denido. > POTENCIA := name^{integer, float, name}; P OT EN CIA := name{f loat, integer, name} > type(x^4, POTENCIA); true

210

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

> type(x^x, POTENCIA); true > type(y^2.0, POTENCIA); true > type(2^x, POTENCIA); f alse Exemplo 8.26 Denimos um tipo listaR como sendo uma lista de reais e vericamos se alguns elementos pertencem ao novo tipo assim denido. > listaR := list(float); # definiao do novo tipo c~ listaR := list(f loat) > type([3.0], listaR); true > type([3.0, 5.0, 1.0, 7.0], listaR); true > type([3, 5, 1, 7], listaR); f alse Exemplo 8.27 O tipo de uma varivel pode mudar, dependendo das atribuies que lhe a co sejam feitas, conforme demonstramos neste exemplo. > whattype(x); symbol > x := 3: whattype(x); integer > x := 2.718: whattype(x); f loat

8.4. PROCEDIMENTOS

211

8.4

Procedimentos

A elaboraao de procedimentos (procedures) constitui a parte mais importante da c programao com o Maple. Podemos at dizer que programar com o Maple o mesmo ca e e que elaborar procedimentos. Suponhamos que existam alguns comandos, digamos comando1, comando2 e comando3 que devam ser executados pelo Maple. Que tal dar um nome a esse conjunto de comandos e execut-los apenas usando o nome dado? E muito fcil fazer isso: basta envolver os a a comandos a serem executados pelas palavras proc() e end proc e atribu -los a um nome de varivel. Esse nome de varivel ser o nome do procedimento e ser usado como a a a a um novo comando para chamar ` execuo os comandos denidos no procedimento. a ca Digamos que o nome escolhido para o procedimento seja Inicio. Ento ele pode ser a denido assim: > Inicio := proc() comando1; comando2; comando3; end proc; Depois do end proc; o Maple responde: Inicio := proc() comando1; comando2; comando3; end proc; Assim, em vez de digitar cada um dos comandos comando1, comando2 e comando3 eles podem ser executados digitando-se apenas o nome do procedimento: > Inicio(); Para poder caracterizar uma chamada a um procedimento preciso que tenha parnteses e e acompanhando o nome Inicio, mesmo que estejam vazios. Fica mais fcil ler e compreender um procedimento cuja denio se espalhe por vrias a ca a linhas: > Inicio := proc() > comando1; > comando2; > comando3; > end proc: Na digitao de um procedimento em vrias linhas, a partir da segunda linha aparece ca a a mensagem Warning, premature end of input Essa mensagem desaparece automaticamente depois da digitaao do end proc. c Com dois pontos depois do end proc, o Maple no ecoa a deniao do procedimento. a c comum um procedimento usar internamente valores de variveis que lhe sejam forE a necidos de fora, ou seja, fornecidos pelo usurio ou por outros comandos que tenham a chamado o procedimento ` execuao. Para isso, basta colocar a relaao de variveis var1, a c c a var2, . . . nos parnteses iniciais, junto ` palavra proc: e a

212

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

Nome do procedimento := proc(var1, var2, ...) comando1; comando2; ... return valor; end proc; Com essa denio, o procedimento deve ser chamado atravs do seu nome seguido de ca e uma relaao de valores valor1, valor2, . . . entre parnteses: c e Nome do procedimento(valor1, valor2, ...). O valor1 ser atribu a var1, o valor2 ser atribu a var2, etc. Os comandos do a do a do procedimento sero executados usando esses valores fornecidos. a comum tambm um procedimento retornar valores para fora, ou seja, retornar E e para o usurio ou para os comandos que o tiverem chamado. Isso pode ser feito com a um comando return valor; . O return opcional e se ele no for especicado, o e a procedimento retornar o ultimo valor que ele tiver calculado durante sua execuao. a c Exemplo 8.28 A denio de um procedimento parece muito com a de uma funo de ca ca ` uma ou vrias variveis. As vezes um procedimento pode at ser usado como se fosse a a e uma funao. c Vamos denir um procedimento F que receba um valor x e devolva y = x2 : > F := proc(x) > y := x^2; > return y; > end proc: O procedimento assim denido se comporta como se fosse a funo F (x) = x2 . Pode-se ca calcular valores em pontos do domnio, calcular derivada, integral, fazer grco, etc. a Exemplo 8.29 Vamos denir um procedimento que receba uma funo denida por uma ca expresso algbrica y, a varivel x da funo e as extremidades a e b de um intervalo, a e a ca calcule a derivada da funo dada e construa os grcos da funo e sua derivada no ca a ca intervalo [a, b] em um mesmo sistema de eixos. Chamando o procedimento de ConstroiGraficos, ele deve ser denido com quatro parmetros y, x, a e b. a > ConstroiGraficos := proc(y, x, a, b) > z := diff(y, x); # calcula a derivada z(x) = y(x) > plot([y, z], x=a..b); # constri os grficos de y(x) e z(x) o a > end proc: Depois de denido, podemos us-lo para construir os grcos de y = x2 e sua derivada a a no intervalo [2, 2], bastando digitar: > ConstroiGraficos(x^2, x, -2, 2);

8.4. PROCEDIMENTOS

213

Apesar do nome da varivel denida no procedimento ter sido x, ele pode ser usado a com funes com outro nome de varivel. Para isso, basta informar o nome da varivel co a a da funo como segundo parmetro na chamada do procedimento. Aqui, usamos o mesmo ca a procedimento para construir os grcos de f (t) = sen t+cos(2t) e de f (t) com t [, ]. a > ConstroiGraficos(sin(t) + cos(2*t), t, -Pi, Pi); Exemplo 8.30 Na denio de um procedimento, no permitido que os parmetros ca a e a sejam recalculados. Qualquer tentativa em se fazer isso gera uma mensagem de erro de uso ilegal de parmetro. O procedimento Teste denido neste exemplo tenta reduzir o a valor do parmetro x ` metade, mas isso gera erro na sua execuo. a a ca > Teste := proc(x) > x := x/2; > end proc: > > Teste(4); Error, (in Teste) illegal use of a formal parameter Em linguagens de programao como C ou Pascal um procedimento como esse seria ca considerado vlido. Nessas linguagens a redenio dos valores dos parmetros de funes a ca a co ou procedimentos algo usual. e E altamente recomendvel que um procedimento tenha cuidado com os valores que a lhe so passados. Um procedimento denido para efetuar clculos com nmeros inteiros a a u pode gerar resultados desastrosos se forem passados para ele nmeros fracionrios, por u a exemplo. Essa checagem pode ser feita facilmente, bastando para isso escrever cada parmetro X em proc na forma X :: tipo. a Os procedimentos denidos nos Exemplos 8.28 e 8.29 assumem que um usurio saiba a cham-los de forma correta, porque eles no fazem nenhuma checagem nos tipos dos a a parmetros fornecidos. Uma maneira mais eciente de deni-los seria: a F := proc(x::float) . . . , para exigir que o x fornecido seja do tipo float. ConstroiGraficos := proc(y::algebraic, x::name, a::float, b::float) . . . , para exigir que y seja do tipo expresso algbrica (algebraic), x seja do tipo nome de a e varivel (name) e a e b sejam reais (oat). a Exemplo 8.31 O seguinte procedimento P , apesar de elaborado para trabalhar somente com inteiros positivos x, no faz nenhum tipo de checagem do tipo do parmetro passado. a a > P := proc(x) > if isprime(x) then > print( primo) E > else > print(N~o primo); a e > end if; > end proc:

214

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

Ele funciona bem com inteiros positivos: > P(4); No primo a e > P(11); E primo > P(19999999); E primo Mas, veja o que acontece quando ele chamado com um parmetro fracionrio. Ele e a a repassa o valor fracionrio para a funo isprime, que quem detecta que algo est indo a ca e a errado. > P(3.4); Error, (in isprime) argument must be an integer Para melhorar signicativamente a denio desse procedimento, basta trocar o x ca do incio por um x::posint. Com isso, valores que no sejam inteiros positivos sero a a rejeitados logo na porta de entrada do procedimento. Dessa forma, o procedimento no a vai perder tempo chamando a funo isprime para atuar com valores fracionrios. ca a > P := proc(x::posint) > if isprime(x) then > print( primo) E > else > print(N~o primo); end if; a e > end proc: > P(3.4); Error, invalid input: P expects its 1st argument, x, to be of type posint, but received 3.4 Outra opo, mais trabalhosa, fazer uma checagem de tipos dentro do prprio proca e o cedimento com um comando if usando type ou whattype: > P := proc(x) > if not type(x, posint) then > print(ERRO: o par^metro deve ser inteiro positivo) a > else > if isprime(x) then > print( primo) E > else > print(N~o primo); a e > end if; > end if; > end proc:

8.5. VARIAVEIS LOCAIS E GLOBAIS

215

> P(3.4); ERRO: o parmetro deve ser inteiro positivo a Exemplo 8.32 Neste exemplo denimos um procedimento Calcula que deve receber como parmetros uma expresso algbrica F , um nome de varivel x e um ponto de a a e a seu domnio a, transformar a expresso algbrica em funo f , calcular sua derivada a e ca usando o operador diferencial e retornar o valor f (a) + f (a). > Calcula := proc(F::algebraic, x::name, a::numeric) > f := unapply(F, x); > f(a) + (D)(f)(a); # ou return f(a)+(D)(f)(a); > end proc: Exemplicando o uso desse procedimento em vrios casos: a > Calcula(x^2, x, 1); 3 > Calcula(sin(t), t, 3)); sin(3) + cos(3) > Calcula(alpha^3 - 3*alpha, alpha, 0); 3

8.5

Variveis locais e globais a

Em geral, toda linguagem de programao tem dois tipos de variveis: as locais e as ca a globais. Como o nome j diz tudo, a diferena s na regio do programa onde elas a c e o a so conhecidas. As globais so conhecidas em toda parte e as locais so restritas aos a a a procedimentos ou `s funoes onde elas estiverem denidas. a c Se no for especicado nada a respeito de uma varivel de um procedimento, o Maple a a tentar deni-la como sendo local. a No Maple, uma varivel x denida como sendo local, se for declarada na forma a e local x; no in cio do procedimento. Analogamente, x ser global se for denida na a forma global x. Exemplo 8.33 Denimos dois procedimentos CalcX e CalcX2 que denem um valor para x. No CalcX o x global, enquanto que no CalcX2 ele local. e e > > > > > > > > > CalcX := proc() global x; x := cos(Pi/10); end proc: CalcX2 := proc() local x; x := ln(2); end proc:

216

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

Agora vamos us-los para ver o que acontece. Inicialmente, chamamos CalcX e depois a queremos ver o valor de x que retorna desse procedimento. > CalcX(): > x; cos 1 10

Veja o que acontece com Calc2X. Internamente, ele altera o valor de x para ln(2), mas como o x dele local isso no afeta o valor que havia sido denido antes dele ser e a chamado. > CalcX2(): > x; cos 1 10

Exemplo 8.34 Dados um inteiro n, uma funo f (x) e um intervalo aberto I =]a, b[, ca entre os n primeiros termos da seqncia (f (1), f (2), f (3), ), queremos saber quanue tos pertencem ao intervalo I. Para isso, usamos um for para percorrer a seqncia e ue um if para testar se cada termo percorrido satisfaz as condies desejadas, ou seja, se co f (i) ]a, b[. Se pertencer, incrementamos de uma unidade uma varivel auxiliar cont que a foi iniciada em 0. A funo dessa varivel auxiliar contar quantos termos satisfazem a ca a e propriedade desejada. Alm disso, usamos um comando print para mostrar a posio e e ca o valor do termo que satisfaz a propriedade desejada. Para codicar isso, denimos um procedimento de nome ContaTermos que recebe 4 parmetros: a funo f , o inteiro n e a ca as extremidades a e b do intervalo. > ContaTermos := proc(f, n, a, b) > local i, cont; > cont := 0; > for i from 1 to n do > if (a < evalf(f(i)) and evalf(f(i)) < b) then > cont := cont + 1; > print(i, evalf(f(i))); > end if; > end do; > return cont; > end proc: Para exemplicar, vamos determinar entre os 100 primeiros termos da seqncia ue 2 (an ) = (n cos n n sen (2n)), quais os que satisfazem 5 < an < 5. > f := x -> x*cos(x) - x^2*sin(2*x): > ContaTermos(f, 100, -5, 5);

8.5. VARIAVEIS LOCAIS E GLOBAIS

217

1, .3689951209 2, 2.194916308 3, .455238006 11, 1.119691102 4 Portanto, temos que um total de 4 termos da seqncia dada pertencem ao intervalo ue aberto ] 5, 5[: o primeiro, o segundo, o terceiro e o dcimo primeiro termos. e Exemplo 8.35 Este exemplo um melhoramento do que foi feito no Exemplo 8.11. Dada e uma funo f e dois inteiros positivos i1 e i2, calcule i2 f (n). ca n=i1 > Soma := proc(f::procedure, i1::posint, i2::posint) > > local s, n; > > s := 0; > for n from i1 to i2 do > s := s + f(n); > end do; > return s; > end proc; > f := x -> 1/x^2; f := x > Soma(f, 1, 10); 1968329 1270080 O comando Soma(f, a, b) aqui denido semelhante ao comando padro e a sum(f(n), n=a..b). Exemplo 8.36 Este exemplo generaliza o Exemplo 8.12. Dados dois conjuntos A e B, denir um procedimento Cartesiano(A, B) que retorne o produto cartesiano A B. > Cartesiano := proc(A::set, B::set) > local i, j, P, elemento; > > P := {}; > for i from 1 to nops(A) do > for j from 1 to nops(B) do > elemento := [A[i], B[j]]; > P := P union {elemento} > end do > end do; 1 x2

218

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

> > return P; > end proc; Testando o procedimento denido: > Cartesiano({x, y, z}, {alpha, beta, epsilon}); {[x, ], [x, ], [x, ], [y, ], [y, ], [y, ], [z, ], [z, ], [z, ]} No in cio de um procedimento, alm das declaraes de variveis locais ou globais, e co a podemos ter tambm algumas opes e uma descriao. Vamos citar aqui apenas a opao e co c c de direitos autorais. Se essa opao estiver presente na forma option Copyright ... c ento o Maple no mostra a denio do procedimento (a no ser que se exija que ele a a ca a mostre, alterando-se o valor da varivel verboseproc ver seao B.4). A descrio do a c ca procedimento pode aparecer na forma description ..., como no exemplo a seguir. Exemplo 8.37 Dados uma funo f(x) cont ca nua e um intervalo [a, b] no qual a funo ca muda de sinal (isto , f (a)f (b) < 0) denimos um procedimento que calcula uma raiz e aproximada de f (x). O algoritmo utilizado simples: calculado o ponto mdio e e e M = (A + B)/2 do intervalo [A, B], onde A = a e B = b. Se f (A)f (M ) < 0 ento a a raiz est no intervalo [A, M] e redenimos B = M ; seno, a raiz est em [M, B] e a a a redenimos A = M . Vericamos se o intervalo [A, B] assim redenido cou com comprimento menor do que um sucientemente pequeno. Se cou, ento o ponto mdio a e desse intervalo pode ser considerado uma raiz aproximada de f . Se o comprimento do intervalo ainda no est sucientemente pequeno, ento calculamos o ponto mdio dele a a a e e redenimos A ou B de maneira semelhante ao que foi feito anteriormente (observando se f (A)f (M ) < 0). > CalculaRaiz := proc(f::procedure, a::float, b::float) > > option Copyright (C) 2002 by Lenimar N. Andrade; > description Calcula uma raiz de f(x) em [a, b]; > > local epsilon, A, B, M; > epsilon := 0.000000001; > A := a; B := b; > > if f(a)*f(b) >= 0 then > print(Erro: deveramos ter f(a)f(b) < 0); > return infinity; > end if; > > while abs(A - B) >= epsilon do > M := (A + B)/2.0; > if abs(f(M)) < epsilon then > return M;

8.5. VARIAVEIS LOCAIS E GLOBAIS

219

> else > if f(A)*f(M) < 0 then > B := M > else > A := M; > end if > end if > end do; > end proc; CalculaRaiz := proc(f::procedure, a::oat, b::oat) description Calcula uma raiz de f(x) em [a, b] . . . end proc Vamos usar o procedimento CalculaRaiz para determinar as ra de 2x = x2 . zes > f := x -> 2^x - x^2; f := x 2x x2 > CalculaRaiz(f, 3.5, 6.0); 3.999999999 > CalculaRaiz(f, 0.0, 3.0); 2.000000000 > CalculaRaiz(f, -1.0, 0.0); .7666646961 > CalculaRaiz(f, -2.0, -1.0); Erro: deveramos ter f (a)f (b) < 0 Exemplo 8.38 Denimos um procedimento Pertence booleano que verica se um elemento x do tipo anything pertence a um objeto L que pode ser uma lista ou um conjunto. Alm disso, calculamos sua posio na lista que retornada como terceiro parmetro do e ca e a procedimento. Se x no pertencer a L ento a posio retornada 0. a a ca e > restart; > Pertence := proc(x::anything, L::{list, set}, posicao::name) > description Verifica se x pertence a L; > local k; > for k from 1 to nops(L) do > if x = op(k, L) then > posicao := k; > return true; > end if;

220

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

> end do; > posicao := 0; > return false; > end proc; Pertence := proc(x::anything, L::set, list, posicao::name) local k; description Verica se x pertence a L; for k to nops(L) do if x = op(k, L) then posicao := k; return true end if end do; posicao := 0; return false end proc Para testar o procedimento assim denido, consideremos a lista denida a seguir. Vamos vericar se os elementos -11, 20 e 2002 pertencem a esta lista e calcular suas posies. co > lista := [x, y, z, 1, 2, -2.6, 0, -11, 2002, alpha]; lista := [x, y, z, 1, 2, 2.6, 0, 11, 2002, ] > Pertence(-11, lista, k); true > k; 8 > Pertence(20, lista, j); f alse > j; 0 > if Pertence(2002, lista, p) then > print(2002 aparece na lista na posiao, p); c~ > else > print(2002 n~o aparece na lista); a > end if; 2002 aparece na lista na posio, 9 ca Utilizamos o nome do terceiro parmetro como sendo k, j e p. Isso porque o procedia mento exige um terceiro parmetro do tipo name e ao retornar do procedimento cada uma a dessas variveis retorna como sendo do tipo inteiro. a Exemplo 8.39 Denimos um tipo Float2 que corresponde a um procedimento com dois parmetros reais e vericamos se dois procedimentos f e g dados so desse tipo. a a > f := proc(x::float, y::float) return x + y; end proc: > g := proc(i::integer, j::integer) return i*j; end proc: > Float2 := procedure(float, float); F loat2 := procedure(f loat, f loat)

8.5. VARIAVEIS LOCAIS E GLOBAIS

221

> type(f, Float2); true > type(g, Float2); f alse Exemplo 8.40 Este exemplo deve ser visto com ateno. Inicialmente, observe o que ca acontece se for digitado no aviso (prompt) do Maple o seguinte: > a := b + 1: > b := c + 1: > a; c+2 Ao perguntar pelo valor de a, o Maple substituiu a por b + 1 e b por c + 1, obtendo o valor de a como sendo (c + 1) + 1 = c + 2, o que era de se esperar. Agora, veja o que acontece se os comandos forem agrupados em um procedimento com variveis locais: a > F := proc() > local a, b, c; > a := b + 1; > b := c + 1; > return a; > end proc; Executando o procedimento F que retorna o valor de a depois das substituies feitas co no procedimento: > F(); b+1 Note que obtivemos b + 1 como sendo o valor de a e no c + 2 que foi obtido sem a usar o procedimento. Isso ocorreu porque a quantidade de substituies feitas em um co procedimento no a mesma quantidade de substituies do modo interativo (sem o a e co uso de procedimentos). No modo interativo so feitas todas as substituies poss a co veis enquanto que em um procedimento, as variveis so substitu a a das apenas uma vez, ou seja, a substituio feita apenas no primeiro n ca e vel. Exemplo 8.41 A quantidade de parmetros passados para um procedimento pode ser a obtida atravs da varivel nargs. A seqncia de parmetros passados para um procedie a ue a mento guardada na varivel args. Logo, o i-simo parmetro dado por args[i]. e a e a e > f := proc(x, y, z) > local i; > printf("Procedimento com %d argumentos:", nargs); > for i from 1 to nargs do > print(args[i], whattype(args[i])); > end do; > end proc:

222

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

O Maple possui uma funo printf semelhante ` da linguagem C. Com ela, poss ca a e vel fazer uma impresso formatada de um string, colocando o valor de nargs no local assia nalado com um %d. Testando o procedimento f : > f(1, 2.9, ln(c)); Procedimento com 3 argumentos: 1, integer 2.9, f loat ln(c), f unction

8.6

Procedimentos recursivos

Um procedimento pode fazer referncia a ele mesmo na sua denio. Essa propriedade e ca chamada recursividade do procedimento. e Um dos exemplos mais conhecidos de recusividade a denio da funo fatorial: e ca ca n! = 1 se n = 0 ou n = 1 n (n 1)! se n>1

Exemplo 8.42 Vamos denir recursivamente a funo fatorial de um inteiro positivo n. ca > Fatorial := proc(n::posint) > if n < 2 then > return 1; > else > return n*Fatorial(n - 1); > end if; > end proc; Fatorial := proc(n::posint) if n < 2 then return 1 else return n*Fatorial(n - 1) end if end proc Exemplicando o seu uso: > Fatorial(7); 5040 > Fatorial(-3); Error, invalid input: Fatorial expects its 1st argument, n, to be of type posint, but received -3 Exemplo 8.43 Denimos agora outra funo recursiva denida nos inteiros positivos: ca F ib(n) = 1, se n = 1 ou n = 2 F ib(n 1) + F ib(n 2), se n3

8.6. PROCEDIMENTOS RECURSIVOS

223

> Fib := proc(n::posint) > if n <= 2 then > return 1; > else > return Fib(n - 1) + Fib(n - 2); > end if; > end proc; Fib := proc(n::posint) if n <= 2 then return 1 else return Fib(n - 1) + Fib(n - 2) end if end proc Depois de denida, podemos gerar alguns termos da seqncia an = F ib(n): ue > seq(Fib(n), n = 1..20); 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765 Apesar de fceis de codicar, nem sempre as funes recursivas so ecientes. Quase a co a sempre poss e vel denir uma funo anloga de forma no recursiva. As verses no ca a a o a recursivas podem ser mais complicadas em termos de denio, mas sob o ponto de ca vista computacional so mais ecientes: no fazem clculos desnecessrios, gastam menos a a a a memria e menos tempo de computaao. o c Exemplo 8.44 Denio da funo fatorial de forma no recursiva. ca ca a > FAT := proc(n::posint) > local k, prod; > prod := 1; > for k from 2 to n do > prod := prod*k; > end do; > end proc; FAT := proc(n::posint) local k, prod; prod := 1; for k from 2 to n do prod := prod*k end do end proc > FAT(7); 5040 Exemplo 8.45 Neste exemplo denimos duas funes F e G mutuamente recursivas: F co dependendo de G e G dependendo de F nas suas denies. co F (x) = G(x + 2) se x < 0 x/2 + 5 se x 0 e G(x) = F (x + 1) se x < 0 . x2 se x 0

Por exemplo, G(8) = F (7) = G(5) = F (4) = G(2) = F (1) = G(1) = 1. > F := proc(x::numeric) > if (x < 0) then

224

CAP ITULO 8. NOCOES DE PROGRAMACAO COM O MAPLE

> return G(x + 2); > else > return (x/2 + 5); > end if; > end proc: > > G := proc(x::numeric) > if (x < 0) then > return F(x + 1); > else > return (x*x); > end if; > end proc:

Figura 8.1:

10

6 y 4

10

10

Depois de denidas, podemos fazer operaes com essas funes, como por exemplo co co construir o grco de uma delas (Figura 8.1). a > plot(F, -10..10, y=-1..10, discont=true);

Cap tulo 9

Grupos, Transformadas Integrais, Funoes Complexas c


Neste cap tulo introduzimos comandos do Maple relacionados com assuntos da Matemtica que normalmente so estudados por um pblico mais restrito. Esses asa a u suntos so: Grupos de Permutaoes, Sries de Fourier, Transformadas de Laplace e de a c e Fourier, Funoes Complexas. Aqui no h nenhuma dependncia entre esses assuntos, c a a e eles podem ser vistos em qualquer ordem. O Maple possui pacotes relacionados com assuntos bem mais complexos do que esses.

9.1

Grupos de Permutaes co

Diversas operaoes com grupos de permutaes podem ser feitas com os comandos do c co pacote group. Logo, eles exigem que tenha sido digitado antes um with(group) ou que sejam usados na forma group[comando]. > with(group); [DerivedS, LCS, NormalClosure, RandElement, SnConjugates, Sylow, areconjugate, center, centralizer, core, cosets, cosrep, derived, elements, groupmember, grouporder, inter, invperm, isabelian, isnormal, issubgroup, mulperms, normalizer, orbit, parity, permrep, pres, transgroup] O Maple representa um ciclo de um grupo de permutaoes na forma [a1 , a2 , . . . , an ] e o c elemento identidade por [ ]. O produto de ciclos indicado colocando-os entre colchetes e e separados por v rgulas. Por exemplo, o produto de dois ciclos representado na forma e [[a1 , a2 , . . . , an ], [b1 , b2 , . . . , bp ]]. O Maple interpreta uma lista [a1 , , an ] formada com os inteiros de 1 a n como sendo uma permutaao f de Sn na qual f (i) = ai . Por exemplo, a lista x = [4, 5, 1, 3, 2, 6] pode c ser interpretada como sendo a permutaao c x= 1 2 3 4 5 6 4 5 1 3 2 6

225

226

CAP ITULO 9. GRUPOS, TRANSFORMADAS INTEGRAIS, FUNCOES COMPLEXAS

O comando convert(permuta~o, disjcyc) converte a permutaao fornecida como ca c primeiro parmetro em um produto de ciclos disjuntos. a Exemplo 9.1 Sejam S6 e S13 as permutaes co = e = 1 2 3 4 5 6 3 4 1 2 6 5 .

1 2 3 4 5 6 7 8 9 10 11 12 13 11 3 12 10 13 1 9 2 6 4 7 8 5

Vamos usar o convert para escrev-las como produtos de ciclos disjuntos. e > beta := [3, 4, 1, 2, 6, 5]: > convert(beta, disjcyc); [[1, 3], [2, 4], [5, 6]] > sigma := [11, 3, 12, 10, 13, 1, 9, 2, 6, 4, 7, 8, 5]: > sigma := convert(sigma, disjcyc); := [[1, 11, 7, 9, 6], [2, 3, 12, 8], [4, 10], [5, 13]] Obtivemos = (1 3) (2 4) (5 6) e = (1 11 7 9 6) (2 3 12 8) (4 10) (5 13). O convert tambm pode ser usado para converter produtos de ciclos disjuntos em pere mutaes. Para isso, basta usar o segundo parmetro como sendo permlist e acrescentar co a um terceiro parmetro com um inteiro que corresponde ao grau da permutaao. a c Exemplo 9.2 Neste exemplo, convertemos (2 7) (1 4 3) e (2 4 1) (7 3) em listas que representam permutaes em S10 e S8 , respectivamente. co > convert( [[2, 7], [1, 4, 3]], permlist, 10); [4, 7, 1, 3, 5, 6, 2, 8, 9, 10] > delta := convert([[2,4,1], [7,3]], permlist, 8); := [2, 4, 7, 1, 5, 6, 3, 8] Para o pacote group, as permutaoes devem ser fornecidas como produtos de ciclos c disjuntos. Um grupo de permutaes pode ser denido na forma permgroup(grau, co {geradores}). Uma breve descriao de alguns comandos do pacote group mostrada a seguir. c e DerivedS(G) Srie derivada de G, util para determinar se G solvel) e e u LCS(G) Srie central inferior de G, util para determinar se G nilpotente e e NormalClosure(H, G) Fecho normal de H em G (o menor subgrupo normal de G que contm H) e RandElement(G) Um elemento de G escolhido aleatoriamente

9.1. GRUPOS DE PERMUTACOES

227

SnConjugates(G , x) Nmero de elementos de G que contm um ciclo x u e Sylow(G, p) p-Subgrupo de Sylow de G areconjugate(G, a, b) Determina se duas permutaes a e b so conjugadas em G co a center(G) Calcula o centro de G centralizer(G, H) Calcula o centralizador de um conjunto de permutaoes H c core(H, G) Calcula o maior subgrupo normal de G contido em H derived(G) Calcula [G, G], o subgrupo derivado de G elements(G) Listagem de todos os elementos de G groupmember(x, G) Verica se um elemento x pertence ao grupo G grouporder(G) Calcula a ordem de G inter(G, H) Calcula a interseo de dois grupos G e H ca invperm(x) Calcula a permutaao inversa de x c isabelian(G) Verica se o grupo G abeliano e isnormal(G, H) Verica se um subgrupo H normal em G e issubgroup(H, G) Verica se H subgrupo de um grupo G e mulperms(a, b) Calcula ab, o produto das permutaoes a e b c normalizer(G, H) Calcula o normalizador de H em G orbit(G, i) Calcula a rbita de um ponto i o parity(x) Verica se uma permutaao x par ou c e mpar permgroup(n, A) Dene um grupo de permutaoes de grau n com um conjunto de c geradores A Exemplo 9.3 O subgrupo G do S5 gerado pelos elementos (1 4)(2 3) e (1 2)(3 5) e denido com os seguintes comandos: > with(group): > G := permgroup(5, {[[1,4],[2,3]], [[1,2],[3,5]]}); Para listar os elementos do grupo, necessrio usar o comando elements : e a > elements(G); que neste caso fornece a seguinte listagem: { [ ], [[1, 3], [4, 5]], [[2, 5], [3, 4]], [[1, 2, 3, 4, 5]], [[1, 2], [3, 5]], [[1, 5], [2, 4]], [[1, 4], [2, 3]], [[1, 4, 2, 5, 3]], [[1, 5, 4, 3, 2]], [[1, 3, 5, 2, 4]] } Para saber quantos elementos formam esse grupo basta usar um grouporder:

228

CAP ITULO 9. GRUPOS, TRANSFORMADAS INTEGRAIS, FUNCOES COMPLEXAS

> Ordem de G = grouporder(G); Ordem de G = 10 . Exemplo 9.4 Neste exemplo denimos um subgrupo G de S5 gerado pelos elementos (3 2 5 4 1) e (1 5)(3 4 2): > with(group): > G := permgroup(5, {[[3,2,5,4,1]], [[1,5],[3,4,2]]}): > isabelian(G); # G abeliano? e f alse Depois, pegamos dois elementos a e b de G de forma aleatria e calculamos seus o 1 1 inversos x = a e y = b : > a := RandElement(G); b := RandElement(G); a := [[1, 4], [2, 5, 3]] b := [[1, 2, 4, 3, 5]] > x := invperm(a); y := invperm(b); x := [[1, 4], [2, 3, 5]] y := [[1, 5, 3, 4, 2]] Agora calculamos os sinais dos elementos a e b. Pela resposta dada pelo programa, temos que a e mpar e que b par. e > parity(a); 1 > parity(b); 1 Perguntamos agora se a e b so conjugados em G: a > areconjugate(G, a, b); f alse Finalmente, calculamos os produtos c = ab e d = ba e perguntamos se c pertence ao grupo G. > c: = mulperms(a, b); d := mulperms(b, a); c := [[1, 3, 4, 2]] d := [[1, 5, 4, 2]] > groupmember(c, G);

9.1. GRUPOS DE PERMUTACOES

229

true Exemplo 9.5 Neste exemplo denimos inicialmente um grupo G subgrupo de S6 gerado por (1 2)(3 4), (1 4) e (5 6 1). Calculamos a ordem de G e escrevemo-la em forma fatorada: 24 32 5. Depois, denimos H como sendo um 2-Subgrupo de Sylow de G. A partir da expresso fatorada da ordem de G, claro que a ordem de H 24 = 16. Conrmamos a e e isso listando todos os elementos de H e calculando sua ordem. Finalmente, vericamos que H no normal em G. a e > with(group): > G := permgroup(6, {[[1, 2],[3, 4]], [[1, 4]], [[5, 6, 1]]}); G := permgroup(6, {[[1, 2], [3, 4]], [[1, 4]], [[5, 6, 1]]}) > grouporder(G); # ordem de G 720 > ifactor(%); (2)4 (3)2 (5) > H := Sylow(G, 2); H := permgroup(6, {[[2, 3], [5, 6]], [[3, 6]], [[1, 4], [2, 6, 5, 3]]}) > grouporder(H); > elements(H); {[ ], [[1, 4], [2, 5], [3, 6]], [[1, 4], [2, 3], [5, 6]], [[2, 3], [5, 6]], [[1, 4], [2, 3, 5, 6]], [[2, 3, 5, 6]], [[2, 6, 5, 3]], [[2, 5]], [[2, 5], [3, 6]], [[1, 4], [2, 6], [3, 5]], [[2, 6], [3, 5]], [[1, 4], [2, 5]], [[1, 4]], [[1, 4], [3, 6]], [[3, 6]], [[1, 4], [2, 6, 5, 3]]} > isnormal(G, H); # H normal em G? e f alse Cuidado: isnormal(H, G) no faz sentido, mas o programa responde que true. a e Exemplo 9.6 Neste exemplo, denimos G como sendo um grupo de permutaes de grau co 8 gerado pelos elementos (1 2 8), (1 2 3 4 5) e (5 6 7 8), pegamos aleatoriamente dois de seus elementos a e b e com eles geramos um subgrupo H. > with(group): > G := permgroup(8, {[[1, 2, 8]], [[1, 2, 3, 4, 5]], [[5,6, 7, 8]]}): > a := RandElement(G); b := RandElement(G); H := permgroup(8, {a, b}); a := [[1, 2], [3, 8, 7], [4, 5]] b := [[1, 4], [3, 5, 8, 7]] H := permgroup(8, {[[1, 2], [3, 8, 7], [4, 5]], [[1, 4], [3, 5, 8, 7]]}) # ordem de H 16

230

CAP ITULO 9. GRUPOS, TRANSFORMADAS INTEGRAIS, FUNCOES COMPLEXAS

> isnormal(G, H); # H normal em G? e f alse Calculamos N o normalizador de H em G e calculamos sua ordem e a ordem de G. O fato da ordem de N ser menor do que a ordem de G mostra mais uma vez que H no a normal em G. e > N := normalizer(G, H); N := permgroup(8, {[[7, 8]], [[1, 2], [3, 8, 7], [4, 5]], [[1, 4], [3, 5, 8, 7]]}) > |N| = grouporder(N); |G| = grouporder(G); |N | = 5040 |G| = 40320 Exemplo 9.7 Neste exemplo denimos um grupo G, subgrupo de S6 gerado por trs e ciclos e calculamos sua ordem. > with(group): > G := permgroup(6, {[[1, 2]], [[1, 3, 4]], [[5, 6]]}): > grouporder(G); 48 Agora, construmos uma srie subnormal de G. e > DerivedS(G); [permgroup(6, {[[5, 6]], [[1, 3, 4]], [[1, 2]]}), permgroup(6, {[], [[1, 2, 3]], [[2, 4, 3]]}), permgroup(6, {[], [[1, 2], [3, 4]], [[1, 3], [2, 4]]}), permgroup(6, {[ ]})] Obtivemos assim grupos G2 = (1 2 3)(2 4 3) e G1 = (1 2)(3 4), (1 3)(2 4)) tais que G G2 G1 {(1)}. Exemplo 9.8 Podemos agrupar os comandos pr-denidos em procedimentos e assim e criarmos novos comandos. Neste exemplo denimos um procedimento ordem que calcula a ordem de uma permutao fornecida na forma de lista. ca > ordem := proc(sigma) > local G, alpha; > alpha := convert(sigma, disjcyc); > G := permgroup(nops(sigma), {alpha}); > grouporder(G) > end proc; ordem := proc() local G, ; := convert(, disjcyc); G := permgroup(nops(), ); grouporder(G) end proc > with(group): > x := [5, 10, 1, 2, 3, 4, 6, 7, 9, 8]: > o := ordem(x); o := 6

9.2. SERIES DE FOURIER

231

9.2

Sries de Fourier e

A srie de Fourier de uma funo f (x) peridica de per e ca o odo 2 a srie e e (an cos(nx) + bn sen (nx))
0

onde as seqncias an e bn so denidas por: ue a an =


1 f (x)dx 2 1 f (x) cos(nx)dx

se n = 0 se n 1

, bn =

0
1

se n = 0 f (x) sen (nx)dx se n 1

Os coecientes an e bn podem ser denidos em forma de procedimentos: > > > > > > > > > > > a := proc(f, n) # definiao dos coeficientes a[n] c~ if n=0 then (1/(2*Pi))*int(f, x=-Pi..Pi); else (1/Pi)*int(f*cos(n*x), x=-Pi..Pi); end if; end proc: b := proc(f, n) # definiao dos coeficientes b[n] c~ if n=0 then 0; else (1/Pi)*int(f*sin(n*x), x=-Pi..Pi); end if; end proc:

Exemplo 9.9 Depois de denidos os procedimentos anteriores, podemos test-los para a qualquer funo escolhida. Neste exemplo, calculamos os coecientes a1 e b1 do desenca volvimento em srie de Fourier da funo exponencial f (x) = ex denida no intervalo e ca [, ]. > a(exp(x), 1); b(exp(x), 1); 1 e() + 1 e() 2 2 1 e() 1 e() 2 2 Agora, denimos uma funo SF ourier(f, n) como sendo a soma parcial ca
n

(an cos(kx) + bn sen (kx)) .


k=0

> SFourier := (f, n) -> sum(a(f, k)*cos(k*x) + b(f, k)*sin(k*x), k=0..n): Exemplo 9.10 Construmos os grcos de f (x) = ex e de SF ourier(f (x), 15) na Figura a 9.1.

232

CAP ITULO 9. GRUPOS, TRANSFORMADAS INTEGRAIS, FUNCOES COMPLEXAS

Figura 9.1:

10

6 y 4

1 x

Figura 9.2:

0.8 0.6 0.4 0.2

10

0 0.2 0.4 0.6 0.8

4 x

10

> teste := x -> SFourier(exp(x)), 15): > plot( [teste(x), exp(x))], x=-10..10, discont=true, > color=[red,blue], thickness=[2,2], numpoints=200); Nos pontos onde f cont e nua, a srie de Fourier converge para a funao. Logo, quanto e c maior o valor de n mais prximos vo ser os grcos de SF ourier(f, n) e de f (x). o a a Exemplo 9.11 Construmos nas Figuras 9.2, 9.3 e 9.4 os grcos da funo a ca f (x) = signum( sen x) = 4 /4 se 0 < x 0 se x 0

9.2. SERIES DE FOURIER

233

Figura 9.3:

0.8 0.6 0.4 0.2

10

0 0.2 0.4 0.6 0.8

4 x

10

Figura 9.4:

0.8 0.6 0.4 0.2

10

0 0.2 0.4 0.6 0.8

4 x

10

e os grcos de SF ourier(f (x), 5), SF ourier(f (x), 15), SF ourier(f (x), 50), respectivaa mente. > > > > > > > teste := x -> SFourier(Pi/4*signum(sin(x)), 5): plot( [teste(x), Pi/4*signum(sin(x))], x=-10..10, discont=true, color=[red,blue], thickness=[1,3], numpoints=200); teste := x -> SFourier(Pi/4*signum(sin(x)), 15): plot( [teste(x), Pi/4*signum(sin(x))], x=-10..10, discont=true,

234

CAP ITULO 9. GRUPOS, TRANSFORMADAS INTEGRAIS, FUNCOES COMPLEXAS

> color=[red,blue], thickness=[1,3], numpoints=200); > > teste := x -> SFourier(Pi/4*signum(sin(x)), 50): > plot( [teste(x), Pi/4*signum(sin(x))], x=-10..10, discont=true, > color=[red,blue], thickness=[1,3], numpoints=200);

9.3

Transformadas Integrais

O pacote inttrans fornece comandos para o clculo de vrias transformadas integrais a a e suas inversas: > with(inttrans); [addtable, fourier, fouriercos, fouriersin, hankel, hilbert, invfourier, invhilbert, invlaplace, invmellin, laplace, mellin, savetable]

9.3.1

Transformadas de Laplace

A Transformada de Laplace de uma funao F(t) denida por c e

L {F (t)} =
0

F (t)est dt

O comando de inttrans que corresponde a isso o laplace(F(t), t, s). e O Maple relembra a deniao dessa transformada: c > convert(laplace(F(t),t,s), int);
0

F (t)est dt

Se L {F (t)} = f (s) ento F (t) chama-se a Transformada de Laplace Inversa de f (s) e a e 1 usual denotar-se por F (t) = L {f (s)}. O comando do pacote inttrans correspondente o invlaplace(f(s), s, t). e Exemplo 9.12 Neste primeiro exemplo fazemos um clculo simples de Transformada de a Laplace de uma funo polinomial. Depois, a Transformada de Laplace Inversa aplicada ca ao resultado recupera a funo inicial. ca > with(inttrans): > y := laplace( 1 + 3*t - 2*t^5, t, s); y := > invlaplace(y, s, t); 1 + 3t 2t5 3 240 1 + 2 6 s s s

9.3. TRANSFORMADAS INTEGRAIS

235

Exemplo 9.13 Ilustramos o resultado conhecido como Primeiro Teorema de Deslocamento: ao multiplicar a funo uma funo por ebt no dom ca ca nio t, a transformada ca deslocada de b unidades para a direita no dom nio s. > laplace( cos(a*t), t, s); s + a2 > laplace( exp(b*t) * cos(a*t), t, s); s2 sb (s b)2 + a2 Exemplo 9.14 Este exemplo ilustra o teorema que arma que o clculo de integrais no a domnio t corresponde ` diviso por s no dom a a nio das transformadas. > laplace(sin(t), t, s); 1 s2 + 1 > laplace(Int(sin(x), x=0..t), t, s); (s2 1 + 1)s

Exemplo 9.15 Exemplicamos o teorema que arma que a multiplicao por t no dom ca nio da transformada corresponde a uma derivao da transformada com relao a s. ca ca > laplace( cos(t), t, s); s s2 + 1 > laplace( t*cos(t), t, s); 1 + s2 (s2 + 1)2 Para o Maple, a funao Heaviside(t) a funo degrau unitrio de t denida por c e ca a Heaviside(t) = 0, se t < 0 1, se t 0

Essa funao muito importante para o estudo das Transformadas de Laplace e comum c e e a expresso Heaviside(t a) aparecer nos livros denotada por u(t a) ou por ua (t). Por a isso, vamos criar um apelido para Heaviside: > alias(Heaviside = U): Assim, Heaviside(t) passa a ser chamada simplesmente de U (t). Vamos tambm abreviar laplace para L e invlaplace por LInv: e > alias(laplace=L, invlaplace=LInv):

236

CAP ITULO 9. GRUPOS, TRANSFORMADAS INTEGRAIS, FUNCOES COMPLEXAS

Exemplo 9.16 Testando os apelidos L e U para laplace e Heaviside, respectivamente: > L(U(t - 9)*cos(t - 9), t, s); e9s s s2 + 1 E agora, testando a Transformada de Laplace Inversa com o apelido LInv: > LInv( s/(s^2 + s + 1), s, t); 1 1 t t 1 1 e 2 cos 3t 3e 2 sin 2 3

1 3t 2

E poss adicionar novas funes `s tabelas de transformadas do pacote inttrans. vel co a Para isso, basta usar um comando addtable(transformada, F, f, varivel F, varivel f). a a Exemplo 9.17 Neste exemplo, instrumos a funo laplace de inttrans para que ela ca use que a transformada de uma certa funo J(t) seja denida como sendo j(s). Ou seja, ca estamos denindo L {J(t)} = j(s). > restart; with(inttrans): > > laplace(J(t), t, s); # Inicialmente, laplace n~o sabe transformar J(t) a laplace(J(t), t, s) > addtable(laplace, J(t), j(s), t, s); > laplace(J(t), t, s); # Agora j sabe quem a transformada de J(t) a e j(s) > laplace(exp(7*t)*J(t), t, s); j(s 7) > laplace(J(4*t), t, s); 1 j 4 9.3.2 1 s 4

Equaoes Diferenciais e a Transformada de Laplace c

Diversos tipos de Equaes Diferenciais Ordinrias podem ser resolvidas com a Transco a formada de Laplace. Em linhas gerais, a resoluo por esse mtodo consiste no clculo ca e a da transformada da equao usando-se a propriedade ca L {F n (t)} = sn L {F (t)} sn1 F (0) sn2 F (0) F n1 (0). Em seguida, isola-se o valor de L {F (t)} e calcula-se a transformada inversa para obter a soluao da equaao dada. c c Podemos fornecer f (n) (t) na forma diff(y(t),t$n) e as condioes de contorno c (n) y (a) = b, , y (a) = c na forma D(y)(a)=b, , (D@@n)(y)(a)=c.

9.3. TRANSFORMADAS INTEGRAIS

237

Exemplo 9.18 Neste exemplo, resolvemos o problema de valor inicial y (t) + 5y (t) + 6y(t) + et = sen t, y(0) = 0, y (0) = 1. Inicialmente, denimos uma varivel auxiliar equacao com a equao dada: a ca > restart; > with(inttrans): > equacao := diff(y(t),t$2) + 5*diff(y(t),t) + 6*y(t) + exp(t) = sin(t); equacao := 2 y(t) + 5 y(t) + 6y(t) + exp(t) = sin(t) 2 t t

Calculamos a transformada da equacao: > Leq := laplace(equacao, t, s); Leq := s (s laplace(y(t), t, s) y(0)) D(y)(0) + 5s laplace(y(t), t, s) 5y(0)+ 1 1 6 laplace(y(t), t, s) + = 2 s1 s +1 Substitumos as condies de contorno dadas e trocamos laplace(y(t),t,s) por f(s): co > LeqS := subs(laplace(y(t),t,s)=f(s), y(0)=0,D(y)(0)=1, Leq); LeqS := s2 f (s) 1 + 5sf (s) + 6f (s) + Isolamos o valor de f(s): > f(s) := solve(LeqS, f(s)); f (s) := s3 + 2s 2s2 3 s5 + 2s3 + 4s4 2s2 + s 6 1 1 = 2 s1 s +1

Finalmente, calculamos a transformada inversa de f(s) que a soluo do problema e ca proposto: > y(t) = invlaplace(f(s),s,t); y(t) = 1 t 27 (3t) 23 (2t) 1 1 e e + e cos(t) + sin(t) 12 20 15 10 10

Para obter a soluo da equao sem as passagens intermedirias (como foi feito neste ca ca a exemplo) basta usar um comando dsolve, acrescentando uma opo method=laplace: ca > dsolve({equacao, y(0)=0, D(y)(0)=1}, y(t), method=laplace);

238

CAP ITULO 9. GRUPOS, TRANSFORMADAS INTEGRAIS, FUNCOES COMPLEXAS

9.3.3

Transformadas de Fourier

A Transformada de Fourier F {F (t)} e sua inversa F 1 {f ()} so denidas pelas a seguintes integrais imprprias: o

F {F (t)} =

F (t)eit dt

F 1 {f ()} = O Maple conrma essas denioes: c

1 2

f ()ei d

> with(inttrans): > convert(fourier(F(t), t, alpha),int);


F (t)e(It) dt

> convert(invfourier(f(alpha), alpha, t),int);

1 2

f ()e(It) d

1 Exemplo 9.19 Neste exemplo calculamos F { 1 } e F 1 { 7 }. Nas respostas, aparecem t funes de Heaviside (degrau unitrio). co a

> with(inttrans): > fourier(1/t, t, alpha); I(Heaviside() Heaviside()) > > invfourier(1/alpha^7, alpha, t); 1 It6 (Heaviside(t) + Heaviside(t)) 1440 Exemplo 9.20 Neste exemplo, calculamos inicialmente F 1 { sen }. Na resposta aparece uma combinao de funes degrau unitrio. ca co a > G := invfourier(sin(alpha)/alpha, alpha, t); 1 1 1 1 G := Heaviside(t + 1) Heaviside(t 1) Heaviside(t 1) + Heaviside(t + 1) 4 4 4 4 Digitando-se a seguinte linha de comando, constru mos o grco dessa funo (Figura a ca 9.5). > plot(G, t=-5..5, thickness=4, discont=true, tickmarks=[4,3]):

9.4. FUNCOES COMPLEXAS

239

Figura 9.5:

0.4

0.2

2 t

9.4

Funoes Complexas c

O Maple dispe de um conjunto de funoes bsicas para manipulaao de nmeros o c a c u complexos. A seguir, listamos e exemplicamos as que normalmente so mais utilizadas. a abs(z) Valor absoluto de z > abs(3 + 4*I); 5 argument(z) Argumento de z > argument(3 + 4*I); arctan conjugate(z) Conjugado de z > conjugate(3 + 4*I); 3 4I polar(z) Converte para a forma polar > polar(3 + 4*I); polar 5, arctan 4 3 4 3

240

CAP ITULO 9. GRUPOS, TRANSFORMADAS INTEGRAIS, FUNCOES COMPLEXAS

evalc(expresso) Calcula valor numrico complexo da expresso dada a e a > evalc(polar(5, arctan(4/3))); 3 + 4I Re(z) Parte real de z > Re(3 + 4*I); 3 Re(z) Parte imaginria de z a > Im(3 + 4*I); 4 A funao evalc utilizada para se calcular o valor principal de uma expresso formada c e a por funoes ou nmeros complexos. c u Alm dessas, as funes raiz quadrada, exponencial, logaritmo, trigonomtricas, hie co e perblicas e suas inversas podem ter argumentos complexos, conforme mostramos na o seguinte seqncia de exemplos: ue > sqrt(-25); # raiz quadrada de -25 5I > root[3](-8.0); # raiz cbica de -8 u 1.000000000 + 1.732050807I > (1 + I)^20 + (1 - I)^20; # soma de pot^ncias e 2048 > evalc(2^I); # 2 elevado a i cos(ln(2)) + I sin(ln(2)) > evalc(I^I); # i elevado a i

e > ln(-1); # logaritmo natural de -1

1 2

I > log10(-2); # logaritmo decimal de -2

9.4. FUNCOES COMPLEXAS

241

ln(2) + I ln(10) > evalc(arcsin(2)); # arco-seno de 2 12 I ln(2 + 3)

> Im(exp(2*I)); # Parte imaginria de e elevado a i a sin(2) > Re(cos(3 + 4*I)); # Parte real do cosseno de 3+4i cos(3) cosh(4) > evalc(sin(1 + 7*I)); # seno de 1+7i sin(1) cosh(7) + I cos(1) sinh(7) As funoes de outros pacotes (como o LinearAlgebra) admitem operaoes com nmeros c c u complexos, conforme podemos ver nos seguintes exemplos. Exemplo 9.21 Clculo do determinante e do polinmio caracter a o stico de uma matriz complexa. > with(LinearAlgebra): > Z:= Matrix([[I, 3-I], [5, 2+3*I]]); Z := > Z^3; 55 + 64I 27 + 21I 30 + 45I 49 + 94I > Determinant(Z); 18 + 7I > CharacteristicPolynomial(Z, x); 18 + 7I 4Ix 2x + x2 Exemplo 9.22 Clculo dos autovalores complexos e da forma de Jordan de uma matriz a M. > with(LinearAlgebra): > M := Matrix([[3, 2, 0, 0], [-2, 3, 0, 0], [0, 0, 1, -5], [0, 0, 5, 1]]); I 3I 5 2 + 3I

242

CAP ITULO 9. GRUPOS, TRANSFORMADAS INTEGRAIS, FUNCOES COMPLEXAS

3 2 M := 0 0 > p := Eigenvalues(M, output=list);

2 3 0 0

0 0 0 0 1 5 5 1

p := [3 + 2I, 3 2I, 1 + 5I, 1 5I] > J := JordanForm(M); 1 + 5I 0 0 0 0 1 5I 0 0 J := 0 0 3 + 2I 0 0 0 0 3 2I

Exemplo 9.23 O comando fsolve calcula tambm solues complexas se for acrescene co tado um parmetro complex. No caso de equaes polinomiais ele encontra todas as a co ra zes, conforme mostramos a seguir com a equao x7 + 8x4 x3 + 101x 9 = 0. ca > fsolve(x^7 + 8*x^4 - x^3 + 101*x - 9 = 0, x); .08911092197 > fsolve(x^7 + 8*x^4 - x^3 + 101*x - 9 = 0, x, complex); 2.012925726 .8034270247I, 2.012925726 + .8034270247I, .08911092197, .2788769287 2.149930768I, .2788769287 + 2.149930768I, 1.689493337 1.311603271I, 1.689493337 + 1.311603271I Exemplo 9.24 O comando convert pode ser usado para converter funes trigonomtricas co e em combinaes de exponenciais e logaritmos complexos. co > convert(sin(x), exp); 1 1 I e(Ix) (Ix) 2 e > convert(arccos(x), ln); I ln(x + I 1 x2 ) 1 I(ln(1 Ix) ln(1 + Ix)) 2

> convert(arctan(x), ln);

Apndice A e

Os pacotes do Maple
O Maple possui cerca de 320 funes ou comandos na biblioteca padro, mais outros co a 1670 distribu dos por vrios pacotes. a Listamos aqui todos os pacotes do Maple, verso 7, com uma breve descriao de cada a c um. Listamos tambm entre parnteses a quantidade de funoes que cada pacote contm. e e c e Para maiores informaes sobre determinado pacote, use o help on line digitando um co ponto de interrogaao seguido do nome do pacote, por exemplo, ?algcurves, c ?CurveFitting, etc. Isso mostra uma lista com todas as funoes do pacote. c Para usar as funoes de um pacote deve-se usar antes um comando with(pacote) ou c usar o nome da funao na forma pacote[funo] (veja a seao 1.18). c ca c algcurves Curvas algbricas (17) e codegen Geraao de cdigos para outras linguagens (26) c o combinat Funoes combinatrias (32) c o combstruct Estruturas combinatrias (9) o context Ferramentas para construao de menus (9) c CurveFitting Curvas denidas por conjuntos de pontos (7) DEtools Ferramentas para resoluo de equaes diferenciais (103) ca co dialg Algebra diferencial (26) diorms Formas diferenciais (12) Domains Criao de dom ca nios de computao ca ExternalCalling Chamadas a funes externas (2) co nance Matemtica nanceira (12) a GaussInt Inteiros gaussianos (29) genfunc Funoes geradoras racionais (12) c geom3d Geometria euclidiana tridimensional (164)
243

244

APENDICE A. OS PACOTES DO MAPLE

geometry Geometria euclidiana plana (112) Groebner Bases de Groebner (22) group Grupos de permutaes (34) co inttrans Transformadas integrais (13) liesymm Simetrias de Lie em sistemas de EDP (30) linalg Algebra Linear com estruturas de dados array (105) LinearAlgebra Algebra Linear com estruturas de dados rtable (103) LinearFunctionalSystems Sistemas de equaes com funcionais lineares (11) co LinearOperators Equaes funcionais lineares (14) co ListTools Ferramentas para manipulaao de listas (19) c LREtools Relaes de recorrncia lineares (18) co e MathML Importaao e exportaao de dados no formato MathML (5) c c Matlab Conexes com o Matlab (19) o networks Redes de grafos (75) numapprox Aproximaao numrica (14) c e numtheory Teoria dos nmeros (46) u Ore algebra Algebras de operadores lineares (18) OrthogonalSeries Sries de polinmios ortogonais (16) e o orthopoly Polinmios ortogonais (6) o padic Nmeros p-dicos (9) u a PDEtools Resoluao de EDPs (15) c plots Ferramentas para construo de grcos (52) ca a plottools Objetos grcos bsicos (35) a a PolynomialTools Ferramentas para manipulao com polinmios (10) ca o powseries Sries de potncias (22) e e process Multi processamento no Unix (8) RandomTools Objetos gerados aleatoriamente (29) RationalNormalForms Formas racionais normais (5) RealDomain Dom nio real (38)

245

simplex Otimizao linear (17) ca Sockets Ferramentas para comunicaao em redes (21) c SolveTools Ferramentas para resoluao de equaoes (5) c c Spread Criaao de planilhas (20) c stats Funoes para Estat c stica (10) StringTools Manipulaao de strings (64) c student Funoes uteis no ensino de Clculo (32) c a sumtools Clculo de somatrios (10) a o tensor Tensores e aplicaoes ` Relatividade Geral (51) c a Units Converso de unidades (19) a XMLTools Ferramentas para documentos no formato XML (58)

246

APENDICE A. OS PACOTES DO MAPLE

Apndice B e

Outros itens
B.1 Salvando e recuperando expresses o

Durante uma sesso de trabalho com o Maple, pode-se salvar em disco a sesso toda a a ou somente uma parte dela. Para salvar as expresses x, y, z, . . . escolhidas, deve-se usar o um comando save x, y, z, . . . , Nome do Arquivo . Depois, essas expresses podem ser recuperadas com um comando o read Nome do Arquivo Exemplo B.1 Vamos denir trs variveis eq, S e R e salvar seus valores em um arquivo e a c:\teste.m. > eq := x^10 + 1000*x^3 - x + 1999; eq := x10 + 1000x3 x + 1999 > S := fsolve(eq); S := 2.638858805, 1.262126102 > R := convert(sin(Pi/40), radical); 1 1 R := 2 2 2 5+ 5+ 8 2 > save eq, S, R, "c:\\teste.m"; Vamos agora limpar todas as variveis da memria com um comando restart. a o > restart; > eq; eq > S; S
247

2+

1 1 5+ 4 4

248

APENDICE B. OUTROS ITENS

> R; R E agora, vamos recuperar as variveis que foram salvas em c:\teste.m: a > read "c:\\teste.m"; Conferindo os valores de cada varivel: a > R; 1 8 > S; 2.638858805, 1.262126102 > eq; x10 + 1000x3 x + 1999 Pode-se tambm salvar dessa forma funoes e procedimentos, basta fornecer seus nomes e c como parmetros do save. a 2 1 2 2 5+ 5+ 2 2+ 2 1 1 5+ 4 4

B.2

Gerando expresses nos formatos de outros programas o

O Maple gera arquivos que sejam compat veis com outros programas, como por exemA plo arquivos no formato do L TEX, arquivos que possam ser incorporados em programas em C ou em FORTRAN ou arquivos em HTML para serem anexados a pginas da Ina ternet. A Para gerar uma listagem da expresso X nos formato do L TEX, C ou FORTRAN, a basta usar um comando latex(X), C(X) ou fortran(X), respectivamente. O comando latex faz parte da biblioteca padro, logo no precisa chamar nenhum a a pacote antes de utiliz-lo. a
A Exemplo B.2 Dadas as expresses L e M , escrev-las no formato do LTEX. o e

> L := Limit((x + 1)/sin(x + 1), x = -1); L := lim > latex(L); \lim _{x\rightarrow -1}{\frac {x+1}{\sin \left( x+1 \right) }} > > latex(L, "arquivo.tex"); # salva L em arquivo.tex > > M := Matrix([[1, 2], [3, 4]]); x+1 x1 sin (x + 1)

B.3. CALCULANDO O TEMPO GASTO NA EXECUCAO

249

M := > latex(M);

1 2 3 4

\left[ \begin {array}{cc} 1&2\\\noalign{\medskip}3&4\end {array} \right] Os comandos C e fortran fazem parte do pacote codegen. Portanto, recomendvel e a usar um with(codegen) antes de us-los. a Exemplo B.3 Listar uma expresso dada no formato das linguagens de programao C a ca e FORTRAN. > with(codegen): > expr := x^4 + abs(cos(x + sqrt(x)))/(x^2 + 1); | cos(x + x)| 4 expr := x + x2 + 1 > C(expr); t0 = x*x*x*x+fabs(cos(x+sqrt(x)))/(x*x+1.0); > fortran(expr); t0 = x**4+abs(cos(x+sqrt(x)))/(x**2+1)

B.3

Calculando o tempo gasto na execuo ca

Para saber qual foi o tempo gasto na execuao de determinado comando basta usar c um time(comando). Exemplo B.4 Calcular o tempo gasto na execuo do seguinte comando fsolve: ca > time(fsolve(x^40 + 4*x^21 - 3*x^7 + 1 =0, x, complex)); .099 Para determinar o tempo gasto na execuao de um grupo de comandos, pode-se criar c uma varivel auxiliar e atribuir a ela um comando time() para guardar o momento a inicial da execuao. Depois, no nal da execuo, chamar o time() novamente e fazer a c ca diferena entre o momento inicial e o momento nal da execuo. c ca Exemplo B.5 Neste exemplo calculamos o tempo gasto para contar e mostrar uma relao ca com todos os pares de primos da forma (i, i + 2) com 1 i 10000.

250

APENDICE B. OUTROS ITENS

> > > > > > > > > >

inicio := time(): quant := 0: for i from 1 to 10000 do if isprime(i) and isprime(i + 2) then print("( " || i || ", " || (i + 2) || ") s~o primos"); a quant := quant + 1; end if; end do; fim := time(): TempoGasto := fim - inicio;

Outra opo para vericar o tempo de computao gasto usar um showtime(). ca ca e Neste caso, o aviso do Maple muda temporariamente para O1 :=, O2 :=, O3 :=, . . . . Para encerrar o showtime deve-se usar um comando off. O showtime mostra o tempo gasto e a quantidade de bytes utilizada na execuao de cada comando. c Exemplo B.6 Exemplicando o uso do showtime. > showtime(); O1 := int( 1/(x*(x^10 + 1)), x); ; 1 1 ln(x2 + 1) ln(x8 x6 + x4 x2 + 1) 10 10 time = 0.35, bytes = 245042 ln(x) O2 := series(arctan(x), x=0, 8); 1 1 1 x x3 + x5 x7 + O(x8 ) 3 5 7 time = 0.03, bytes = 11934 O3 := off; >

B.4

Listagem de funoes dos pacotes do Maple c

E poss listar a maior parte das funoes pr-denidas do Maple. Para isso, basta vel c e ajustar a varivel verboseproc para 2 ou 3 atravs do comando interface. Depois, listaa e mos a funao ou procedimento com um comando print, conforme fazemos nos exemplos c a seguir. Exemplo B.7 Listar o procedimento group[Sylow]. Para isso, iniciamos ajustando o valor de verboseproc. > restart; > interface(verboseproc=3);

B.4. LISTAGEM DE FUNCOES DOS PACOTES DO MAPLE

251

Agora, usamos um comando print para listar o procedimento desejado. Devido ao seu tamanho, apresentamos aqui somente uma pequena parte da listagem. > print(group/Sylow); proc(pg, p) local Cg, P, U, c, el, g, ij, l, lm, m, m1, m2, n, oCg, ord, pel, q, sCg, u, ul, v1, U1, mh, m1h, m2h, mh1, m1h1, m2h1, cP ; option Copyright (c) 1990 by the University of Waterloo. A\ ll rights reserved.; if not type(pg, function) or op(0, pg) <> permgroup then error "wrong type of arguments" end if; ord := group[grouporder](pg); if not isprime(p) or ord mod p <> 0 then error "the se\ cond argument must be a prime divisor of the order\ of the group" end if; n := op(1, pg); pel := group/random(pg, p, n); mh := ifactor(ord); if type(mh, *) then mh1 := {op(mh)} else mh1 := {mh} end if; ... ... ... ... ...

return P end proc Exemplo B.8 Listar o procedimento laplace do pacote inttrans. > interface(verboseproc=3); > print(inttrans/laplace); proc(expr::{algebraic, equation, set}, t::name, s::algebraic) local opt, rats, soln, transforms, i; option Copyright (c) 1991 by the University of Waterloo. A\ ll rights reserved.; userinfo(3, laplace, Entering top-level laplace with , expr, t, s); if nargs = 4 then opt := args[4] else opt := INT end if ; if not type(s, freeof(t)) then error "Third parameter \ # se ainda n~o tiver sido usado antes ... a

252

APENDICE B. OUTROS ITENS

%1 must be free of the second parameter %2", s, t end if; ... ... ... ... ...

soln := subs(laplace/internal = laplace, invlaplace/internal = invlaplace, soln); procname(args[1 .. nargs]) := soln; soln end proc Devido ` sua extenso, a listagem apresentada mostra apenas o in a a cio e o nal do procedimento.

Referncias Bibliogrcas e a
[1] Heck, A. (1996) Introduction to Maple, Second Edition, Springer. [2] Portugal, R. (1996) Introduo ao Maple, CBPF, Rio de Janeiro. ca [3] Costa, I. M., Salvador, J. A., Malagutti, P. L. A., Paterlini, R. R., Furuya, Y. K. S., Baldin, Y. Y. (1999) Matemtica Universitria Bsica com Maple V, Universidade a a a Federal de So Carlos. a [4] Bauldry, W. C., Evans, B., Johnson, J. (1995) Linear Algebra with Maple, John Wiley & Sons, Inc., New York. [5] Waterloo Maple Inc. (2001) Maple 7 Programming Guide. [6] Waterloo Maple Inc. (2001) Maple 7 Learning Guide.

253

Indice Remissivo
Algebra Linear, 49 reas, 172 a ajuda, 4 and, 10 animaes, 108 co apstrofos, 12 o aspas, 12 atribuies, 7 co autovalores, 72 autovetores, 72 avaliaao, 9 c barra de ferramentas, 3 bases, 67 C, 248 clculo, 115, 157 a ciclos disjuntos, 225 circunferncias, 175 e combine, 20 comentrio, 6 a concatenao, 16 ca congruncias, 36 e conjuntos, 13 constantes, 7 convert, 47 curl, 138 curvas de n vel, 102 D, 128 denom, 48 DEplot, 156 derivadas, 122 funes impl co citas, 130 ordem superior, 125 vrias variveis, 126 a a determinante, 58
254

DEtools, 148 Di, 124 di, 122 diverge, 138 divergente, 138 Doubleint, 136 dsolve, 147 EDO, 147 EDP, 154 equaoes, 30 c resoluao numrica, 34 c e soluoes inteiras, 35 c Equaoes diferenciais, 147 c e transformada de Laplace, 236 grcos, 156 a sries, 152 e sistemas, 151 esferas, 192 expand, 25 expanso, 25 a expresses lgicas, 10 o o extruturas de repetiao, 198 c factor, 27 fatoraao, 27 c em corpos nitos, 29 em extenso dos racionais, 28 a for, 198 Forma de Jordan, 77 fortran, 248 fsolve, 34 funoes, 39 c complexas, 239 compostas, 42 cont nuas, 120 imagem direta, 43 inversas, 42

INDICE REMISSIVO

255

funes hiperblicas, 12 co o funes matemticas, 11 co a funes trigonomtricas, 12 co e geom3d, 186 geometria anal tica, 173 geometry, 173 global, 215 grcos, 83 a coordenadas polares, 96 denidos implicitamente, 93 denidos parametricamente, 95 opes, 84 co salvando em arquivo, 113 tridimensionais, 97 grad, 138 gradiente, 138 grupos, 225 help, 4 if, 195 implies, 10 inequaes, 30 co Int, 132 int, 132 integrao, 166 ca fraes parciais, 171 co por partes, 169 por substituiao, 166 c integrais, 132 denidas, 134 duplas, 136 imprprias, 134 o triplas, 136 intfactor, 148 inttrans, 234 laplacian, 138 laplaciano, 138 latex, 248 lhs, 30 Limit, 116 limit, 115 limites, 115 laterais, 118

no innito, 117 vrias variveis, 119 a a LinearAlgebra, 49 listas, 13 local, 215 map, 43 matrizes, 54 escalonadas, 63 especiais, 57 inversas, 57 transpostas, 58 menu, 2 ncleo, 70 u not, 10 numer, 48 odeadvisor, 148 operaoes aritmticas, 6 c e operador diferencial, 128 operador seta, 39 or, 10 ortogonalizaao, 80 c pacotes, 18, 243 palettes, 4 palhetas, 4 permgroup, 226 permutaoes, 225 c planos, 187 polinmio o caracter stico, 71 minimal, 76 polinmios, 44 o pontos, 174, 187 powcreate, 144 powseries, 143 problemas, 157 Problemas de valor inicial, 150 proc, 211 procedimentos, 211 recursivos, 222 Product, 142 product, 142 produtrios, 140 o

256

INDICE REMISSIVO

programao, 195 ca racionalizao, 47 ca read, 247 retas, 174, 187 return, 212 rhs, 30 RootOf, 34 rotacional, 138 sries e de Fourier, 231 de potncias, 140 e de Taylor, 143 save, 247 seqncias, 13 ue series, 143 showtime, 249 simplicao, 20 ca simplify, 20 sistemas, 36 sistemas lineares, 60 solve, 30 somatrios, 140 o student, 157 subs, 19 substituio, 19 ca Sum, 140 sum, 140 superf cies parametrizadas, 106 taylor, 143 time, 249 tipos, 6, 206 tpsform, 144 trao, 58 c transformaes lineares, 68 co transformada de Fourier, 238 de Laplace, 234 Tripleint, 137 tubeplot, 108 type, 208 unapply, 39 variveis, 7, 215 a

globais, 215 locais, 215 verboseproc, 250 vetores, 50 LI, 64 whattype, 207 while, 202 with, 18, 243 xor, 10

Lenimar Nunes de Andrade nasceu em Patu, uma pequena cidade do alto serto do Rio Grande do a Bacharel em Matemtica pela UniverNorte. E a sidade Federal da Para (1982), Mestre em Maba temtica pela Universidade Federal de Pernambuco a (1987) e Doutor em Engenharia Eltrica pela Unie versidade Estadual de Campinas (1998) e professor da Universidade Federal da Para desde maro de ba c 1984. Desde 1988 vem se interessando por linguagens de programao de computadores. ca

Potrebbero piacerti anche