36
083$’ /,*+7 78725,$/ 5LFDUGR 0LUDQGD 0DUWLQV UPLUDQGD#YLFRVDXIYEU

Tutorial MuPAD v2 com animacoes - ime.unicamp.brrmiranda/mupad_animacoes.pdf · é a exatidão da resposta: na computação numérica os dados (números) são armazenados como números

Embed Size (px)

Citation preview

083$'�/,*+7

78725,$/

5LFDUGR�0LUDQGD�0DUWLQV

UPLUDQGD#YLFRVD�XIY�EU

0X3$'�7XWRULDO

Ë1',&(

INTRODUÇÃO 3

INTERFACE, ENTRADA E SAÍDA DE COMANDOS 4

ARITMÉTICA 6

NÚMEROS COMPLEXOS 8

ÁLGEBRA BÁSICA 8

CONJUNTOS 12

FUNÇÕES 12

GRÁFICOS DE FUNÇÕES 13

CÁLCULO DIFERENCIAL E INTEGRAL 17

ÁLGEBRA LINEA 19

SISTEMAS LINEARES E OTIMIZAÇÃO 22

O COMANDO PLOT 24

ANIMAÇÕES 28

BIBLIOGRAFIA 36

0X3$'�7XWRULDO

,1752'8d­2

Dentre as ferramentas computacionais que podem ser util izadas para se resolver um

determinado problema, existem aquelas puramente numéricas, que util izam algoritmos bem

conhecidos para encontrar as soluções, e existem aquelas algébricas. A principal diferença entre elas

é a exatidão da resposta: na computação numérica os dados (números) são armazenados como

números reais, e como a capacidade de memória dos computadores é limitada, os arredondamentos

acabam afetando a precisão da resposta. Já na computação simbólica, como os dados são

armazenados como frações e manipulados algebricamente, a precisão da resposta é total. Outr

vantagem da computação simbólica é a possibil idade de resolução de problemas literais, ou seja,

manipulando as letras ao invés dos números.

O MuPAD (Multi-Processing Algebra Data Tool) é um sistema de computação algébrica

(C.A.S. – Computer Algebra System) interativo, desenvolvido à partir de 1990 na Universidade de

Paderborn (Alemanha) com todos os recursos dos principais softwares comerciais nesta área, como o

Mathematica e o Maple. No MUPAD é possível solucionar praticamente todos os tipos de problemas

de matemática, fazer gráficos de funções em 2D e 3D, resolver equações e inequações (sejam lineares

ou nao), derivar, integrar, operar matrizes e até fazer animações.

O MuPAD pode ser copiado no site http://www.mupad.de, que é o site do fabricante. Existem

versões para Windows, Linux e MAC. Para Linux, a versão completa é livre, e para Windows e MAC

existem versões de demonstração (MuPAD Light) com uso restrito de memória, restrição esta que

pode ser removida com o registro (gratuito) do programa. Outra restrição da versão Light é a

impossibilidade de editar uma linha de comando já interpretada. Assim, é necessário copiar-colar os

comandos para alterá-los. Ainda, só é possível salvar o arquivo de trabalho em formato texto. A

versão em que este tutorial se baseia é a Light 2.5.2.

Este trabalho é parte de um projeto de Iniciação Científica do Programa Institucional de

Bolsas de Iniciação Cietífica – PIBIC/UFV, financiado pelo CNPq.

Ricardo Miranda Martins

Viçosa, 2004

0X3$'�7XWRULDO

,17(5)$&(��(175$'$�(�6$Ë'$�'(�&20$1'26

Ao ser iniciado, o MuPAD fica pronto para receber instruções. Sua janela é bem simples, co

um espaço para digitação de comandos e apresentação de resultados e alguns poucos botões e menus.

Abaixo segue uma descrição dos menus e botões na interface do MuPAD.

)LOH (GLW 9LHZ6DYH�DV 6DOYD�R�FRQWH~GR

DWXDO�GD�SODQLOKD8QGR 'HVID]�R�~OWLPR

FRPDQGR7RROEDU 0RVWUD�2FXOWD�RV

tFRQHV3ULQW ,PSULPH�D

SODQLOKD�DWXDO&XW 5HFRUWD�D�VHOHomR

DWXDO6WDWXVEDU

0RVWUD�2FXOWD�DEDUUD�GH�VWDWXV

3ULQW3UHYLHZ

9LVXDOL]D�DLPSUHVVmR

&RS\ &RSLD�D�VHOHomRDWXDO

2SWLRQV 2So}HV�GH�IRQWH�HFDPLQKR�GHELEOLRWHFDV

3ULQW6HWXS

&RQILJXUD�DLPSUHVVmR

3DVWH &ROD�R�FRQWH~GRGD�iUHD�GHWUDQVIHUrQFLD

