Upload
dangphuc
View
228
Download
0
Embed Size (px)
Citation preview
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'8d2
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,=$d2
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.