Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Curso de Maple, Notas de estudo de Administração Empresarial

apostila curso maple

Tipologia: Notas de estudo

Antes de 2010
Em oferta
50 Pontos
Discount

Oferta por tempo limitado


Compartilhado em 09/02/2008

danilo-luedke-pereira-12
danilo-luedke-pereira-12 🇧🇷

1 documento

1 / 86

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Introdu¸ao ao Maple
Renato Portugal1
Coordena¸ao de Ciˆencia da Computa¸ao
Laborat´orio Nacional de Computa¸ao Cient´ıfica
Av. Get´ulio Vargas, 333
25651-070, Quitandinha, Petr´opolis-RJ
c
Copyright, Renato Portugal, 2002.
1Portugal@Lncc.Br
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
Discount

Em oferta

Pré-visualização parcial do texto

Baixe Curso de Maple e outras Notas de estudo em PDF para Administração Empresarial, somente na Docsity!

Introdu¸c˜ao ao Maple

Renato Portugal^1

Coordena¸c˜ao de Ciˆencia da Computa¸c˜ao

Laborat´orio Nacional de Computa¸c˜ao Cient´ıfica

Av. Get´ulio Vargas, 333

25651-070, Quitandinha, Petr´opolis-RJ

©^ c Copyright, Renato Portugal, 2002.

(^1) Portugal@Lncc.Br

Contents

Chapter 1

Introdu¸c˜ao

1.1 Aspectos do Sistema Maple

O Maple ´e uma linguagem de computa¸c˜ao que possui quatro aspectos gerais que s˜ao:

  • Aspectos alg´ebricos
  • Aspectos num´ericos
  • Aspectos gr´aficos
  • Aspectos de programa¸c˜ao Todos estes aspectos est˜ao integrados formando um corpo ´unico. Por exemplo, a partir de um resultado alg´ebrico, uma an´alise num´erica ou gr´afica pode imediatamente ser feita. Em geral, na an´alise de um problema, v´arias ferramentas s˜ao necess´arias. Se estas ferramentas n˜ao estiverem no mesmo software, um usu´ario enfrentar´a uma s´erie de dificuldades para compatibilizar a sa´ıda de um software com a entrada de outro, al´em de ser obrigado a familiarizar-se com diferentes nota¸c˜oes e estilos. E claro que o Maple n˜´ ao elimina completamente o uso de linguagens num´ericas ou gr´aficas. Em aplica¸c˜oes mais elaboradas pode ser necess´ario usar recursos de linguagens como C ou Fortran. O Maple tem interface com estas linguagens no sentido de que um resultado alg´ebrico encontrado no Maple pode ser convertido para a sintaxe da linguagem C ou Fortran 77. Os aspectos novos trazidos pelo Maple juntamente com outros sistemas alg´ebricos s˜ao a computa¸c˜ao alg´ebrica e a programa¸c˜ao simb´olica. A computa¸c˜ao alg´ebrica ´e uma ´area que teve um forte impulso nas d´ecadas de 60 e 70, onde foram criados importantes algoritmos para integra¸c˜ao anal´ıtica e fatora¸c˜ao de polinˆomios. Estes algoritmos est˜ao baseados na Algebra Moderna, que guia toda a implementa¸´ c˜ao do n´ucleo de qualquer sistema alg´ebrico. O Maple ´e uma linguagem de programa¸c˜ao simb´olica. Os construtores deste sistema optaram em desenvolver um pequeno n´ucleo escrito na linguagem C gerenciando as opera¸c˜oes que necessitam de maior velocidade de processamento, e a partir deste n´ucleo, desenvolveram uma nova linguagem. O pr´oprio Maple foi escrito nesta nova linguagem. Mais do que 95% dos algoritmos est˜ao escritos na linguagem Maple, estando acess´ıveis ao usu´ario. Esta op¸c˜ao dos seus arquitetos ´e muito saud´avel, pois uma linguagem que pode gerar todo um sistema alg´ebrico do porte do Maple certamente ´e uma boa linguagem de programa¸c˜ao. Neste curso faremos uma introdu¸c˜ao a alguns destes aspectos e analisaremos como

4 CHAPTER 1. INTRODUC¸ AO˜

eles se inter-relacionam. As vers˜oes utilizadas foram Maple 6 e 7.