([LW )HFKD�R�0X3$' 'HOHWH$OO

$SDJD�WRGD�DSODQLOKD�DWXDO

6HVVLRQ +HOS(YDOXDWH ([HFXWD�OLQKD

GH�FRPDQGRDWXDO

%URZVH�0DQXDO 3URFXUD�DOJR�RVLVWHPD�GHDMXGD

3UHWW\�3ULQW $OWHUQD�R�PRGRGH�DSUHVHQWDURV�UHVXOWDGRV

2SHQ�WXWRULDO $EUH�R�WXWRULDOLQWHUQR

7H[W�ZLGWK &RQILJXUD�RWDPDQKR�GRWH[WR

+HOS�WRSLFV 0RVWUD�RVWySLFRV�GD�DMXGD

6WRS�.HUQHO )RUoD�D�SDUDGDGR�FRPDQGRDWXDO

5HJLVWHU 5HJLVWUD�R0X3$'�/LJKW

$ERXW���� ,QIRUPDo}HVVREUH�R�0X3$'

5HFRUWDU&RSLDU&RODU

,PSULPLU ([HFXWDU�OLQKD3DUDU�FRPSXWDomR

,QLFLDU�7XWRULDO�LQWHUQR3URFXUDU�QD�DMXGD

A entrada de comandos é bem intuiti va, e as operações aritméticas são realizadas do modo

usual. O modo de se usar uma função é bem parecido com o que é feito manualmente. Cuidado! O

MuPAD diferencia maiúsculas de minúsculas, e a maioria de suas funções são em letras minúsculas.

Assim, cos(x) é diferente de Cos(x) ou de cos(X).

0X3$'�7XWRULDO

Veja um exemplo:

Na figura acima, o primeiro comando é um comando aritmético normal. O símbolo * é usado

para a multiplicação. Para divisão, usamos / e para potência, ^, por exemplo, para calcularmos 23

devemos digitar no MuPAD: 2^3 [ENTER]. Na interface do MuPAD, os textos em vermelho

denotam entrada de comandos, e em azul, a resposta.

Na segunda linha da figura, o MuPAD é instruído a calcular o valor da função cosseno no

ponto 1,5 (os valores devem ser em radianos e o separador de decimais é o ponto, e não a vírgula).

A maioria dos comandos no MuPAD segue a sintaxe (sintaxe é o “modo” de usar o comando)

da função cosseno, ou seja para calcularmos o valor da função f no ponto x, devemos digitar f(x).

Veja um exemplo: se quisermos que o MuPAD faça o gráfico da função cos(x), devemos usar

a funçã plotfunc2d, que, como o nome já diz, “plota” (desenha) funções em duas dimensões. A

sintaxe da função plotfunc2d é a seguinte: plotfunc2d( f(x), x=a..b), onde f e g são funções e a..b é

o intervalo que queremos do gráfico. No MuPAD, ficaria assim:

O resultado aparecerá numa nova janela:

0X3$'�7XWRULDO

O sistema de ajuda do MuPAD é bem completo, assim, se tivermos qualquer dúvida, podemos

usar os seguintes comandos:

F2: Ativa o sistema de ajuda

>> info(comando): Mostra informações sobre “comando”

>> ?comando: Mostra ajuda sobre “comando”

Um importante comando é o reset(). Ele reinicia todo o sistema do MuPAD, e deve ser usado

sempre que se desejar liberar memória ou apagar as variáveis setadas.

$5,70e7,&$

O MuPAD tem vários recursos para se trabalhar somente com números.

Os comandos abaixo estarão todos comentados. Os comentários começam e terminam com

um sinal #. No MuPAD, todo o texto escrito entre #’s não é executado. É possível entrar vários

comandos numa única linha, bastante separa-los com um ponto-e-vírgula (;), e a ordem da respost

será a mesma ordem da entrada dos comandos. Os comandos podem ainda ser separados por dois

pontos (:), porém, seu resultado não será mostrado. Neste tutorial, o prompt do MuPAD (a bolinha

vermelha) será substituída pelo sinal “>>” para simplificar a notação. Então, a linha:

>> l og( 2, 8) ; #Cal cul a o l og de 8 na base 2#3

ficaria no MuPAD:

Agora, as operações aritméticas básicas:

>> 2+3; #Soma#5

>> 2* 3; #Mul t i pl i cação#6

>> 6/ 2; #Di visão#3

>> sqr t ( 9) ; #Rai z quadr ada de 9#3

0X3$'�7XWRULDO

Algumas vezes, quando uma divisão não for exata, a resposta será dada na forma de fração. O

mesmo acontece para extração de raiz não exata e em alguns outros casos. Para forçá-lo a exprimir a

resposta como um número real, o comando é float. Por exemplo:

>> 3/23/2

>> f l oat ( 3/2)1.5

>> sqr t (6) 1/2

6>> f l oat ( sqr t (6))

2. 449489743

Para evitar o uso do comando float, basta digitar o número com casas decimais. Por exemplo:

>> 2. 0^( 1/3)1. 25992105

O valor das famosas constantes matemáticas Pi e “ e” (Número de Euler) aparece no MuPAD

com uma precisão tão grande quanto se queira (ou quanto a memória do computador permitir). O uso

destas constantes é como usual, ou seja:

>> f l oat ( PI)3. 141592654

>> f l oat(E)2. 718281828

Caso seja necessário usar o resultado do último cálculo, é possível usar o símbolo %. Seu uso

é simples, como no exemplo abaixo:

>> PI * E^ 2; # O MuPAD não i r á r et or nar o val or desta expressão. 2PI exp(1)

>> f l oat ( %) ; # Usando f l oat sem r eescr ever t oda a expr essão anterior#23. 21340436

Outra “constante” existente no MuPAD é a infinity. Ela representa “o infinito” , ou seja, um

número muito grande. É possível operar com infinity:

>> 1- i nf i nity- i nf i nity

>> i nf i ni t y/ i nf i ni t y ; # Cui dado! I sso não vale 1!#

undef i ned

Em alguns cálculos envolvendo o infinito o MuPAD calcula o limite para exibir o resultado:

>> 1/ i nf i nity0

0X3$'�7XWRULDO

Existem funções específicas para lidar com aritmética. Abaixo seguem algumas delas:

>> abs( - 2) ; # Ret or na o módul o de um número#2

>> r ound( 1. 51) ; #Ar r edondament o padr ão, par a o i nt ei r o mais próximo#2

>> i f act or ( 338272) ; # Fat or a em pr i mos um dado inteiro# 5 2

2 11 31

>> i spr i me( 1001) ; i spr i me( 3847) ; #Ver i f i ca se um número é primo#f alse

>> 23 mod 5; #Ret or na o r est o da di vi são do pr i mei r o parâmetro pelosegundo#

3

>> 23 di v 5; #Ret or na o quoci ent e na di vi são do pr i mei r o parâmetro pelosegundo#

4

1Ò0(526�&203/(;26

A unidade imaginária i, no MuPAD, é representada como I (i maiúsculo). Um número

complexo, ou seja, um número do tipo a+bi, onde i= ¥����1R�0X3$'�HOHV� Vão definidos da mesma

forma, e é possível operá-los e explorar suas propriedades.da mesma forma que os números reais.

>> x: =2* I +1: #Def i ne o númer o complexo x#>> y: =3* I - 5: #Def i ne o númer o complexo y#

>> x+y; x* y; #Al gumas oper ações#- 4 + 5 I

- 11 - 7 I

>> x^3; #Pot enci ação de um número complexo#- 11 - 2 I

>> x/ y ; #Di vi são ent r e complexos#1/ 34 - 13/34 I

>> abs( x) ; #Ret or na a norma de x# 1/2

5

>> Re( x) ; #Par t e r eal de x#; I m( x) ; #Par t e i maginária de x#12

>> 1/ x ; #I nver so de x#1/ 5 - 2/5 I

È/*(%5$�%È6,&$

Como um Sistema de Computação Algébrica, o MuPAD mostra sua força quando tratamos de

problemas onde é necessária a manipulação algébrica de expressões. Ao contrário de calculadoras

não-programáveis (como as HP48/49), o MuPAD pode reconhecer e operar objetos tais com

polinômios, funções, matrizes, entre outros. Inicialmente lidaremos com polinômios em uma variável.

0X3$'�7XWRULDO

Os polinômios são digitados da forma natural, ou seja, com x denotando a indeterminada

(variável) e os coeficientes numéricos. Ao trabalhar com polinômios, é sempre bom armazenar os

polinômios em variáveis, ou seja:

>> p: =x^ 2+4*x+2 2

4 x + x + 2

O comando solve é o comando universal para se obter “soluções” . O MuPAD analisa o objeto

que se deseja “resolver” e decide qual método utilizar. Assim, ele é usado para resolver quase tudo no

MuPAD. Abaixo, alguns exemplos do uso do solve para as mais variadas aplicações.

O comando solve em polinômios:

>> sol ve( 18* x^ 2- 27* x+26* x^ 3+9* x^ 4+x^ 5- 27 , x) ; # Resol ve o polinômio emr el ação à var i ável x , ou sej a, encont r a as r aí zes do polinômio#

{ - 3, -1, 1}

Para alguns polinômios de grau maior que 5, é impossível exprimir suas raízes em termos de

radicais, então o MuPAD mostrará uma resposta parecida com o caso abaixo:

>> sol ve( x^6+x^2+x^3+x,x) 2 3 4

{ - 1, 0} uni on Root Of ( X2 - X 2 + X2 + 1, X2)

O que a resposta acima diz é o seguinte: as raízes de x^6+2^x+x^3+x são –1, 0, além das

raízes do polinômio x^2-x^3+x^4+1. Mas quais são estas raízes? Elas podem ser obtidas

(numericamente) usando o comando float.

>> f l oat(%){ - 1. 0, 0. 0} uni on { - 0. 3518079518 + 0. 7203417364 I,

- 0. 3518079518 - 0. 7203417364 I , 0. 8518079518 - 0. 911292162 I,0. 8518079518 + 0. 911292162 I}

>> q: =x^ 3-9*x 3 x - 9 x

>> sol ve( q) ; #Encont r a as r aí zes do polinômio q# { [ x = 0] , [ x = -3], [x = 3]}

O comando solve em sistemas de equações polinomiais:

>> equacoes: ={ x+y=3, 2* x- y=7} ; # Equações l i neares# { x + y = 3, 2 x - y = 7}>> sol ve( equacoes) { [ x = 10/ 3, y = -1/3]}>> eq: ={ x^ 2- y=7, x+y^2=1} ; #Agor a com equações não- l i neares# 2 2 {x + y = 1, x - y = 7}>> sol ve( eq)

{ [ x = -3, y = 2]}

0X3$'�7XWRULDO

��

O comando solve para equações transcendentes:

>> sol ve( s i n( x) =1/ 2)x i n { 1/ 6* PI + 2* PI* X41 | X41 in Z_ } uni on { 5/ 6* PI + 2*PI*X42 | X42i n Z_ }

A resposta do comando acima (união de dois conjuntos), é esperada, pois sendo a função seno

periódica, existem infinitos valores de x para os quais sen(x) = 1/2.

O comando solve para inequações:

>> sol ve( x^2-2* x+4<0) {}>> sol ve( x^2-2* x+4>0) x i n R_

(Note que x

2 - 2x + 4 = (x - 2)

2, que nunca é menor que zero.)

>> sol ve( x^2- 5* x+6>0) x i n ] - i nf i ni t y , 2[ uni on ] 3, infinity[

A resposta, na forma de intervalo, quer dizer x pertence a (������U (3, ���

Abaixo seguem alguns comandos úteis para trabalhar com polinômios.

>> p: =x^ 2+4* x+2: q: =x^3+4:>> f act or ( p+2) ; #Fat or a pol i nômios#

2( x+2)

>> f act or ( q-5) 2

( x - 1 ) (x + x + 1)>> expand( p* q) ; # Expande um polinômio#

2 3 4 516 x + 4 x + 2 x + 4 x + x + 8

Para dividir dois polinômios, o comando é divide(f,g), e ele retorna o quociente e o resto da

divisão do polinômio f pelo g.

>> di v i de( p,q) 2

0, 4 x + x + 2

O que deu errado? Nada. Veja que o grau de p é maior que o grau de q. Assim, o quociente da

divisão é 0 e o resto é o próprio p. Se invertermos:

>> di v i de( q,p)x – 4, 14x + 12

Para obter somente o quociente e/ou o resto de uma divisão, podemos fazer como abaixo:

>> di v i de( q, p, Quo) ; #Ret or na o quoci ente da divisão#x - 4

>> di v i de( q, p, Rem) ; #Ret or na o r est o ( Remai nder ) da divisão#14 x + 12

0X3$'�7XWRULDO

��

Para resolvermos uma equação polinomial, o comando é novamente o solve:

>> sol ve( p = 30) 1/2 1/2

{ [x = - 4 2 - 2 ], [x = 4 2 - 2]}

Cuidado! A resposta acima deve ser lida como “x = -4√2 –2 ou x = 4√2 –2” .

Algumas expressões são simplificadas de uma forma bem inteligente pelo MuPAD:

>> a: =cos( x) ^2+si n( x) ^ 2: # “ si n” ( s i ne) é a função seno#>> s i mpl i f y(a)

1>> b: =( x^2- 1) / ( x+1) - ( x- 1):>>si mpl i f y( b);

0

Cálculos envolvendo somatórios e produtórios também são possível no MuPAD, com o uso

dos comandos sum e product. Veja abaixo:

>> sum( x, x=1. . 10) ; #Soma x, com x i ndo de 1 até 10, ou seja:1+2+3+4+. . . +9+10#

55

Ainda é possível usar expressões mais complicadas nos somatórios e produtórios:

>> p: =x- >x^2+2* x+3; #Def i ne uma f unção pol i nomial#x - > x^ 2 + 2*x + 3

>> sum( p( x) , x=1. . 5) ; #Faz a soma p( 1) +p( 2) +...+p(5)#100

>> sum( 1/ n^2, n=1. . i nf i ni t y) ; #Um r esul t ado i nt er essant e: qual será a somados i nver sos dos quadr ados dos naturais?# 2 PI --- 6

>> soma: =sum( x^y, y=1. . 10) ; #Cr i a uma soma# 2 3 4 5 6 7 8 9 10 x + x + x + x + x + x + x + x + x + x

Outro exemplo importante, usando a função binomial, usada para calcular binomiais:

binomial(n, i) = n!/[(n - i)!* i!].

>> sum( bi nomi al ( 15, n) , n=0..15)32768

>> 2^15;32768

Coincidência? Não, já que ��np )=2

n !

0X3$'�7XWRULDO

��

&21-81726

Estruturas são formas de se agrupar dados que tem uma certa estrutura e ordem. Para

manipular estes dados, existem operações especiais e regras especiais. As principais estrutura de

dados são as sequências, que no MuPAD podem ser criadas muito facilmente. A partir delas,

podemos criar listas e conjuntos. Somente os conjuntos serão abordados aqui.

Conjuntos, que são sequências não-ordenadas de objetos, podem ser criados da mesma form

que listas e sequências. As operações mais comuns com conjuntos (união, interseção e subtração) são

realizadas da forma usual.

Cuidado! A ordem apresentada na tela quando se define um conjunto é uma ordem aleatória,

criada a partir de regras internas do MuPAD.

>> A: ={ 1, 2, 3} : B: ={ 4, 5, 6} : C: ={ 1, 4} : # cr i ando os conj unt os A, B e C#

>> A uni on B; #Uni ão do conjunto A com o B#{ 1, 2, 3, 4, 5,6}

>> A mi nus B; #Conj unt o A menos o conjunto B#{ 1, 2,3}

>> A mi nus C; #Conj unt o A menos o conjunto C#{ 2,3}

>> ( A i nt er sect C) uni on B; A i nt er sect (C union B);{ 1, 4, 5,6}

{1}

�)81d®(6

No MuPAD, para definirmos uma função, é preciso usar o “operador de seta” -> . O que este

operador faz é associar um nome a uma sequência de operações. Por exemplo:

>> f : = x -> x^2 x -> x^2

Para efetuar cálculos com a função f, procede-se da maneira usual:

>> f(2) 4>> f( a+b) 2 ( a + b)

Uma outra função:

>> g: =x- >1+x^2 x - > 1 + x^2

0X3$'�7XWRULDO

��

As operação com duas funções, inclusive a composição, são feitas como abaixo.

>> f ( a) * g(b) 2 2 a (b + 1)>> f ( 3) * g(1) 18>> f ( g( a)) 2 2 (a + 1)

As funções trigonométricas, exponenciais e logarítmicas também podem ser usadas, inclusive

em conjunto com funções definidas pelo usuário. Por exemplo:

>> s i n( PI / 2) * f ( PI ) 2 PI>> g( t g( x) ) 2 t g( x) + 1

No MuPAD, para definir uma função por partes, deve-se usar o comando piecewise:

>> p: =x- >pi ecewi se( [ x<0, x^ 2] , [ x=0, 0] , [x>0, x+1])x - > pi ecewi se( [ x<0, x^2 + 4* x] , [ x =0, 0], [0 < x, 2*x + 1])

>> p( - 3) ; p( 5); 9 6

Agora, compondo a função p (definida por partes), com a função f:

>> f ( p( x)) 4 2 pi ecewi se(x i f x < 0, 0 i f x = 0, (x + 1) if 0 < x)

>> f ( p( 4)) 25

>>p( f ( 4)) 17

Note que p(f(4)) é diferente de f(p(4)), já que a composição de funções nem sempre é comutativa.

*5È),&26�'(�)81d®(6

O MuPAD possui ferramentas variadas para renderizar (d esenhar) objetos matemáticos e

duas ou três dimensões. Existe uma biblioteca para lidar com os casos mais complexos, porém

existem comandos padrão para gráficos de funções, talvez os mais desenhados.

Os comandos para traçar gráficos de funções (ou equações) são basicamente 4: plotfunc2d,

plotfunc3d, plot2d e plot3d. Os gráficos geralmente aparecem em uma janela separada, para facilitar a

visualização.

0X3$'�7XWRULDO

��

Gráficos 2D

Para gráficos de funções de uma variável, será usado o comando plotfunc2d. Seu uso é bem simples:

>> pl ot f unc2d( x^ 3, x=- 3. . 3) ; #Gr áf i co da f unção y=x^3, no intervalo dex=–3 at é x=3.#

>> pl ot f unc2d( si n( x) , cos( x) , x=- PI . . PI ) ; #Gr áf i cos de seno e cossenoj unt os#

2.51.250-1.25-2.5

25

12.5

0

-12.5

-25

x

y

x

y

x^3

���

2.51.250-1.25-2.5

1

0.5

0

-0.5

-1

x

y

x

y

sin(x), cos(x)

>> pl ot f unc2d( sqr t ( 1 - x^2) , sqr t ( x- 1), x = -2..2):

21.510.50-0.5-1

1

0.75

0.5

0.25

0

x

y

x

y

(1 - x^2)^(1/2), (x - 1)^(1/2)

Um exemplo de função com singularidade:

>> pl ot f unc2d( 1/ ( ( x- 2) * ( x- 3) ) , x=0. .4)

43210

10

0

-10

-20

x

y

x

y

1/(x - 2)/(x - 3)

Note que o gráfico está bem desproporcional. Para contorn ar este problema, existe a opção

Constrained. Veja o mesmo gráfico, usando esta opção. O eixo y ficará restrito ao intervalo [-5, 5].

0X3$'�7XWRULDO

��

>> pl ot f unc2d( 1/ ( ( x- 2) * ( x- 3) ) , x=0. . 4, y=- 5. . 5, Scal i ng=Const r ained)

43210

5

2.5

0

-2.5

-5

x

y

x

y

1/(x - 2)/(x - 3)

Usando as restrições dos valores de x e de y, é possível ver o comportamento da função em qualquer

região do plano:

>> pl ot f unc2d( si n( x) +cos( x)+ x^ 5- 4* x^ 3, x=- 3..3)>> pl ot f unc2d( si n( x) +cos( x)+ x^ 5- 4* x^ 3, x=1. . 2, y=- 5. .-1)

2.51.250-1.25-2.5

100

50

0

-50

-100

x

y

x

y

cos(x) + sin(x) - 4*x^3 + x^5

21.751.51.251

-1

-2

-3

-4

-5

x

y

x

y

cos(x) + sin(x) - 4*x^3 + x^5

Outra opção do plotfunc2d é a opção GridLines. Ela permite que o plano fique todopontilhado, para facilitar a visualização de certos pontos.>> pl ot f unc2d( x^ 2+3* x+1, x=- 4. . 1, y=- 5. .5, Gr i dLi nes=20)

0-1.25-2.5-3.75

5

2.5

0

-2.5

-5

x

y

x

y

3*x + x^2 + 1

É possível alterar as cores da figura com algumas opções auxiliares. Por exemplo:>> pl ot f unc2d( x^ 2+3* x+1, x=- 4. . 1, y=- 5. . 5, Gr i dLines=20,For eGr ound=RGB: : Red, BackGr ound=RGB: : Yellow)

Desta maneira, o fundo da figura acima passará de branco para amarelo, e os eixos serão

vermelhos ao invés de pretos.

0X3$'�7XWRULDO

��

Para alterar a cor do pontilhado, a opção é GridLinesColor. Para usar linhas ao invés de pontilhados,

a opção é GridLinesStyle. Veja:

>> pl ot f unc2d( x^ 2+3* x+1, x=- 4. . 1, y=- 5. . 5, Gr i dLines=20,For eGr ound=RGB: : Red, BackGr ound=RGB: : Yel l ow, Gr i dLi nesCol or =RGB: : Black,Gr i dLi nesSt yl e=Sol i dLi nes)

0-1.25-2.5-3.75

5

2.5

0

-2.5

-5

x

y

x

y

3*x + x^2 + 1

Gráficos 3D

Para gráficos tridimensionais, existe o comando plotfunc3d, que é o equivalente ao plotfunc2d

para este ambiente. Como precisaremos estabelecer valores para as duas variáveis, o intervalo do y

agora deixa de ser opcional e passa a ser obrigatório.

>> pl ot f unc3d( x+y- 6, x+y^2, x=- 5. . 5, y=- 5..5)

Normalmente, o MuPAD plota o gráfico como que numa “caixa” , isto é, os eixos formam um

paralelepípedo. Isto pode ser alterado com a opção Axes. Por padrão, Axes=Boxed. Para mostrar os

eixos somente nos cantos, a opção é Axes=Corner.

Outro recurso é a definição de Grid. As figuras em 3D são plotadas como resultado de vários

planos unidos. O número de planos que dará origem a uma figura é o Grid. Assim, quando maior o

valor de Grid, melhor resolução terá a figura.

>> pl ot f unc3d( x+y- 6, x+y^2, x=- 5. . 5, y=- 5..5, Axes=Cor ner, Gr i d=[ 50, 50])

52.50-2.5-5

5 2.5 0 -2.5 -5

30

20

10

0

-10

x

y

z

x + y - 6, x + y^2

52.50-2.5-5

5 2.50

-2.5-5

30

20

10

0

-10

x

y

z

x

y

z

x + y - 6, x + y^2

0X3$'�7XWRULDO

��

>> g: =pi ecewi se( [ x<y, x+y] , [ x>=y, cos( x) * y]);>> pl ot f unc3d( g( x, y) , x=- 5. . 5, y=- 5. .5, Gr i d=[ 40, 40])

52.5

0-2.5

-5

52.5

0-2.5

-5

7.5

5

2.5

0

-2.5

-5

-7.5

x

y

z

piecewise([x < y, x + y], [y <= x, y*cos(x)])

Pode-se definir o ponto (x, y, z) de onde será “olhado” o gráfico, com a opção CameraPoint = [x,y,z].

&iOFXOR�'LIHUHQFLDO�H�,QWHJUDO

O MuPAD calcula limites, derivadas e integrais, podendo ser uma ferramenta útil para

trabalhar conceitos de Cálculo.

Para calcular um limite no MuPAD, a sintaxe é limit(funcao, x=ponto, direcao), onde

“direção” é Left para limite a esquerda, Right para limite a direita, e se omitida, supõe-se o limite

bidirecional. Por exemplo:

>> f : =x- >1/ ( x- 1) : #Uma f unção descontínua em x=1#

>> l i mi t ( f ( x), x=1, Lef t ) ; #O l i mi t e t endendo à esquerda de x=1#- i nf i ni ty

>> l i mi t ( f ( x), x=1, Ri ght ) ; #O l i mi t e t endendo à di reita de x=1#i nf i ni ty

>> l i mi t ( f ( x), x=1) ; #Como os doi s l i mi t es aci ma são di f er ent es, o limitebi l at er al não exi ste!#

undef i ned

Para conferir as respostas

graficamente, é possível plotar o gráfico da

função acima definida:

>> pl ot f unc2d( f ( x) , x=0..2 ); 21.510.50

10

5

0

-5

-10

x

y

x

y

1/(x - 1)

0X3$'�7XWRULDO

��

52.50-2.5-5

25

12.5

0

-12.5

-25

x

y

x

y

2*x + x^2 - 4, 4*x - 5

A derivada de uma função pode ser calculada algebricamente no MuPAD, com o uso do

comando diff, como na maioria dos outros softwares matemáticos:

>> f : =x- >x^2* s i n( x):

>> di f f ( f ( x) , x ) ; # Der i va a f unção f em relação à variável x# 2

2 x s i n( x) + x cos(x)

Ou então de uma maneira idêntica à notação de Newton para derivadas:

>> f ’ (x) 2

2 x s i n( x) + x cos(x)>> f ’ ’(x)

22 si n( x) + 4 x cos ( x) - x sin(x)

Com a derivada é possível determinar retas tangentes a gráficos de funções, já que o valor da

derivada de uma função em um ponto x0 determina a inclinação da reta tangente à curva naquele

ponto. Veja abaixo:

>> g: =x- >x^2+2* x-4:

>> a: =1:

>> m : =g' (a):

>> r t g: = x- >m* ( x- a) +g( a);

4 x – 5

>> pl ot f unc2d( g( x) , r t g( x) , x=- 5..5);

A integração é bem semelhante à derivação. A função f é a mesma de antes, f(x) = x2sin(x).

>> i nt ( f ’ (x), x) 2

2 si n( x) + s i n( x) ( x - 2)

A resposta está correta, apesar de diferente da esperada. Uma simplificação resolve o problema:

>> f act or (%) 2

s i n( x) x

A integração numérica é feita adicionando um intervalo de integração ao lado da variável de

integração:

>> i nt ( l n( x) , x=1..4)4 l n( 4) - 3

0X3$'�7XWRULDO

��

Assim, fica sendo possível calcular áreas sob gráficos, como segue:

>> h: =x-> l n( x) : #Def i ne uma f unção h(x)= l n( x) #

>> i nf er i or : =1: #Li mi t e i nf erior#

>> super i or : =4. 0: #Li mi t e superior#

>> gr af i co: =[ Mode=Cur ve, [ u, h( u) ] , u=[ i nf er i or , superior],St y l e=[ I mpul ses] , Gr i d=[ 200] ] : #O gr áf i co da função, r achur ado#

>> l i nha:=[ Mode=Cur ve, [ u, h( u) ] , u=[ i nf er i or , 2* superior], Gr i d=[ 200]]: #Ot r aço do gr áfico#

>> pl ot 2d( gr af i co, l i nha, Real Val uesOnl y = TRUE );

7.56.2553.752.51.25

2

1.5

1

0.5

0

x

y

x

y

>> i nt ( h(x), x=i nf er i or . . super i or ) ; #A ár ea da parte r achur ada aci ma#2. 545177444

È/*(%5$�/,1($5

Uma matriz é uma tabela de números (ou objetos). Apesar de matrizes e vetores poderem ser

criados como arrays, desta forma é preciso definir as operações de adição e multiplicação destes. Para

evitar isto, o MuPAD existe um comando especial para criar matrizes. Funções mais avançadas para

tratar matrizes podem ser acionados com na biblioteca linalg, específica para Álgebra Linear.

Para criar uma matriz, o comando é matrix(m,n), onde m é o número de linhas da matriz e n é

o número de colunas. Se as entradas da matriz não forem especificadas, o MuPAD cria uma matriz de

zeros.

>> A: =mat r i x( 2,2)+- -+| 0, 0 || || 0, 0 |+- -+

>> B: =mat r i x( 2, 2, [ [ 1, 2] , [ 3, 4] ] ) ; #Cr i ando uma mat r i z especificando asent r adas#

+- -+| 1, 2 || || 3, 4 |+- -+

0X3$'�7XWRULDO

��

>> B: =mat r i x( 3, 3, 8, Di agonal ) ; #Cr i a uma mat r i z di agonal , com os elementosda di agonal i guai s a 8, ou seja, 8*Id#

+- -+| 8, 0, 0 || || 0, 8, 0 || || 0, 0, 8 |+- -+

Para operar com matrizes, os comandos são os mesmo usados para se trabalhar com números.

>> C: =mat r i x( 2, 2, [ [ 6, 7] , [ 9,9]])+- -+| 6, 7 || || 9, 9 |+- -+

>> B+C, B* C, B* C+B^2; #Al gumas oper ações com matrizes#+- -+ +- -+ +- -+| 7, 9 | | 24, 25 | | 31, 35 || | , | |, | || 12, 13 | | 54, 5 7 | | 69, 79 |+- -+ +- -+ +- -+

A inversa de uma matriz pode ser obtida do modo mais natural possível:

>> i nver sa: =1/B+- -+| - 2, 1 || || 3/ 2, - 1/2 |+- -+

>> i nver sa* B; #A mul t i pl i cação de uma mat r i z pel a sua i nver sa resulta numamat r i z i dent i dade#

+- -+| 1, 0 || || 0, 1 |+- -+

Se a matriz não possuir inversa, uma mensagem de erro ( FAIL) aparece. Para concatenar duas

matrizes, o comando é o mesmo para listas, A.B.

Para usar outras funções (mais ligadas às propriedades das matrizes e menos às suas características

numéricas) é necessário usar o pacote linal . Para usá-lo, a sintaxe é linalg::comando(Matriz), como

no exemplo abaixo:

>> l i nal g: : t r ( B) ; #Ret or na o t r aço ( soma dos el ementos da diagonalpr i nc i pal ) da matriz B#

5

0X3$'�7XWRULDO

��

Abaixo, mais alguns comandos no pacot linalg.

>> l i nal g: : det ( B) ; l i nal g: : det ( 2*B);-2-8

>> l i nal g: : det ( a*B) 2

-2 a

Acima é possível perceber uma propriedade do determinante de uma matriz: ao

multiplicarmos uma matriz 2x2 por uma constante a, o determinante desta fica multiplicado pela

constante elevada ao quadrado.

Seguem mais alguns comandos para trabalhar com matrizes:

>> l i nal g: : t r anspose(C)+- -+| 6, 9 || || 7, 9 |+- -+

>> l i nal g: : r andomMat r i x( 2, 2, Dom: : I nt eger ) ; #Ger a uma mat r i z 2x2 aleatóriacom ent r adas I nt ei r as; out r os t i pos de ent r adas: Real , Rat i onal, Complex#

+- -+| 4, -7 || || 6, 16 |+- -+

>> l i nal g: : r andomMat r i x( 3, 3, Dom: : I nt eger , - 20. . 20) ; #Uma mat r i z aleatóriacom ent r adas i nt ei r as ent re –20 e 20#

+- -+| - 10, 9 || || - 14, 11 |+- -+

A seguir, um importante teorema da Álgebra Linear será exemplificado com o uso do

MuPAD. É o Teorema de Cayley-Hamilton, que nos diz que uma matriz é raiz de seu polinômio

característico.

>> M: =mat r i x( 2, 2, [ [ 5, 7] , [ 4, 1] ] ) : #Cr i a uma matrix 2x2#>> I d: =mat r i x( 2, 2, [ [ 1, 0] , [ 0, 1] ] ) : #Cr i a a i dentidade 2x2#>> p: =l i nal g: : char pol y( M, x) ; #Cal cul a o pol i nômi o car act e- r ístico damat r ix M#

2 x - 6 x - 23

0X3$'�7XWRULDO

��

Agora use uma expressão para ver o que acontece quando “substituímos” a matriz M no

polinômio p (considere “23” como 23*Id):

>> M̂ 2 - 6* M – 23*Id+- -+| 0, 0 || || 0, 0 |+- -+

O resultado é uma matriz nula, como previsto pelo teorema.

6,67(0$6�/,1($5(6�(�27,0,=$d­2

Uma das mais importantes aplicações da Álgebra Linear aparece na resolução de sistemas de

equações lineares e problemas de otimização (programação matemática). O MuPAD tem recursos

para lidar com estes dois problemas de uma forma muito prática e rápida.

Por exemplo, imagine que queremos resolver o seguinte sistema:

x + y + z = 10 2x + y + z = 3 x - 2y + 4z = 11

No MuPAD, o procedimento seria o seguinte:

>> equacoes: ={ 2* x+y+z=3, x+y+z=10, x- 2* y+4* z=11} ; #Faz a variávelequacoes r eceber o s i stema#

{ x + y + z = 10, 2 x + y + z = 3, x - 2 y + 4 z = 11}

>> sol ucao: =sol ve( equacoes) ; #A var i ável sol ucao r ecebe a solução dosi s t ema#

{ [ x = - 7, y = 25/ 3, z = 26/3]}

Para resolução de problemas que procuram o valor máximo assumido por uma função cujas

variáveis devem satisfazer um sistema de inequações lineares, o MuPAD possui implementado o

algoritmo Simplex, que é o método mais rápido e eficaz para resolver este tipo de problema. Por

exemplo, considere o seguinte problema:

Maximizar Z = 4x + 3ySujeito a: 3x + 2y ��� 2x + 2y ��� x - y ���� x, y ��

No problema acima, deve-se obter o valor máximo da função Z( x, y) = 4x + 3y, dado que as

variáveis x e y devem ser positivas e obedecer às restrições dadas.

0X3$'�7XWRULDO

��

Este problema ficaria assim no MuPAD:

>> r est : =[ { 3* x+2* y<=6, 2* x+2* y>=4, y- x<=1, x>=0, y>=0}, 4*x+3*y ]; #

Ar mazenando as equações na var i ável rest#

[ { 0 <=x, 0<=y, y - x <=1, 4<=2x + 2y, 3x + 2y<=6}, 4x + 3y]

>> l i nopt : : maxi mi ze( r est ) ; # Agor a o MuPAD r esol ve o pr obl ema, analisando

o cont eúdo da var i ável r est#

[ OPTI MAL, { x = 4/ 5, y = 9/5}, 43/5]

Isto é, existe uma solução ótima no ponto (4/5, 9/5), e este ponto, quando substituído na

função objetivo, resulta num valor máximo de 43/5 para o problema.

Se traçarmos os gráficos das equações acima, teremos a figura abaixo, onde está rachurado de

verde a região dos pontos viáveis, ou seja, pontos que são satisfazem o sistema de inequações. Para

isso foram usados os comandos abaixo:

>> eqs: = i mpl i c i t ( [ 3* x+2* y- 6, 2* x+2* y- 4, y- x- 1] , x=- 1. . 4, y=-1..4): #Cria

uma i magem com as equações#

>> r egi ao: =Pol ygon( Poi nt ( 1/ 2, 3/ 2) , Poi nt ( 2, 0) , Poi nt ( 4/5, 9/5),

Cl osed=TRUE, Fi l l ed=TRUE, Col or =[ 0. 254, 0. 874, 0. 5] ) : #Cria a região

r achur ada#

>> pl ot ( r egi ao, eqs) ; #Pl ot a tudo#

3210-1

3.75

2.5

1.25

0

x

y

x

y

A biblioteca linopt, específica para lidar com Otimização Linear (inclusive Programação

Linear Inteira, usando o Algoritmo de Lang-Doing), possui vários recursos interessantes. Para

maiores detalhes, digite ?linopt.

0X3$'�7XWRULDO

��

2�&20$1'2�3/27

Quando as funções plotfunc2d/plotfunc3d são usadas, o MuPAD tenta gerar os melhores

parâmetros para cada gráfico, de acordo com as características da função. Assim, como esta

verificação é um processo heurístico, nem sempre ela funciona.

Uma maneira de contornar isso é usar a função plot, que é bem mais geral. A função plot faz

parte de uma biblioteca de comandos. Uma biblioteca é composta de vários comandos que para sere

usados necessitam de uma chamada especial, ou seja, para usar o comando com da biblioteca bib,

deve-se digitar bib::com(argumentos). Para evitar a digitação repetitiva de plot::comando() para

acessar algum comando da biblioteca plot, deve-se antes carregar o pacote plot, que pode ser feito

com o comando export plot. Então, nosso primeiro comando antes de usar as funções abaixo deve ser:

>> expor t ( pl ot ) :

Para usar a função plot, é necessário antes criar o objeto que se quer plotar. Isso pode ser feit

com um dos comandos da biblioteca plot. Depois dos objetos criados, resta usar o comando

plot(objeto1, objeto2, ..) para que todos sejam mostrados.

Os objetos mais comuns, os quais serão tratados aqui, são: Curvas em 2D e 3D, Pontos,

Polígonos e Gráficos de Funções implícitas. Existem comandos para plotagem de funções na

biblioteca plot (Function2d e Function3d), que funcionam analogamente aos comandos plotfunc2d e

plotfunc3d, já tratados neste tutorial

As funções para criação de curvas são Curve2d e Cur ve3d, para curvas bidimensionais e

tridimensionais, respectivamente. Nelas, a curva deve ser dada de forma paramétrica.

Parametrizar uma curva consiste em descrevê-la considerando

as coordenadas x e y de seu ponto genérico P = (x,y)

como funções de uma única variável independente t.

Por exemplo:

>> c i r cul o:= Cur ve2d( [ cos( t ) , si n( t ) ], t =0. . 2* PI ):

>> cur va:= Cur ve2d( [ t, l n( t ) ] , t = 1. . 2*PI):

>> pl ot ( ci r cul o, cur va)

P

x(t)

y(t)

6.2553.752.51.250

1.5

1

0.5

0

-0.5

-1

x

y

x

y

0X3$'�7XWRULDO

��

No caso de curvas em 3D:

>> gr af i co: =Cur ve3d( [ t , cos( t ) , ( t +1) ] , t =0. . 10, Col or =RGB::Blue):>> pl ot ( gr af i co)

O mesmo gráfico pode ser plotado em outro estilo. Um estilo que dá bem a idéia de perspectiva em3d é o Impulses:

>> gr af i co: = Cur ve3d( [ t , cos( t ) , ( t +1)], t =0. . 10, St yl e=[ I mpul ses]):>> pl ot ( gr af i co)

Para aumentar a resolução do gráfico, usaremos a opção adiciona Grid:

>> gr af i co: = Cur ve3d( [ t , cos( t ) , ( t +1)], t =0. . 10, St yl e=[ I mpul ses],Gr i d=[ 250] ):>> pl ot ( gr af i co)

10

7.55

2.50

10.50-0.5-1

10

7.5

5

2.5

x

y

z

10

7.55

2.50

10.50-0.5-1

10

7.5

5

2.5

x

y

z

10

7.55

2.50

10.50-0.5-1

10

7.5

5

2.5

x

y

z

Funções implícitas e equações

A plotagem de gráficos de equações pode ser feita com o comando implicit, da biblioteca plot,

que é voltado para trabalhar com funções implícitas. Se for usada uma expressão ao invés uma

equação, o MuPAD transforma esta expressão em uma equação, igualando-a a zero. Os pontos

pertencentes à estes gráficos são resolvidos usando métodos numéricos, portanto, o valor da variável

DIGITS pode incluenciar a qualidade dos desenhos.

>> pl ot ( i mpl i c i t ( x^ 2+y^ 2=9, x=- 4. . 4, y=- 4. .4))>> pl ot ( i mpl i c i t ( 5* x^ 2+2* y^ 2- 12, x=- 4. .4, y=- 4. .4))>> pl ot ( i mpl i c i t ( 5* x^ 2- 12* y^2- 7, x=- 4. .4, y=- 4. .4))

2.51.250-1.25-2.5

2.5

1.25

0

-1.25

-2.5

x

y

x

y

1.510.50-0.5-1-1.5

2.5

1.25

0

-1.25

x

y

x

y

420-2-4

2.5

1.25

0

-1.25

x

y

x

y

0X3$'�7XWRULDO

��

Os recursos do implicit podem ser usados para plotar uma família de equações (funções),

usando a opção Contours. Seu uso é simples: implicit( f, x=a..b, y=c..d, Contours=[c1, c2, ..., cn] )

plota as equações f=c1, f=c2, ..., f=cn juntas. Por exemplo, a seguir estão plotados os gráficos de

x2+y2=1, x2+y2=4 e x2+y2=9 e de uma família de equações elípticas.

>> pl ot ( i mpl i c i t ( x^2+y^2, x=- 10. . 10, y=- 10. . 10, Cont our s=[1,4,9]))

>> pl ot ( i mpl i c i t ( x^ 3+2* x+2- y^ 2, x=- 10. . 10, y=- 10. . 10,Cont our s=[ 0, 1, 2, 3] ))

2.51.250-1.25-2.5

2.5

1.25

0

-1.25

-2.5

x

y

x

y

21.510.50-0.5

3.75

2.5

1.25

0

-1.25

-2.5

-3.75

x

y

x

y

Polígonos

Para criar polígonos, é necessário definir os vértices. Isso é feito com o comando Point(x,y) ouPoint(x,y,z). Assim:>> a: =Poi nt ( 1, 3) : b: =Poi nt ( 5, 6) : c : =Poi nt ( 5, 2) : d: =Poi nt(0,0):>> pl ot ( a, b, c,d)

>> pl ot(>> Poi nt ( 0, 0, 0, Poi nt Wi dt h=100, Col or =RGB: :Blue) ,>> Poi nt ( 1, 2, 2, Poi nt Wi dt h=100, Col or =RGB::Red) ,>> Poi nt ( 4, 5, 6, Poi nt Wi dt h=100, Col or =RGB: : Black)>> )

53.752.51.250

5

3.75

2.5

1.25

0

x

y

x

y

43

21

0

5

3.75

2.5

1.25

0

5

3.75

2.5

1.25

0

x

y

z

0X3$'�7XWRULDO

��

Agora os polígonos correspondentes:

>> pl ot ( Pol ygon( a, b, c, d))>> pl ot ( Pol ygon( a, b, c, d, Cl osed=TRUE))

53.752.51.250

5

3.75

2.5

1.25

0

x

y

x

y

53.752.51.250

5

3.75

2.5

1.25

0

x

y

x

y

Seguem dois polígonos no espaço. O segundo deles, cujo comando foi omitido, tem uma opçãoadicional, Filled=TRUE, que pode ser inserida logo após a opção Closed=TRUE.

>> pl ot(>> Pol ygon(>> Poi nt ( 0, 0, 0, Poi nt Wi dt h=100, Col or =RGB: :Blue) ,>> Poi nt ( 8, 6, 2, Poi nt Wi dt h=100, Col or =RGB::Red) ,>> Poi nt ( 4, 5, 6, Poi nt Wi dt h=100, Col or =RGB: : Black),>> Cl osed=TRUE) , Axes=Cor ner)

8

64

20

53.75

2.5

1.25

0

5

3.75

2.5

1.25

0

x

y

z

x

y

z

8

64

20

53.75

2.5

1.25

0

5

3.75

2.5

1.25

0

x

y

z

x

y

z

Outro comando para lidar com plotagem de pontos é o Pointlist. Com ele fica possível plotar

gráficos discretos ou polígonos.

>> pl ot ( Poi nt l i s t ( Poi nt ( i , si n( i ) ) $i =1..8) )

Com a opção DrawMode=Connected, os pontos ficam conectados.>> pl ot ( Poi nt l i s t ( Poi nt ( i , si n( i ) ) $i =1. . 8, Dr awMode=Connected))

7.56.2553.752.51.25

0.75

0.5

0.25

0

-0.25

-0.5

-0.75

x

y

x

y

7.56.2553.752.51.25

0.75

0.5

0.25

0

-0.25

-0.5

-0.75

x

y

x

y

0X3$'�7XWRULDO

��

$1,0$d®(6

Primeiras Idéias

O MuPAD vem configurado para exibir todos os gráficos numa mesma janela (fora da planilha de

comandos). Assim, a primeira idéia que tivemos para criar uma animação foi preparar uma linha de

comando usando vários comandos plot juntos, simulando uma animação:

>> pl ot f unc2d( si n( x), x=0. . 2* PI ) ;>> pl ot f unc2d( sin( x+PI / 8) , x=0. . 2* PI );>> pl ot f unc2d( sin( x+PI / 4) , x=0. . 2* PI );

Com isso, teremos a sequência de gráficos abaixo, que, quando apresentados numa mesma janela

num pequeno intervalo de tempo, produz uma animação:

6.2553.752.51.250

1

0.5

0

-0.5

-1

x

y

x

y

sin(x)

6.2553.752.51.250

1

0.5

0

-0.5

-1

x

y

x

y

sin(x + 1/8*PI)

6.2553.752.51.250

1

0.5

0

-0.5

-1

x

y

x

y

sin(x + 1/4*PI)

Esta técnica funciona bem, mas tem um problema: a velocidade com a qual ocorre a troca de gráficos

na tela depende da velocidade do computador. Assim, em alguns computadores esta troca era quase

imperceptível. Desta forma, precisávamos de algo que fizesse o computador parar o processamento

por um tempo, e não há comando de espera (como o sleep, ou wait) no MuPAD.

Usando laços

Para evitar a digitação de todos os gráficos na linha de comando, podemos recorrer a um laço. Um

laço é uma função que permite que se crie vários comandos, usando uma variável pré-determinada.

No nosso caso, usaremos o for. Por exemplo:

>> soma:=0>> for i f r om 1 t o 10 do soma:= soma+i; end_f or;

55

Na primeira linha do comando acima, foi dado o valor de 0 à variável soma. Na segunda linha, o que

o comando for faz é: “para i de 1 até 10, faça a variável soma receber o seu valor atual somado ao

valor de i” . Teremos a seguinte tabela, conhecida como tabela de rastreio:

I soma I Soma i soma-- 0 4 6+4=10 8 28+8=361 0+1=1 5 10+5=15 9 36+9=452 1+2=3 6 15+6=21 10 45+10=553 3+3=6 7 21+7=28

0X3$'�7XWRULDO

��

Logo, quando i chegar a 10, teremos a variável soma igual a 55. Os valores de i são incrementados

por uma unidade a cada passagem. É possível alterar o valor de incremento, e é o que faremos agora:

>> f or i f r om 1 t o 10 step 0.5 do>> pl ot f unc2d( si n( x+i ) , x=- i . . i ) ; end_for

A opção .. step 0.5 .. determina que os incrementos sejam de 0.5, ou seja, i vai assumir os valores 1,

1.5, 2, 2.5, ... . Repare que os extremos do intervalo também estão variando com o valor de i, o que dá

a impressão do gráfico estar sendo realmente construído.

Agora vamos a uma animação bem interessante. Sabemos que dois pontos determinam uma reta. Por

exemplo, a reta y =3x+1 passa pelos pontos (0, 1) e (10, 31). Faremos um ponto caminhar sobre o

segmento de reta (0, 1)_(10, 31). Precisamos plotar os dois extremos e o ponto. Assim, teremos três

objetos dentro do plot. O incremento será de 0.05, para o movimento ser mais lento.

>> f or i f r om 1 t o 10 st ep 0. 05 do pl ot ( Poi nt ( 0, 1), Point(10,31),Poi nt ( i , 3* i +1) ) ; end_for

Outros dois comandos que precisaremos são o indexador $, e os comandos max e min, e,

principalmente, o uso em conjunto deles. O comando max determina o maior dentre uma lista de

números e o min determina o menor.

>> max( 1, 2, 3, 4, 5, 6, 7) 7>> mi n( 5, 6, 7, 8,3) 3

O indexador serve para criar sequências. Ele deve ser lido como tal que” .

>> i $ i =1..101, 2, 3, 4, 5, 6, 7, 8, 9, 10

>> x+i $ i=1..5x + 1, x + 2, x + 3, x + 4, x + 5

>> f : =x- >l n(x)x - > l n( x)

>> max( f ( x) $ x=1..20)l n( 20)

O último comando acima determina o valor máximo entre ln(1), ln(2), ..., ln(20).

Criando procedimentos

Um procedimento nada mais é que uma função. Usamos procedimentos quando precisamos defini

uma função mais complexa. Um procedimento é definido com o comando proc.

No exemplo seguinte, dada uma função f e um ponto a, será plotado o gráfico de f e a reta tangente à f

no ponto (a,f(a)). O gráfico será plotado no intervalo (a-5,a+5).

0X3$'�7XWRULDO

��

52.50-2.5-5

5

2.5

0

-2.5

-5

x

y

x

y

>> pl ot a: =pr oc( f , a) begin>> y: =x- >f ( a) +f ' ( a) * ( x- a) ;>> pl ot f unc2d( f ( x) , y(x), x=a- 5. . a+5)>> end_pr oc;

>> f : =x- >x^2- 5* x+2 x - > x^2 – 5*x + 2>> pl ot a( f , 3)

Animações

Agora começaremos a animar os gráficos. De início, vamos a um exemplo de uma curva famosa, cuja

animação exigirá o conceito de coordenadas polares: a espiral de Arquimedes. Vale lembrar que o

pacote plot deve estar exportado para que os comandos que seguem funcionem (isto pode ser feito

com o comando export(plot)). Introduziremos o conceito de coordenadas polares, para simplificar a

equação da espiral.

As coordenadas polares de um ponto P = (x, y) do plano são a distância || ||r OP=uuur

e o ângulo θ que o

vetor OPuuur

faz com o eixo X.

Assim, dado um ponto (x, y), suas coodenadas polares são (θ , r) = ( arcy

tgx

, 2 2x y+ ). Portanto, a

equação de uma circunferência em coordenadas polares fica r = 0r , onde 0r é o raio da

cincunferência.

A equação da espiral desejada é r = θ , ou seja, a distância da curva à origem varia com o ângulo. No

MuPAD, para plotar curvas usando coordenadas polares, existe o comando polar.

A sintaxe é polar( [ r(θ ),θ ] , θ =a..b).

Para plotar a espiral, o comando é:>> pl ot ( pol ar ( [ t , t ] , t =0. . 2*PI))

Nossa animação consistirá em plotar várias espirais em sequência, aumentando, em cada uma delas,

intervalo de plotagem, gerando uma animação. Os dois pontos que estão sendo plotados terão sua

importância justificada logo a frente.

>> f or i f r om 1 t o f l oat ( 3* PI) step 0.5 do>> pl ot ( Poi nt ( - 5, - 5) , Poi nt ( 5,5),>> pol ar ( [ t , t ] , t =0. . i ) , Scal i ng=Const r ained);>> end_for;

7.552.50

25

20

15

10

5

0

-5 x

y

x

y

x^2 - 5*x + 2, x - 7

0X3$'�7XWRULDO

��

Extenderemos agora a animação do ponto que percorre uma reta, produzida anteriormente,

para uma mais geral, de um ponto percorrendo o gráfico de uma função qualquer.

O que queremos então é, dada uma função f(x), plotar o ponto (x,f(x)), depois o ponto

(x+i,f(x+i)), depoi (x+i+i,f(x+i+i)), prosseguindo até um certo limite.

Nossa função será armazenada na variável curva, e o ponto, cujas coordenadas dependerão de

um parâmetro i, será p(i). A cada valor de i, será plotada a curva e um ponto.

>> cur va: =Cur ve2d( [ t , s i n( t ) ] , t =0. .2*PI);>> p: =x- >Poi nt ( [ x, si n( x) ] , Col or =RGB: : Blue);>> f or i f r om 1 t o f l oat ( 2* PI) step 0.5 do>> pl ot ( p( i ) , cur va);>> end_for;

Se formos plotar somente o ponto, sem a curva por baixo, precisaremos definir os valores de

máximo e de mínimo da função no intervalo de animação para travar a região de plotagem, o que será

feito plotando os extremos da região retangular na qual a função se encontra, ou seja, se [a,b] é o

intervalo de plotagem, e max e min são os valores de máximo e mínimo e [a,b] , respectivamente,

teremos a seguinte região:

Assim, o procedimento conterá os seguintes comandos, que determinam dois vértices da região

retangular e mais a origem, se for necessário:

>> zer o:= Poi nt ( 0, 0) ;>> maxi mo: =max( f ( x) $x=a. . b) ;>> mi ni mo: =mi n( f ( x) $x=a. . b) ;>> pmaxi mo: =Poi nt ( b, maxi mo, Col or =RGB: : White);>> pmi ni mo: =Poi nt ( a, mi ni mo, Col or =RGB: : Whi t e);

Um ponto P = (x, f(x)) no gráfico pode ser determinado com a função abaixo:

>> p: =x- >Poi nt ( [ x, f ( x)]);

Assim, nosso procedimento pode ser como o abaixo:>> pont i nho:= pr oc( f , a, b) begi n>> zer o:= Poi nt ( 0, 0);>> maxi mo: =max( f ( x) $x=a. . b);>> mi ni mo: =mi n( f ( x) $x=a. . b);>> pmaxi mo: =Poi nt ( b, maxi mo, Col or =RGB: : White);>> pmi ni mo: =Poi nt ( a, mi ni mo, Col or =RGB: : White);

a b

(a,max)

(b,min)

0X3$'�7XWRULDO

��

>> p: =x- >Poi nt ( [ x, f ( x)]);>> f or i f r om a t o b s t ep 0. 1 do pl ot ( pmaxi mo,pminimo,p(i));>> end;>> end_pr oc;

O laç for, dentro do procedimento, faz o seguinte: para i indo de a até b (de 0.1 em 0.1), mostre

pmaximo, pminimo e p(i). O resultado será uma animação. A velocidade pode ser controlada com

tamanho do passo do for.

Para usar o procedimento pontinh , precisamos definir uma função e dar o extremo do intervalo que

queremos plotar, por exemplo:

>> f: =x- >s i n( x) +cos( x);>> pont i nho( f , - 5,5)

Podemos plotar, junto com a animação, o gráfico da função que o ponto percorre, adicionando uma

única linha no procedimento. Daremos um novo nome a este procedimento. Note que mudamos a cor,

estilo e tamanho do ponto animado. Os novos comandos estão em negrito.

>> f pont i nho: =pr oc( f , a, b) begin>> zer o:= Poi nt ( 0, 0) ;>> maxi mo: =max( f ( x) $x=a. . b) ; mi ni mo: =mi n( f ( x)$ x=a. . b);>> pmaxi mo: =Poi nt ( b, maxi mo, Col or =RGB: : White);>> pmi ni mo: =Poi nt ( a, mi ni mo, Col or =RGB: : White);>> p: =x- >Poi nt ( [ x, f ( x)], Color=RGB::Blue, PointWidth=50,PointStyle=FilledCircles) ;>> curva:=Curve2d([t,f(t)],t=a..b);>> f or i f r om a t o b step 0.2 do>> pl ot ( pmaxi mo, pmi ni mo, p(i), curva) ;>> end;>> end_pr oc;

>> f: =x- >s i n( x) +cos( x);>> f pont i nho( f , - 5, 5)

A animação acima pode ser facilmente alterada para que a curva seja desenhada de acordo com o

movimento do ponto, modif icando as seguintes linhas (em negrito):

-- corte -->> p: =x- >Poi nt ( [ x, f ( x) ] , Col or =RGB: : Bl ue, Poi nt Width=50,Poi nt St yl e=Fi l l edCi r c l es);>> f or i f r om a t o b step 0.2 do>> pl ot ( pmaxi mo, pmi nimo,>> p( i ) , Cur ve2d( [ t , f ( t ) ] , t =a-1..i) );>> end;-- corte --

Agora que já temos um processo para um ponto percorrer um gráfico, o próximo passo é fazer com

que uma reta tangente percorra o gráfico. A idéia aqui é plotar, em cada ponto do gráfico, uma ret

tangente, ou seja, plotar a ret y=f(k)+f´(k)* (x-k), com intervalo de plotagem numa vizinhança de k.

Precisaremos definir, novamente, a região retangular de plotagem, com um procedimento análogo a

citado acima. Depois, é só fazer k variar de a até b, que será o intervalo da animação.

0X3$'�7XWRULDO

��

52.50-2.5-5

10

5

0

-5

x

y

x

y

>> r t : =pr oc( f , x0, x1) begin>> cur va:= Cur ve2d( [ t , f ( t ) ] , t =x0. . x1);>> maxi mo: =max( f ( x) $x=x0. . x1);>> mi ni mo: =mi n( f ( x) $x=x0. . x1);>> pmaxi mo: =Poi nt ( x1, maxi mo+1, Col or =RGB: : White);>> pmi ni mo: =Poi nt ( x0, mi ni mo- 1, Col or =RGB: : White);>> cai xa:= pmaxi mo, pmi ni mo;>> f or k f r om x0 t o x1 step 0.05 do>> y: =x- >f ( k) +f ' ( k) * ( x- k);>> r et a: =Cur ve2d( [ t , y( t ) ] , t =( k- 0. 7) . . ( k+0.7),>> Col or =RGB: : Bl ue );>> pl ot ( r et a, cai xa, cur va);>> end_f or;>> end_pr oc;

>> f: =x- >s i n( x) +cos( 4* x) +2* x+1;>> r t ( f , - 5,5)

Construção de cônicas

Circunferência

A idéia aqui é simular a construção de uma circunferência, enfatizando sua principal característica:

ser o lugar geométrico dos pontos que equidistam de um dado ponto. A maneira prática de se

construir uma circunferência é fixar a ponta de um fio num ponto e uma caneta na outra ponta e fazer

o fio girar, marcando com a caneta todo o trajeto – uma circunferência. Assim, dados o centro e o

raio, precisamos fazer com que uma circunferência seja “ construída” ponto a ponto, e uma linha siga

esta construção.

O movimento da linha pode ser visto como o segmento de reta (a,b)_(a+r* cos(k,b+r*sin(k)), k varia

de 0 até 2*Pi. A circunferência “em construção” pode ser dada pela curva parametrizada por

(r* cos(t)+a,r* sin(t)+b), plotada com t no interval [0,i] , onde i varia de 0 até 2*Pi. Assim, teremos

desde um único ponto à uma circunferência completa.

A definição da região retangular neste caso é diferente: como nossa circunferência terá centro e

(a,b) e raio r, deveremos marcar os pontos (a-r,b-r) e (a+r,b+r) como limitantes do retângulo, e de

preferência que estes pontos sejam brancos, para não aparecerem na animação. O resultado será:

>> c i r c: =pr oc( a, b, r ) begin>> f or i f r om 0. 05 t o f l oat ( 2* PI) step 0.2 do>> pont os: =Poi nt ( 0, 0, Col or =RGB: : Whi te),>> Poi nt ( a+r , b+r , Col or =RGB: : White),>> Poi nt ( a- r , b- r , Col or =RGB: : White),>> Poi nt ( a, b);>> pl ot ( pont os,>> Cur ve2d( [ r * cos( t ) +a, r * si n( t ) +b], t =0. . i),>> l i ne( [ a, b] , [ r * cos( i ) +a, r * si n( i ) +b] , Col or =RGB: : Bl ue),>> Scal i ng=Const r ai ned, Label i ng=FALSE, Ti cks=None)>> end_f or;>> end_pr oc;

0X3$'�7XWRULDO

��

A sintaxe para a animação é circ(a,b,r), onde (a,b) é o centro da circunferência e r é seu raio.>> c i r c( 2, 4,5);

Parábol

A parábola é o lugar geométrico dos pontos que equidistam de uma reta (diretriz) e de um ponto

(foco). Assim, dado o foco (a,b) e a reta diretriz y=-p, os pontos que pertencerão à serão os pontos

(x,y) que tornarem verdadeira a equação (x - a) 2 + (y - b)2 = (y + p) 2. Por uma mudança de

coordenadas, podemos considerar o ponto (a,b) sobre o eixo Y e, mais ainda, fazer a coincidir com p.

Assim, teremos a equação y=x2/(4p), que é bem conhecida. Logo, dado o valor de p, a equação da

parábola ficará determinada.

Nossa animação consistirá de uma parábola sendo gerada, um segmento de reta ligando o ponto da

parábola ao foco e um outro segmento ligando este mesmo ponto à reta geratriz. Como os pontos da

parábola podem ser parametrizados na forma ( t, t2/(4p)), o procedimento é imediato. Usaremos u

segundo argumento, m, somente para controlar o intervalo de plotagem (que será simétrico, [ -m,m] ).

>> par a: =pr oc( p, m) begin>> f or i f r om - m to m step 0.5 do>> cur va: =t - >Cur ve2d( [ k, k^ 2/ ( 4* p) ] , k=- m-1..i );>> di r et r i z:= Cur ve2d( [ k, - p] , k=- m- 1. .m, Col or =RGB:: Or ange) ;>> f oco: =Poi nt ( 0, p);>> s1: =l i ne( [ i , i ^2/ ( 4* p) ] , [ 0, p] , Col or =RGB::Blue);>> s2: =l i ne( [ i , i ^2/ ( 4* p) ] , [ i , - p] , Col or =RGB: :Black);>> pl ot ( cur va( t ) , di r et r i z, f oco, s1, s2, Label i ng=FALSE, Ti cks=None);>> end_for;>> end_pr oc;>> par a( 2, 10)

0X3$'�7XWRULDO

��

Elipse

Dando continuidade ao nosso processo de construção das cônicas, agora é a vez da elipse. A elipse édefinida como o lugar geométrico dos pontos cujas soma das distâncias a dois pontos dados é uma

constante. A equação geral da elipse de centro 0 0( , )x y e semi-eixos a e b é 2 2

0 02 2

( ) ( )1

x x y x

a b

− −+ = .

Novamente teremos de recorrer às coordenadas polares para animar a elipse. A equação polar da

elipse é 1 cos

mr

n θ=

−, onde (0,1)n∈ e 0m> . Após algum algebrismo, pode-se mostrar que est

equação é equivalente a 2 2

2 2

( )1

x c y

a b

− + = , onde 21

ma

n=

−,

21

mb

n=

− e c an= . Tomaremos

1

2n =

e m = 10. Assim, nossa equação fica 2 2

2 2

( 20/ 3)1

(40/ 3) (20/ 3)

x y− + = , que é uma elipse de centro e

(20/3, 0) e semi-eixos 40/3 e 20/ 3 . Seus focos estão em (0,0) e (2 ,0) (40/ 3,0)c = .

O que teremos de fazer é o seguinte: fazer um ponto percorrer a elipse, estando este ligado aos pontos

(0, 0) e (40/3, 0) por segmentos de retas. Note que não estamos definindo um procedimento desta vez.

>> m: =10: n: =0.5:

>> el i pse: =k- >pol ar ( [ m/ ( 1- n* cos( t ) ) , t ] , t=0..k );

>> pont o: =t - >Point(>> [ m* cos( t ) / ( 1- n* cos( t ) ) , m* si n( t ) / ( 1- n* cos(t))],>> Col or =RGB: : Bl ue, Poi nt Wi dt h=40);

>> segment o1: =t - >l i ne( [ 0, 0],>> [ m* cos( t ) / ( 1- n* cos( t ) ) , m* si n( t ) / ( 1- n* cos(t))],>> Col or =RGB: : Or ange);

>> segment o2: =t - >l i ne( [ 40/ 3, 0],>> [ m* cos( t ) / ( 1- n* cos( t ) ) , m* si n( t ) / ( 1- n* cos(t))],>> Col or =RGB: : Or ange );

>> r egi ao: =Poi nt ( - 15, - 15, Col or =RGB: : Whi t e) , Poi nt (15,15,Col or =RGB: : Whi t e);

>> f or i f r om 0. 1 t o f l oat ( 2* PI) step 0.1 do>> pl ot ( el i pse( i ) , pont o( i ) , segment o1( i ) , segment o2( i), regiao,>> Scal i ng=Const r ai ned, Label i ng=FALSE, Ti cks=None) ; end_for;

0X3$'�7XWRULDO

��

107.552.50-2.5-5-7.5

5

2.5

0

-2.5

-5

x

y

x

y

Hipérbole

A hipérbole é o lugar geométrico dos pontos cuja diferença das distâncias a dois pontos fixos é

constante.

Um ramo da hipérbole pode ser parametrizado como 2 20 0( ) ( )

ar t x b t y

b= + + − , onde (x0, y0) é seu

centro e a, b os semi-eixo ao longo dos eixos X e Y, respectivamente. Assim, plotando [ , ( )]t r t

teremos um ramo da hipérbole ao longo do eixo X e plotando [ ( ), ]r t t teremos um ramo ao longo do

eixo Y. Pela simetria, para plotarmos os dois ramos, basta usar r(t) e –r(t). Consideraremos

(x0, y0) = (1, 2), a = 4, b = 3.

>> x: =t - >x0+a/ b* sqr t ( b^2+( t - y0)^2 );

>> x0:=0;>> y0:=0;>> a: =4;>> b: =3;>> f oco: =sqr t ( a^ 2+b^2);

>> f 1: =Poi nt ( f oco, y0);>> f 2: =Poi nt ( - f oco, y0);

>> r ef er enci a: =Cur ve2d( [ x( t ) , t ] , t =- 7. . 7, Col or =RGB::White);

>> esquer do: =i - >Cur ve2d( [ x( t ) , t ] , t=-6..i);>> di r ei t o: =i - >Cur ve2d( [ - x( t ) , t ] , t=-6..i);

>> l 1: =i - >l i ne( [ f oco, y0] , [ x( i ) , i ] , Col or =RGB: : Orange );>> l 2: =i - >l i ne( [ - f oco, y0] , [ x( i ) , i ] , Col or =RGB: : Orange );

>> L1: =i - >l i ne( [ f oco, y0] , [ - x( i ) , i ] , Col or =RGB: :Blue );>> L2: =i - >l i ne( [ - f oco, y0] , [ - x( i ) , i ] , Col or =RGB::Blue );

>> f or i f r om -5 to 5 do;>> pe: =Poi nt ( [ x( i ) , i ] , Col or =RGB::Blue );>> pd: =Poi nt ( [ - x( i ) , i ] , Col or =RGB::Blue );>> pl ot ( L1( i ) , L2( i ) , l 1( i ) , l 2( i ) , r ef erencia,>> esquer do( i ) , di r ei t o( i ) , pe( i ) , pd(i));>> end_for

%,%/,2*5$),$

[1] OEVEL, W., WEHMEIER, GERHARD, J., The MuPAD Tutorial, Paderborn, 2002.

[2] MOURA, A. O., SANTOS, L. M. R., Introdução ao Maple, Viçosa, 2001.

[3] BRANDÃO, L. O., WATANABE, C. J., Uma Introdução ao MuPAD, São Paulo, 1997.

[4] VAZ, C. L. D., Aprendendo MuPAD, Labmac, UFPA, 2001.

[5] ÁVILA, G., Cálculo 2: funções de uma variável, LTC, Rio de Janeiro, 1989.