1.2 A Worksheet

Nos microcomputadores com o Maple instalado, a worksheet ´e disparada clicando-se no ´ıcone do programa. Em outros sistemas, ela ´e disparada pelo comando xmaple (ou maple) dado no sinal de pronto do sistema operacional. Ela ´e o principal meio para gravar e ler os trabalhos desenvolvidos no Maple. A worksheet utiliza os recursos de janelas para facilitar a intera¸c˜ao do usu´ario com o Maple. Por exemplo, um comando batido errado pode ser facilmente corrigido voltando- se o cursor para a posi¸c˜ao do erro e substituindo os caracteres errados. N˜ao h´a ne- cessidade de digitar todo o comando novamente. Na worksheet, o usu´ario pode tecer coment´arios, colar gr´aficos e gravar todo o conjunto em um arquivo para ser lido e even- tualmente modificado posteriormente. A worksheet pode ser impressa selecionando-se a op¸c˜ao Print... depois de clicar em File , ou pode ser convertida em um arquivo LATEX^1. Um exemplo de uso das worksheets ´e este curso. Ele foi desenvolvido em worksheets e posteriormente convertido em LATEX para ser impresso. A worksheet ´e um caderno virtual de anota¸c˜oes de c´alculos. A vantagem do caderno virtual ´e que qualquer coisa j´a escrita pode ser modificada sem necessidade de fazer outras altera¸c˜oes, pois o trabalho se ajusta automaticamente `as mudan¸cas. Essa id´eia ´e a mesma dos processadores de textos que substitu´ıram as m´aquinas de escrever. A worksheet n˜ao ´e um processador de textos. Ela funciona de maneira satisfat´oria como um editor de textos, e a parte referente ao processamento de textos pode ser feita em LATEX. No desenvolvimento de um trabalho usando a worksheet, ´e importante que ele seja feito em ordem e que todo rascunho seja apagado assim que cumprido seu objetivo. O comando restart pode encabe¸car o trabalho. Depois de gravar a worksheet, o usu´ario pode sair do Maple. No momento em que a worksheet ´e lida novamente, os resultados que aparecem na tela n˜ao est˜ao na mem´oria ativa do Maple. E necess´´ ario processar os comandos novamente para ativar os resultados. A worksheet ´e gravada com a termina¸c˜ao .mws. A worksheet tem quatro tipos de linhas: 1. linhas de entrada de comandos que usam a cor vermelha e s˜ao precedidas pelo sinal de pronto “>”, 2. linhas de sa´ıda dos comandos na cor azul, 3. linhas de texto na cor preta e 4. linhas de gr´afico. Algumas dessas linhas podem ser convertidas umas nas outras. Os bot˜oes Copy , Paste e Cut s˜ao bastantes ´uteis neste contexto. Nos casos que envolvem tipos diferentes de linha, os bot˜oes Copy as Maple Text e Paste as Maple Text podem ser o ´unico meio de executar a tarefa. As linhas de sa´ıda usam recursos gr´aficos das janelas para escrever as letras, os s´ımbolos e desenhar os gr´aficos. O sinal de integral aparece na tela como

∫ , o somat´orio como

∑ e as letras gregas como α, β, γ, · · ·. Existe uma op¸c˜ao que faz com que as linhas de sa´ıda usem os mesmos caracteres do teclado. Essa op¸c˜ao ´e ´util para gravar resultados em um arquivo ASCII (acrˆonimo de American Standard Code for Information Interchange). A worksheet possui diversos recursos para escrever textos. E poss´´ ıvel criar se¸c˜oes e sub-se¸c˜oes. As letras podem ter diversos tamanhos e estilos, e podem ser em (^1) LATEX ´e um processador de textos de dom´ınio p´ublico. Veja o site http://www.latex-project.org.

Chapter 2

No¸c˜oes B´asicas

Para obter os melhores resultados, este texto dever´a ser lido junto com o uso do Maple, de forma que os exemplos possam ser testados. Neste caso, as d´uvidas e as dificuldades ficar˜ao mais vis´ıveis.

2.1 N´umeros

O Maple usualmente trabalha com os n´umeros de maneira exata. Nenhuma aproxima¸c˜ao ´e feita:

(^) (34*3 + 7/11)^2; 1274641 121 Podemos ver que o resultado ´e um n´umero racional. Para obter uma aproxima¸c˜ao decimal, devemos usar o comando evalf (evaluate in floating point): (^) evalf(%);

  1. 22314 O sinal de percentagem % guarda o valor do ´ultimo resultado calculado, que n˜ao ´e neces- sariamente o resultado do comando imediatamente acima, pois na worksheet podemos processar os comandos numa ordem diferente da que eles aparecem na tela. O ´ultimo re- sultado tem 10 d´ıgitos (valor default). Podemos calcular com mais d´ıgitos significativos, por exemplo, com 50 d´ıgitos:

(^) evalf50;

  1. 223140495867768595041322314049586776859504132 Outra maneira de ter resultados com casas decimais, ´e entrar pelo menos um n´umero com casa decimal:

(^) 4/3*sin(2.);

  1. 212396569 Por´em, como podemos aumentar o n´umero de casas, se n˜ao estamos usando o comando evalf? Para isso devemos atribuir o n´umero de d´ıgitos desejado `a vari´avel Digits. Pri- meiro, vamos verificar seu valor default, e depois mud´a-lo:

(^) Digits; 10

2.1. N UMEROS´ 7

Digits := 20; Digits := 20

Vejamos agora o n´umero de Euler com vinte d´ıgitos:

(^) exp(1.);

  1. 7182818284590452354 No Maple, podemos trabalhar com n´umeros irracionais:

(^) ((1+sqrt(5))/2)^2;

(

5)^2

(^) expand(%); 3 2

Observe que a entrada n˜ao foi simplificada at´e que isto fosse pedido. Esta ´e uma regra do Maple. As express˜oes n˜ao s˜ao simplificadas a menos que o usu´ario pe¸ca. Somente s˜ao feitas as simplifica¸c˜oes mais elementares, envolvendo as opera¸c˜oes aritm´eticas b´asicas. Vamos ver agora um exemplo mais elaborado:

(^) sin(2Pin)/5!; 1 120

sin(2 π n)

Pedimos para o Maple calcular sin(2 π n) e dividir por fatorial de 5. Poder´ıamos achar que o resultado deveria ser zero, j´a que o seno de um m´ultiplo de π ´e zero. Com um pouco de reflex˜ao mudar´ıamos de opini˜ao, j´a que n ´e uma letra sobre a qual nada foi dito. N˜ao ´e razo´avel esperar que o Maple assuma que ela ´e uma vari´avel inteira. Para o Maple, ela ´e uma letra como qualquer outra. A princ´ıpio, todas est˜ao em p´e de igualdade. Isso pode ser mudado com o seguite comando:

(^) assume(n,integer); (^) sin(2Pin)/5!; 0 (^) cos(Pi*n); (−1)n˜

De agora em diante, o Maple tratar´a n como uma vari´avel inteira. Ela passa a ser mo- strada na tela com um til, da forma n˜, para o usu´ario saber que essa vari´avel tem uma determinada propriedade atribu´ıda pelo comando assume. E poss´´ ıvel inibir o apareci- mento do til nessas vari´aveis com o comando

(^) interface(showassumed=0);

Outro detalhe que podemos observar do ´ultimo exemplo, ´e que o n´umero π ´e escrito com P mai´usculo. A vari´avel pi com p min´usculo n˜ao tem nenhuma rela¸c˜ao com a constante matem´atica π. Vamos retirar a declara¸c˜ao antes de continuar:

(^) n := ’n’; n := n Agora, vamos ver um exemplo com n´umeros complexos. Queremos encontrar as ra´ızes c´ubicas de: (^) z := (-8)^(1/3); z := (−8)^1 /^3

2.3. AVALIAC¸ AO COMPLETA˜ 9

O resultado tamb´em pode ser atribu´ıdo a uma vari´avel:

(^) solucao1 := %[1];

solucao1 := −

(^) solucao2 := %%[2]; solucao2 := −

Podemos confirmar que solucao1 ´e de fato uma solu¸c˜ao da equa¸c˜ao:

(^) expand(subs(x=solucao1, equacao)); 0 = 0 Note que o sinal de igualdade “=” tem um papel bem diferente do sinal de atribui¸c˜ao “:=”. O sinal de igualdade n˜ao modifica o valor de uma vari´avel. Vejamos:

(^) y = x + 1; y = x + 1

O valor de y continua sendo ele pr´oprio:

(^) y;

y

Vejamos agora:

(^) y := x + 1; y := x + 1 (^) y; x + 1

Para retirar a atribui¸c˜ao (“limpar a vari´avel”), usa-se

(^) y:=’y’; y := y

De modo equivalente:

(^) unassign(’y’);

2.3 Avalia¸c˜ao Completa

Vamos fazer uma s´erie de atribui¸c˜oes em cadeia:

(^) A := B; A := B (^) B := C; B := C (^) C := 3; C := 3

Agora, observe o valor que o Maple retorna para a vari´avel A:

(^) A; 3

10 CHAPTER 2. NOC¸ OES B ˜ ASICAS´

O que aconteceu foi que A foi avaliado como sendo B que por sua vez foi avaliado como sendo C que foi avaliado como sendo 3. Isso se chama “avalia¸c˜ao completa” de uma vari´avel. Existem v´arias excess˜oes a essa regra como veremos ao longo deste texto. Estas excess˜oes s˜ao muito importantes. Podemos adiantar uma, a saber, no comando abaixo a vari´avel A n˜ao ser´a avaliada:

(^) A := 10; A := 10

Caso A tivesse sido considerado com o valor 3, ter´ıamos o comando 3 :=10, o que n˜ao ´e admitido. Existe uma maneira de retardar a avalia¸c˜ao de uma vari´avel. Sabemos que o comando A; vai retornar 10. Por´em, podemos retardar esta avalia¸c˜ao:

(^) ’A’; A (^) %; 10

Isso explica por que o comando A:=’A’; “limpa” a vari´avel A. O recurso de retardar a avalia¸c˜ao, seja de uma vari´avel, seja de um comando, ´e utilizado com muita frequˆencia.

2.4 Tipos de Objetos

Para usar o Maple de maneira eficiente, ´e necess´ario conhecer a forma de alguns objetos desta linguagem. Outro nome para objetos do Maple comumente usado ´e estrutura de dados. Os principais s˜ao as listas, conjuntos, arrays, sequˆencias e tabelas. V´arios comandos do Maple tˆem estes objetos como resultado. Podemos precisar selecionar um elemento do resultado e, para isto, ´e necess´ario compreender a estruturas destes objetos. O resultado do comando solve pode ser uma sequˆencia de ra´ızes de uma equa¸c˜ao, como vimos acima. Vejamos outro exemplo:

(^) x^8+2x^7-13x^6-24x^5+43x^4+58x^3-67x^2- 36*x+36; x^8 + 2 x^7 − 13 x^6 − 24 x^5 + 43 x^4 + 58 x^3 − 67 x^2 − 36 x + 36 (^) sequencia_de_solucoes := solve(%); sequencia de solucoes := − 3 , 3 , − 1 , − 2 , − 2 , 1 , 1 , 1

O resultado do comando solve foi uma sequˆencia de ra´ızes, sendo que as ra´ızes repetidas aparecem tantas vezes quanto for a multiplicidade. No caso acima, a ra´ız 1 tem multi- plicidade 3 e a ra´ız -2 tem multiplicidade 2. Podemos, agora, colocar esta sequˆencia de ra´ızes na forma de outros objetos. Por exemplo, na forma de uma lista:

(^) lista_de_solucoes := [ sequencia_de_solucoes ]; lista de solucoes := [− 3 , 3 , − 1 , − 2 , − 2 , 1 , 1 , 1]

Outra possibilidade ´e armazenar as ra´ızes na forma de um conjunto:

(^) conjunto_de_solucoes := { sequencia_de_solucoes }; conjunto de solucoes := {− 1 , 1 , − 2 , − 3 , 3 }

12 CHAPTER 2. NOC¸ OES B ˜ ASICAS´

Este m´etodo ´e o mesmo n˜ao importa o n´umero de ra´ızes. Um erro comum de ser cometido no primeiro m´etodo ´e usar x−2 no lugar de x+2. No segundo n˜ao se corre este risco. Aqui foi usado o comando map (mapping). Ele est´a associado `as estruturas de dados. Todos os comandos que usamos at´e agora atuavam em um ´unico elemento. No entanto, quando estamos lidando com estrutura de dados ou objetos com muitos elementos, precisamos aplicar comandos ou fun¸c˜oes a todos os elementos da estrutura. O comando que faz isso ´e o map. No exemplo acima, queremos somar x a cada elemento do conjunto de solu¸c˜oes. A nota¸c˜ao ´e elem → x + elem. Esta opera¸c˜ao deve ser realizada em todos os elementos do conjunto de solu¸c˜oes. O primeiro argumento do comando map deve ser a lei transforma¸c˜ao. O segundo argumento tem qqe ser o conjunto ou qualquer objeto com v´arios elementos. O resultado foi o desejado. Cada elemento foi somado a x. Falta mais um passo para obter o polinˆomio, que ´e converter o conjunto em produto. O produto ´e especificado no Maple como ‘*‘. As crases s˜ao necess´arias, pois o asterisco ´e um caracter n˜ao alfanum´erico. O comando convert espera que o seu segundo argumento seja um nome. O asterisco n˜ao ´e um nome, mas sim o operador de multiplica¸c˜ao. As crases fazem com que ele seja apenas um nome, ou um caracter como qualquer outra letra. Podemos converter uma lista em um conjunto e vice-versa:

(^) convert( conjunto_de_solucoes, list); [− 1 , 1 , − 2 , − 3 , 3] Os conjuntos s˜ao objetos inspirados nos conjuntos usados em Matem´atica. Podemos fazer a uni˜ao, interse¸c˜ao e subtra¸c˜ao de conjuntos com os comandos union, intersect e minus. Por exemplo:

(^) {1,2,3} union {a,b,c,d}; { 1 , 2 , 3 , a, b, c, d}

(^) % intersect {3,a,c,w,z}; { 3 , a, c}

(^) %% minus %; { 1 , 2 , b, d} Os conjuntos e as listas que tˆem uma certa regra de forma¸c˜ao podem ser gerados com o comando seq (sequence). Por exemplo, o conjunto dos 10 primeiros n´umeros primos:

(^) { seq(ithprime(i), i=1..10) }; { 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 } A lista dos dez primeiros n´umeros da forma 2p^ − 1: (^) [ seq(2^i-1, i=1..10) ]; [1, 3 , 7 , 15 , 31 , 63 , 127 , 255 , 511 , 1023] A lista das derivadas de x ln(x) em rela¸c˜ao a x at´e ordem 5: (^) [ seq(diff(x*ln(x),x$i), i=1..5) ];

[ln(x) + 1,

x

x^2

x^3

x^4

]

2.4. TIPOS DE OBJETOS 13

Vimos como selecionar um ´unico elemento de uma estrutura de dados. Agora, como podemos obter um sub-conjunto de um conjunto ou uma sub-lista de uma lista? A nota¸c˜ao para obter sub-listas ou sub-conjuntos ´e:

OBJETO[ a .. b ]

onde a ´e a posi¸c˜ao do primeiro elemento e b ´e a posi¸c˜ao do ´ultimo elemento da parte que queremos selecionar. Por exemplo:

(^) lista1 := [a, b, c, d, e]; lista1 := [a, b, c, d, e] (^) sublista := lista1[2..4]; sublista := [b, c, d]

3.2. EXPAND 15

Os comandos mais usados para simplificar express˜oes alg´ebricas s˜ao: expand, normal, simplify, collect, combine e factor.

3.2 Expand

Quando um usu´ario entra uma express˜ao, o Maple a mant´em na mesma forma por via de regra. A express˜ao n˜ao tem a sua forma alterada at´e que o usu´ario pe¸ca. N˜ao h´a um padr˜ao predeterminado de apresenta¸c˜ao das express˜oes alg´ebricas. Por isto, elas s˜ao armazenadas internamente, na forma em que foram fornecidas. Por exemplo, uma express˜ao dada na forma fatorada, permanece nesta forma at´e que sua expans˜ao seja pedida, e vice-versa:

(^) (x-1)^5;

(x − 1)^5

(^) expand(%); x^5 − 5 x^4 + 10 x^3 − 10 x^2 + 5 x − 1 (^) factor(%); (x − 1)^5 O comando expand serve para expandir as express˜oes no sentido de tirar os parˆenteses, e serve tamb´em para expandir fun¸c˜oes trigonom´etricas, logar´ıtmicas, etc. Por exemplo:

(^) sin(2alpha+beta) = expand(sin(2alpha+beta)); sin(2 α + β) = 2 cos(β) sin(α) cos(α) + 2 sin(β) cos(α)^2 − sin(β) (^) ln(x^2y^2) = expand(ln(x^2y^2)); ln(x^2 y^2 ) = 2 ln(x) + 2 ln(y) (^) Psi(2x) = expand(Psi(2x)); # Psi e’ a funcao digamma

Ψ(2 x) = ln(2) +

Ψ(x) +

Ψ(x +

Em certos casos, queremos expandir uma express˜ao sem expandir um certo peda¸co. Para isso, devemos colocar a parte que queremos congelar como segundo argumento do comando expand:

(^) (x + sin(gamma + delta))^2; (x + sin(γ + δ))^2 (^) expand(%,sin); x^2 + 2 sin(γ + δ) x + sin(γ + δ)^2 (^) sin(omega*(t+t0)+delta); sin(ω (t + t0 ) + δ) (^) expand(%,t+t0); sin(ω (t + t0 )) cos(δ) + cos(ω (t + t0 )) sin(δ)

16 CHAPTER 3. SIMPLIFICAC¸ AO DE EXPRESS ˜ OES˜

Nestes ´ultimos exemplos, os resultados seriam bem diferentes se n˜ao tiv´essemos colocado o segundo argumento. No caso da express˜ao sin(γ + θ) basta colocar sin no segundo ar- gumento do comando expand para obter o efeito desejado. Evidentemente, se tiv´essemos colocado sin(γ + θ) em vez de sin, obter´ıamos o mesmo resultado. Um terceiro efeito do comando expand se refere a express˜oes com denominador. Ele coloca o denominador embaixo de cada numerador, sem expandir o denominador:

(^) expr := (x+y)^2/(a+b)^2;

expr :=

(x + y)^2 (a + b)^2

(^) expand(expr); x^2 (a + b)^2

x y (a + b)^2

y^2 (a + b)^2 Para expandir o denominador, ´e necess´ario primeiro usar o comando normal com a op¸c˜ao expanded e depois expandir com expand:

(^) normal(expr, expanded); x^2 + 2 x y + y^2 a^2 + 2 a b + b^2 (^) expand(%); x^2 a^2 + 2 a b + b^2

x y a^2 + 2 a b + b^2

y^2 a^2 + 2 a b + b^2

3.3 Combine

Vimos na se¸c˜ao anterior como expandir express˜oes. A expans˜ao ´e um procedimento simples computacionalmente. O mesmo n˜ao podemos dizer do procedimento inverso. Ao contr´ario, podemos afirmar que a fatora¸c˜ao ´e um processo complexo, baseado em um longo algoritmo desenvolvido com conceitos da Algebra Moderna.´ A fatora¸c˜ao ´e feita pelo comando factor. Al´em do comando factor, os comandos normal e combine fazem o contr´ario do que faz o comando expand. Destes trˆes, o comando combine requer maior aten¸c˜ao, pois para us´a-lo com eficiˆencia ´e necess´ario conhecer as op¸c˜oes que devem ser fornecidas como segundo argumento. A sintaxe ´e:

combine( express˜ao, op¸c˜ao )

A op¸c˜ao pode ser: exp, ln, power, trig, Psi, polylog, radical, abs, signum, plus, atatsign, conjugate, plot, product ou range entre outras. A op¸c˜ao trig engloba todas as fun¸c˜oes trigonom´etricas e a op¸c˜ao power express˜oes que envolvem potencia¸c˜ao. Vejamos alguns exemplos:

(^) (x^a)^2x^b = combine((x^a)^2x^b, power); (xa)^2 xb^ = x(2^ a+b) (^) 4sin(x)^3 = combine(4sin(x)^3, trig); 4 sin(x)^3 = −sin(3 x) + 3 sin(x) (^) exp(x)^2exp(y) = combine(exp(x)^2exp(y), exp); (ex)^2 ey^ = e(2^ x+y)

18 CHAPTER 3. SIMPLIFICAC¸ AO DE EXPRESS ˜ OES˜

(^) expand(convert(%,trig));

cos(x) + sin(x)

(^) convert(cosh(x),exp); 1 2

ex^ +

ex

(^) convert(arcsinh(x),ln); ln(x +

x^2 + 1) Vejamos alguns exemplos relacionados com a fun¸c˜ao factorial:

(^) n! = convert(n!, GAMMA); n! = Γ(n + 1) (^) convert(%,factorial);

n! =

(n + 1)! n + 1

(^) expand(%); n! = n! (^) binomial(n,k) = convert(binomial(n,k), factorial);

binomial(n, k) =

n! k! (n − k)!

3.5 Simplify

O comando simplify ´e um comando geral de simplifica¸c˜ao. Uma das primeiras coisas que ele faz ´e procurar dentro da express˜ao a ocorrˆencia de fun¸c˜oes matem´aticas, como as fun¸c˜oes trigonom´etricas. Caso encontre, ele usa as propriedades de simplifica¸c˜ao destas fun¸c˜oes. O mesmo ocorre com as ra´ızes quadradas, os radicais e as potˆencias. No entanto, ´e poss´ıvel aplicar as regras de simplifica¸c˜ao de determinadas fun¸c˜oes de maneira selecionada. Para isso deve-se dar o nome da fun¸c˜ao em quest˜ao no segundo argumento do comando simplify, que pode ser um dos seguintes nomes: trig, hypergeom, radical, power, exp, ln, sqrt, BesselI, BesselJ, BesselK, BesselY, Ei, GAMMA, RootOf, LambertW, dilog, polylog, pg, pochhammer e atsign (“@”). Por exemplo, no primeiro comando simplify abaixo, tanto as regras de simplifica¸c˜ao das fun¸c˜oes trigonom´etricas como da fun¸c˜ao exponencial foram usadas, enquanto que no segundo somente as regras das fun¸c˜oes trigonom´etricas foram usadas:

(^) expr := (sin(x)^3 + cos(x)^3)*exp(a)/exp(a+b);

expr :=

(sin(x)^3 + cos(x)^3 ) ea e(a+b)

(^) simplify(expr); −(−sin(x) + sin(x) cos(x)^2 − cos(x)^3 ) e(−b) (^) simplify(expr, trig);

ea^ (−sin(x) + sin(x) cos(x)^2 − cos(x)^3 ) e(a+b)

3.5. SIMPLIFY 19

O comando simplify tem uma op¸c˜ao bastante ´util para simplifica¸c˜ao de uma express˜ao com v´ınculos adicionais. Estes v´ınculos devem ser colocados em um conjunto, mesmo que haja um ´unico v´ınculo, e repassados como segundo argumento do comando simplify. Por exemplo, queremos calcular o valor de a^4 + b^4 + c^4 com a, b e c satisfazendo as seguintes equa¸c˜oes: a + b + c = 3, a^2 + b^2 + c^2 = 9 e a^3 + b^3 + c^3 = 24:

(^) vinculos := {a+b+c=3, a^2+b^2+c^2=9,a^3+b^3+c^3=24}; vinculos := {a + b + c = 3, a^2 + b^2 + c^2 = 9, a^3 + b^3 + c^3 = 24} (^) simplify(a^4+b^4+c^4, vinculos); 69 Outro exemplo de aplica¸c˜ao do comando simplify com v´ıculos ´e na substitui¸c˜ao de dois termos de um produto por um n´umero. Por exemplo, queremos queremos substituir a b por 10 na express˜ao a b c: (^) expr := abc; expr := a b c (^) subs( ab=10, expr); a b c Podemos ver que n˜ao funcionou. Agora, usando o comando simplify com v´ınculos: (^) simplify( expr, {ab=10}); 10 c E poss´^ ´ ıvel tamb´em dizer ao comando simplify que as vari´aveis obedecem as certas restri¸c˜oes, que s˜ao as mesmas usadas no comando assume. Por exemplo, a ra´ız quadrada do produto de v´arios termos s´o ´e o produto das ra´ızes quadradas se os termos forem reais e positivos. Vejamos: (^) expr := simplify(sqrt(x^2*y^2));

expr :=

√ x^2 y^2

(^) simplify(expr, assume=nonneg); x y

A op¸c˜ao assume=nonneg faz com que todas as vari´aveis sejam declaradas temporaria- mente como vari´aveis n˜ao negativas. No caso da express˜ao acima, temos outra forma de obter o mesmo resultado:

(^) simplify(expr, symbolic); x y