MUPAD LIGHT
TUTORIAL
Ricardo Miranda Martins
[email protected]
MuPAD Tutorial
ÍNDICE
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 LINEAR
19
SISTEMAS LINEARES E OTIMIZAÇÃO
22
O COMANDO PLOT
24
ANIMAÇÕES
28
BIBLIOGRAFIA
36
2
MuPAD Tutorial
INTRODUÇÃO
Dentre as ferramentas computacionais que podem ser utilizadas para se resolver um
determinado problema, existem aquelas puramente numéricas, que utilizam 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. Outra
vantagem da computação simbólica é a possibilidade 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
3
MuPAD Tutorial
INTERFACE, ENTRADA E SAÍDA DE COMANDOS
Ao ser iniciado, o MuPAD fica pronto para receber instruções. Sua janela é bem simples, com
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.
File
Save as Salva o conteúdo
atual da planilha
Print
Imprime a
planilha atual
Print
Visualiza a
Preview impressão
Edit
Undo
Print
Setup
Configura a
impressão
Paste
Exit
Fecha o MuPAD
Delete
All
Session
Evaluate
Pretty Print
Text width
Stop Kernel
Recortar
Copiar
Colar
Cut
Copy
Desfaz o último
comando
Recorta a seleção
atual
Copia a seleção
atual
Status
bar
Options
Cola o conteúdo
da área de
transferência
Apaga toda a
planilha atual
Executa linha
de comando
atual
Alterna o modo
de apresentar
os resultados
Configura o
tamanho do
texto
Força a parada
do comando
atual
Imprimir
View
Toolbar
Help
Browse Manual
Open tutorial
Mostra/Oculta os
ícones
Mostra/Oculta a
barra de status
Opções de fonte e
caminho de
bibliotecas
Procura algo o
sistema de
ajuda
Abre o tutorial
interno
Help topics
Mostra os
tópicos da ajuda
Register
Registra o
MuPAD Light
About ...
Informações
sobre o MuPAD
Executar linha
Parar computação
Iniciar Tutorial interno
Procurar na ajuda
A entrada de comandos é bem intuitiva, 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).
4
MuPAD Tutorial
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ção 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:
5
MuPAD Tutorial
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.
ARITMÉTICA
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 resposta
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:
>> log(2,8); #Calcula o log de 8 na base 2#
3
ficaria no MuPAD:
Agora, as operações aritméticas básicas:
>> 2+3; #Soma#
5
>> 2*3; #Multiplicação#
6
>> 6/2; #Divisão#
3
>> sqrt(9); #Raiz quadrada de 9#
3
6
MuPAD Tutorial
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/2
3/2
>> float(3/2)
1.5
>> sqrt(6)
1/2
6
>> float(sqrt(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:
>> float(PI)
3.141592654
>> float(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 irá retornar o valor desta expressão.
2
PI exp(1)
>> float(%);# Usando float sem reescrever toda a expressã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-infinity
-infinity
>> infinity/infinity; # Cuidado! Isso não vale 1!#
undefined
Em alguns cálculos envolvendo o infinito o MuPAD calcula o limite para exibir o resultado:
>> 1/infinity
0
7
MuPAD Tutorial
Existem funções específicas para lidar com aritmética. Abaixo seguem algumas delas:
>> abs(-2); # Retorna o módulo de um número#
2
>> round(1.51); #Arredondamento padrão, para o inteiro mais próximo#
2
>> ifactor(338272); # Fatora em primos um dado inteiro#
5
2
2 11 31
>> isprime(1001); isprime(3847); #Verifica se um número é primo#
false
>> 23 mod 5; #Retorna o resto da divisão do primeiro parâmetro pelo
segundo#
3
>> 23 div 5; #Retorna o quociente na divisão do primeiro parâmetro pelo
segundo#
4
NÚMEROS COMPLEXOS
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= -1. No MuPAD eles sã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: #Define o número complexo x#
>> y:=3*I-5: #Define o número complexo y#
>> x+y; x*y; #Algumas operações#
- 4 + 5 I
- 11 - 7 I
>> x^3; #Potenciação de um número complexo#
- 11 - 2 I
>> x/y; #Divisão entre complexos#
1/34 - 13/34 I
>> abs(x); #Retorna a norma de x#
1/2
5
>> Re(x); #Parte real de x#; Im(x); #Parte imaginária de x#
1
2
>> 1/x; #Inverso de x#
1/5 - 2/5 I
ÁLGEBRA BÁSICA
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 HP 48 / 49), o MuPAD pode reconhecer e operar objetos tais como
polinômios, funções, matrizes, entre outros. Inicialmente lidaremos com polinômios em uma variável.
8
MuPAD Tutorial
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:
>> solve(18*x^2-27*x+26*x^3+9*x^4+x^5-27 , x); # Resolve o polinômio em
relação à variável x, ou seja, encontra as raí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:
>> solve(x^6+x^2+x^3+x,x)
2
{-1, 0} union RootOf(X2
3
4
- X2 + 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 da s
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.
>> float(%)
{-1.0, 0.0} union {- 0.3518079518 + 0.7203417364 I,
- 0.3518079518 - 0.7203417364 I, 0.8518079518 - 0.911292162
0.8518079518 + 0.911292162 I}
I,
>> q:=x^3-9*x
3
x
- 9 x
>> solve(q); #Encontra as raí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 lineares#
{x + y = 3, 2 x - y = 7}
>> solve(equacoes)
{[x = 10/3, y = -1/3]}
>> eq:={x^2-y=7, x+y^2=1}; #Agora com equações não-lineares#
2
2
{x + y = 1, x - y = 7}
>> solve(eq)
{[x = -3, y = 2]}
9
MuPAD Tutorial
O comando solve para equações transcendentes:
>> solve(sin(x)=1/2)
x in { 1/6*PI + 2*PI*X41 |
in Z_ }
X41 in Z_ } union
{ 5/6*PI + 2*PI*X42 |
X42
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:
>> solve(x^2-2*x+4<0)
{}
>> solve(x^2-2*x+4>0)
x in R_
2
2
(Note que x - 2x + 4 = (x - 2) , que nunca é menor que zero.)
>> solve(x^2-5*x+6>0)
x in ]-infinity, 2[ union ]3, infinity[
A resposta, na forma de intervalo, quer dizer x pertence a ( , 2) U (3,
).
Abaixo seguem alguns comandos úteis para trabalhar com polinômios.
>> p:=x^2+4*x+2: q:=x^3+4:
>> factor(p+2); #Fatora polinômios#
2
(x+2)
>> factor(q-5)
2
(x - 1) (x + x + 1)
>> expand(p*q); # Expande um polinômio#
2
3
4
5
16 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.
>> divide(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:
>> divide(q,p)
x – 4, 14x + 12
Para obter somente o quociente e/ou o resto de uma divisão, podemos fazer como abaixo:
>> divide(q,p, Quo); #Retorna o quociente da divisão#
x - 4
>> divide(q,p, Rem); #Retorna o resto (Remainder) da divisão#
14 x + 12
10
MuPAD Tutorial
Para resolvermos uma equação polinomial, o comando é novamente o solve:
>> solve(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+sin(x)^2: # “sin” (sine) é a função seno#
>> simplify(a)
1
>> b:=(x^2-1)/(x+1)-(x-1):
>>simplify(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 indo 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; #Define uma função polinomial#
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..infinity); #Um resultado interessante: qual será a soma
dos inversos dos quadrados dos naturais?#
2
PI
--6
>> soma:=sum(x^y, y=1..10); #Cria 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( binomial(15,n), n=0..15)
32768
>> 2^15;
32768
n
n
Coincidência? Não, já que ( p)=2 !
11
MuPAD Tutorial
CONJUNTOS
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 forma
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}: # criando os conjuntos A, B e C#
>> A union B; #União do conjunto A com o B#
{1,2,3,4,5,6}
>> A minus B; #Conjunto A menos o conjunto B#
{1,2,3}
>> A minus C; #Conjunto A menos o conjunto C#
{2,3}
>> (A intersect C) union B; A intersect (C union B);
{1,4,5,6}
{1}
FUNÇÕES
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
12
MuPAD Tutorial
As operação com duas funções, inclusive a composição, são feitas como abaixo.
>> f(a)*g(b)
2
a
2
(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:
>> sin(PI/2)*f(PI)
2
PI
>> g( tg(x) )
2
tg(x)
+ 1
No MuPAD, para definir uma função por partes, deve -se usar o comando piecewise:
>> p:=x->piecewise( [x<0, x^2], [x=0, 0], [x>0, x+1])
x -> piecewise([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
piecewise(x if x < 0, 0 if 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.
GRÁFICOS DE FUNÇÕES
O MuPAD possui ferramentas variadas para renderizar (desenhar) objetos matemáticos em
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.
13
MuPAD Tutorial
Gráficos 2D
Para gráficos de funções de uma variável, será usado o comando plotfunc2d. Seu uso é bem simples:
>> plotfunc2d( x^3, x=-3..3); #Gráfico da função y=x^3, no intervalo de
x=–3 até x=3.#
>> plotfunc2d( sin(x), cos(x), x=-PI..PI); #Gráficos de seno e cosseno
juntos#
sin(x), cos(x)
x^3
y
y
0.5
12.5
0
0
-2.5
1
25
-1.25
0
1.25
-2.5
2.5
-1.25
0
1.25
2.5
x
x
-12.5
-0.5
-25
-1
>> plotfunc2d(sqrt(1 - x^2), sqrt(x-1), x = -2..2):
(1 - x^2)^(1/2), (x - 1)^(1/2)
y
1
0.75
0.5
0.25
0
-1
-0.5
0
0.5
1
1.5
2
x
Um exemplo de função com singularidade:
>> plotfunc2d(1/((x-2)*(x-3)), x=0..4)
1/(x - 2)/(x - 3)
y
10
0
0
1
2
3
4
x
-10
-20
Note que o gráfico está bem desproporcional. Para contornar 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].
14
MuPAD Tutorial
>> plotfunc2d(1/((x-2)*(x-3)), x=0..4, y=-5..5, Scaling=Constrained)
1/(x - 2)/(x - 3)
y
5
2.5
0
0
1
2
3
4
x
-2.5
-5
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:
>> plotfunc2d(sin(x)+cos(x)+x^5-4*x^3, x=-3..3)
>> plotfunc2d(sin(x)+cos(x)+x^5-4*x^3, x=1..2,y=-5..-1)
x
- 4*x^3 + x^5
1.25cos(x) + sin(x)1.5
1
cos(x) + sin(x) - 4*x^3 + x^5
1.75
2
-1
y
100
-2
50
0
-2.5
-1.25
-3
0
1.25
2.5
x
-50
-4
-100
y
-5
Outra opção do plotfunc2d é a opção GridLines. Ela permite que o plano fique todo
pontilhado, para facilitar a visualização de certos pontos.
>> plotfunc2d(x^2+3*x+1, x=-4..1, y=-5..5, GridLines=20)
3*x + x^2 + 1
5
y
2.5
0
-3.75
-2.5
-1.25
0
x
-2.5
-5
É possível alterar as cores da figura com algumas opções auxiliares. Por exemplo:
>> plotfunc2d(x^2+3*x+1, x=-4..1, y=-5..5, GridLines=20,
ForeGround=RGB::Red, BackGround=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.
15
MuPAD Tutorial
Para alterar a cor do pontilhado, a opção é GridLinesColor. Para usar linhas ao invés de pontilhados,
a opção é GridLinesStyle. Veja:
>> plotfunc2d(x^2+3*x+1, x=-4..1, y=-5..5, GridLines=20,
ForeGround=RGB::Red, BackGround=RGB::Yellow, GridLinesColor=RGB::Black,
GridLinesStyle=SolidLines)
3*x + x^2 + 1
5
y
2.5
0
-3.75
-2.5
-1.25
0
x
-2.5
-5
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.
>> plotfunc3d( 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.
>> plotfunc3d( x+y-6,x+y^2, x=-5..5, y=-5..5, Axes=Corner, Grid=[50,50])
x + y - 6, x + y^2
30
x + y - 6, x + y^2
30
20
20
z
z
10
10
0
0
-10
-10
y5
2.5
0
-2.5
-5
-5
-2.5
0
2.5
x
5
y
5
2.5
0
-2.5
-5
-5
-2.5
0
2.5
5
x
16
MuPAD Tutorial
>> g:=piecewise( [x<y, x+y], [x>=y, cos(x)*y]);
>> plotfunc3d( g(x,y), x=-5..5, y=-5..5, Grid=[40,40])
piecewise([x < y, x + y], [y <= x, y*cos(x)])
7.5
z
5
2.5
0
-2.5
-5
5
y
2.5
0
-2.5
-5
-5
0
-2.5
-7.5
5
2.5
x
Pode-se definir o ponto (x, y, z) de onde será “olhado” o gráfico, com a opção CameraPoint = [x,y,z].
Cálculo Diferencial e Integral
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 função descontínua em x=1#
>> limit( f(x), x=1, Left); #O limite tendendo à esquerda de x=1#
-infinity
>> limit( f(x), x=1, Right); #O limite tendendo à direita de x=1#
infinity
>> limit( f(x), x=1); #Como os dois limites acima são diferentes, o limite
bilateral não existe!#
undefined
Para
conferir
as
respostas
graficamente, é possível plotar o gráfico da
função acima definida:
>> plotfunc2d( f(x), x=0..2 );
1/(x - 1)
y
10
5
0
0
0.5
1
1.5
2
x
-5
-10
17
MuPAD Tutorial
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*sin(x):
>> diff( f(x) , x ); # Deriva a função f em relação à variável x#
2
2 x sin(x) + x cos(x)
Ou então de uma maneira idêntica à notação de Newton para derivadas:
>> f’(x)
2
2 x sin(x) + x
cos(x)
>> f’’(x)
2
2 sin(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:
2*x + x^2 - 4, 4*x - 5
y
>> g:=x->x^2+2*x-4:
25
>> a:=1:
12.5
>> m :=g'(a):
0
-5
>> rtg:= x->m*(x-a)+g(a);
-2.5
0
2.5
5
x
4 x – 5
-12.5
>> plotfunc2d(g(x), rtg(x), x=-5..5);
-25
A integração é bem semelhante à derivação. A função f é a mesma de antes, f(x) = x 2 sin(x).
>> int( f’(x), x)
2
2 sin(x) + sin(x) (x - 2)
A resposta está correta, apesar de diferente da esperada. Uma simplificação resolve o problema:
>> factor(%)
2
sin(x) x
A integração numérica é feita adicionando um intervalo de integração ao lado da variável de
integração:
>> int(ln(x), x=1..4)
4 ln(4) - 3
18
MuPAD Tutorial
Assim, fica sendo possível calcular áreas sob gráficos, como segue:
>> h:=x->ln(x): #Define uma função h(x)=ln(x)#
>> inferior:=1: #Limite inferior#
>> superior:=4.0: #Limite superior#
>> grafico:=[Mode=Curve, [u, h(u)], u=[inferior,superior],
Style=[Impulses], Grid=[200]]: #O gráfico da função, rachurado#
>> linha:=[Mode=Curve, [u, h(u)], u=[inferior,2*superior], Grid=[200]]: #O
traço do gráfico#
>> plot2d(grafico,linha,RealValuesOnly = TRUE );
y
2
1.5
1
0.5
0
1.25
2.5
3.75
5
6.25
7.5
x
>> int( h(x), x=inferior..superior); #A área da parte rachurada acima#
2.545177444
ÁLGEBRA LINEAR
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:=matrix(2,2)
+-+
| 0, 0 |
|
|
| 0, 0 |
+-+
>> B:=matrix(2,2,[ [1,2], [3,4]]); #Criando uma matriz especificando as
entradas#
+-+
| 1, 2 |
|
|
| 3, 4 |
+-+
19
MuPAD Tutorial
>> B:=matrix(3,3,8,Diagonal); #Cria uma matriz diagonal, com os elementos
da diagonal iguais 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:=matrix(2,2, [[6,7], [9,9]])
+-+
| 6, 7 |
|
|
| 9, 9 |
+-+
>> B+C, B*C, B*C+B^2; #Algumas operações com
+-+ +-+
|
7, 9 | | 24, 25 |
|
|, |
|,
| 12, 13 | | 54, 57 |
+-+ +-+
matrizes#
+-+
| 31, 35 |
|
|
| 69, 79 |
+-+
A inversa de uma matriz pode ser obtida do modo mais natural possível:
>> inversa:=1/B
+-+
|
-2,
1
|
|
|
| 3/2, -1/2 |
+-+
>> inversa*B; #A multiplicação de uma matriz pela sua inversa resulta numa
matriz identidade#
+-+
| 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 propr iedades das matrizes e menos às suas características
numéricas) é necessário usar o pacote linalg. Para usá-lo, a sintaxe é linalg::comando(Matriz), como
no exemplo abaixo:
>> linalg::tr(B); #Retorna
principal) da matriz B#
o
traço
(soma
dos
elementos
da
diagonal
5
20
MuPAD Tutorial
Abaixo, mais alguns comandos no pacote linalg.
>> linalg::det(B); linalg::det(2*B);
-2
-8
>> linalg::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:
>> linalg::transpose(C)
+-+
| 6, 9 |
|
|
| 7, 9 |
+-+
>> linalg::randomMatrix(2,2,Dom::Integer); #Gera uma matriz 2x2 aleatória
com entradas Inteiras; outros tipos de entradas: Real, Rational, Complex#
+-+
| 4, -7 |
|
|
| 6, 16 |
+-+
>> linalg::randomMatrix(3,3,Dom::Integer, -20..20); #Uma matriz aleatória
com entradas inteiras entre –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:=matrix(2,2,[ [5,7], [4,1] ]): #Cria uma matrix 2x2#
>> Id:=matrix(2,2,[ [1,0], [0,1] ]): #Cria a identidade 2x2#
>> p:=linalg::charpoly(M,x); #Calcula o polinômio caracte-rístico da
matrix M#
2
x - 6 x - 23
21
MuPAD Tutorial
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.
SISTEMAS LINEARES E OTIMIZAÇÃO
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
2x
x
+
+
-
y +
y +
2y +
z = 10
z = 3
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ável
equacoes receber o sistema#
{x + y + z = 10, 2 x + y + z = 3, x - 2 y + 4 z = 11}
>> solucao:=solve(equacoes); #A variável solucao recebe a solução do
sistema#
{[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 + 3y
Sujeito a:
3x + 2y
2x + 2y
x - y
x, y 0
6
4
-1
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.
22
MuPAD Tutorial
Este problema ficaria assim no MuPAD:
>> rest:=[ {3*x+2*y<=6, 2*x+2*y>=4, y-x<=1, x>=0, y>=0}, 4*x+3*y ]; #
Armazenando as equações na variável rest#
[{0 <=x, 0<=y, y - x <=1, 4<=2x + 2y, 3x + 2y<=6}, 4x + 3y]
>> linopt::maximize(rest); # Agora o MuPAD resolve o problema, analisando
o conteúdo da variável rest#
[OPTIMAL, {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. Pa ra
isso foram usados os comandos abaixo:
>> eqs:= implicit( [3*x+2*y-6,2*x+2*y-4, y-x-1], x=-1..4, y=-1..4): #Cria
uma imagem com as equações#
>> regiao:=Polygon(Point(1/2,3/2), Point(2,0), Point(4/5, 9/5),
Closed=TRUE, Filled=TRUE, Color=[0.254, 0.874, 0.5]): #Cria a região
rachurada#
>> plot(regiao, eqs); #Plota tudo#
y
3.75
2.5
1.25
0
-1
0
1
2
3
x
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.
23
MuPAD Tutorial
O COMANDO PLOT
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 serem
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:
>> export(plot):
Para usar a função plot, é necessário antes criar o objeto que se quer plotar. Isso pode ser feito
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 Curve3d, para curvas bidimensionais e
tridimensionais, respectivamente. Nelas, a curva deve ser dada de forma paramétrica.
Parametrizar uma curva consiste em descrevê- la considerando
y(t)
as coordenadas x e y de seu ponto genérico P = (x,y)
P
como funções de uma única variável independente t.
Por exemplo:
>> circulo:=Curve2d( [cos(t), sin(t)], t=0..2*PI):
>> curva:= Curve2d( [t,ln(t)], t = 1..2*PI):
x(t)
>> plot(circulo,curva)
y
1.5
1
0.5
0
0
-0.5
-1
1.25
2.5
3.75
5
6.25
x
24
MuPAD Tutorial
No caso de curvas em 3D:
>> grafico:=Curve3d([t, cos(t), (t+1)], t=0..10, Color=RGB::Blue):
>> plot(grafico)
O mesmo gráfico pode ser plotado em outro estilo. Um estilo que dá bem a idéia de perspectiva em
3d é o Impulses:
>> grafico:= Curve3d([t, cos(t), (t+1)], t=0..10, Style=[Impulses]):
>> plot(grafico)
Para aumentar a resolução do gráfico, usaremos a opção adicional Grid:
>> grafico:= Curve3d([t, cos(t), (t+1)], t=0..10, Style=[Impulses],
Grid=[250]):
>> plot(grafico)
10
10
z
10
z
z
7.5
7.5
7.5
5
5
5
2.5
2.5
2.5
0
0
0
2.5
2.5
2.5
5
1
0.5
0
-0.5
-1
7.5
x
10
5
5
y
7.5
10
x
1
0.5
0
-0.5
-1
7.5
y
x
10
1
0.5
0
-0.5
-1
y
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.
>> plot(implicit( x^2+y^2=9, x=-4..4, y=-4..4))
>> plot(implicit( 5*x^2+2*y^2-12, x=-4..4, y=-4..4))
>> plot(implicit( 5*x^2-12*y^2-7, x=-4..4, y=-4..4))
y 2.5
2.5 y
y
2.5
1.25
1.25
1.25
0
0
-2.5
-1.25
0
1.25
2.5
-1.5 -1
-0.5 0
x
0
0.5
1
1.5
-4
-2
0
x
-1.25
-1.25
2
4
x
-1.25
-2.5
25
MuPAD Tutorial
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.
>> plot(implicit( x^2+y^2, x=-10..10, y=-10..10, Contours=[1,4,9]))
>> plot(implicit( x^3+2*x+2-y^2, x=-10..10, y=-10..10,
Contours=[0,1,2,3]))
y 3.75
y
2.5
2.5
1.25
1.25
0
-2.5
-1.25
0
0
1.25
2.5
-0.5
x
0
0.5
1
1.5
2
x
-1.25
-1.25
-2.5
-2.5
-3.75
Polígonos
Para criar polígonos, é necessário definir os vértices. Isso é feito com o comando Point(x,y) ou
Point(x,y,z). Assim:
>> a:=Point(1,3): b:=Point(5,6): c:=Point(5,2): d:=Point(0,0):
>> plot(a,b,c,d)
>> plot(
>> Point(0,0,0, PointWidth=100, Color=RGB::Blue) ,
>> Point(1,2,2, PointWidth=100, Color=RGB::Red) ,
>> Point(4,5,6, PointWidth=100, Color=RGB::Black)
>> )
y
5
z
3.75
5
3.75
2.5
2.5
5
1.25
1.25
3.75
1
2
1.25
3
4
0
0
1.25
2.5
3.75
5
y
2.5
0
0
x
x
26
MuPAD Tutorial
Agora os polígonos correspondentes:
>> plot(Polygon(a,b,c,d))
>> plot(Polygon(a,b,c,d, Closed=TRUE))
y
y
5
5
3.75
3.75
2.5
2.5
1.25
1.25
0
0
0
1.25
2.5
3.75
5
0
1.25
2.5
3.75
5
x
x
Seguem dois polígonos no espaço. O segundo deles, cujo comando foi omitido, tem uma opção
adicional, Filled=TRUE, que pode ser inserida logo após a opção Closed=TRUE.
>> plot(
>> Polygon(
>>
Point(0,0,0, PointWidth=100, Color=RGB::Blue) ,
>>
Point(8,6,2, PointWidth=100, Color=RGB::Red) ,
>>
Point(4,5,6, PointWidth=100, Color=RGB::Black),
>>
Closed=TRUE), Axes=Corner)
z
5
z
5
3.75
3.75
2.5
2.5
1.25
1.25
5
3.75
00
2
y
4
5
3.75
00
2
2.5
4
1.25
6
8
x
y
2.5
1.25
6
0
8
x
0
Outro comando para lidar com plotagem de pontos é o Pointlist . Com ele fica possível plotar
gráficos discretos ou polígonos.
>> plot( Pointlist( Point(i, sin(i)) $i=1..8) )
Com a opção DrawMode=Connected, os pontos ficam conectados.
>> plot(Pointlist(Point(i, sin(i)) $i=1..8, DrawMode=Connected))
y
y
0.75
0.75
0.5
0.5
0.25
0.25
0
1.25
-0.25
2.5
3.75
5
6.25
0
7.5
1.25
x
-0.25
-0.5
-0.5
-0.75
-0.75
2.5
3.75
5
6.25
7.5
x
27
MuPAD Tutorial
ANIMAÇÕES
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:
>> plotfunc2d(sin(x),x=0..2*PI);
>> plotfunc2d(sin(x+PI/8),x=0..2*PI);
>> plotfunc2d(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:
sin(x)
y
sin(x + 1/8*PI)
1
y
0.5
0
sin(x + 1/4*PI)
y
1
0.5
0
1.25
2.5
3.75
5
6.25
1
0.5
0
0
0
1.25
2.5
3.75
5
6.25
0
1.25
2.5
3.75
5
6.25
x
x
x
-0.5
-0.5
-0.5
-1
-1
-1
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 from 1 to 10 do soma:=soma+i; end_for;
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
-1
2
3
0
0+1=1
1+2=3
3+3=6
4
5
6
7
6+4=10
10+5=15
15+6=21
21+7=28
8
9
10
28+8=36
36+9=45
45+10=55
28
MuPAD Tutorial
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:
>> for i from 1 to 10 step 0.5 do
>> plotfunc2d(sin(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.
>> for i from 1 to 10 step 0.05 do plot( Point(0,1), Point(10,31),
Point(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
>> min(5,6,7,8,3)
3
O indexador serve para criar sequências. Ele deve ser lido como “tal que”.
>> i $ i=1..10
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
>> x+i $ i=1..5
x + 1, x + 2, x + 3, x + 4, x + 5
>> f:=x->ln(x)
x -> ln(x)
>> max(f(x) $ x=1..20)
ln(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 definir
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).
29
MuPAD Tutorial
>>
>>
>>
>>
plota:=proc(f,a) begin
y:=x->f(a)+f'(a)*(x-a);
plotfunc2d(f(x), y(x), x=a-5..a+5)
end_proc;
x^2 - 5*x + 2, x - 7
y
25
20
15
>> f:=x->x^2-5*x+2
x -> x^2 – 5*x + 2
>> plota(f,3)
10
5
0
0
2.5
5
7.5
-5
x
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.
uuur
As coordenadas polares de um ponto P = (x, y) do plano são a distância r =|| OP || e o ângulo θ que o
uuur
vetor OP faz com o eixo X.
Assim, dado um ponto (x, y), suas coodenadas polares são ( θ , r) = ( arc tg
y
, x2 + y2 ). Portanto, a
x
equação de uma circunferência em coordenadas polares fica r = r0 , onde r0 é 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 é:
>> plot( polar( [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
y
5
importância justificada logo a frente.
>>
>>
>>
>>
for i from 1 to float(3*PI) step 0.5 do
plot( Point(-5,-5), Point(5,5),
polar( [t,t],t=0..i), Scaling=Constrained);
end_for;
2.5
0
-5
-2.5
0
2.5
5
x
-2.5
-5
30
MuPAD Tutorial
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)), depois (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.
>>
>>
>>
>>
>>
curva:=Curve2d( [t,sin(t)],t=0..2*PI);
p:=x->Point( [x,sin(x)],Color=RGB::Blue);
for i from 1 to float(2*PI) step 0.5 do
plot(p(i),curva);
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 em [a,b], respectivamente,
teremos a seguinte região:
(a,max)
a
b
(b,min )
Assim, o procedimento conterá os seguintes comandos, que determinam dois vértices da região
retangular e mais a origem, se for necessário:
>>
>>
>>
>>
>>
zero:=Point(0,0);
maximo:=max(f(x)$x=a..b);
minimo:=min(f(x)$x=a..b);
pmaximo:=Point(b,maximo, Color=RGB::White);
pminimo:=Point(a,minimo, Color=RGB::White);
Um ponto P = (x, f(x)) no gráfico pode ser determinado com a função abaixo:
>> p:=x->Point([x,f(x)]);
Assim, nosso procedimento pode ser como o abaixo:
>> pontinho:=proc(f,a,b) begin
>> zero:=Point(0,0);
>> maximo:=max(f(x)$x=a..b);
>> minimo:=min(f(x)$x=a..b);
>> pmaximo:=Point(b,maximo, Color=RGB::White);
>> pminimo:=Point(a,minimo, Color=RGB::White);
31
MuPAD Tutorial
>> p:=x->Point( [x,f(x)]);
>> for i from a to b step 0.1 do plot(pmaximo,pminimo,p(i));
>> end;
>> end_proc;
O laço 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 o
tamanho do passo do for.
Para usar o procedimento pontinho, precisamos definir uma função e dar o extremo do intervalo que
queremos plotar, por exemplo:
>> f:=x->sin(x)+cos(x);
>> pontinho(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.
>> fpontinho:=proc(f,a,b) begin
>> zero:=Point(0,0);
>> maximo:=max(f(x)$x=a..b); minimo:=min(f(x)$x=a..b);
>> pmaximo:=Point(b,maximo, Color=RGB::White);
>> pminimo:=Point(a,minimo, Color=RGB::White);
>> p:=x->Point( [x,f(x)], Color=RGB::Blue, PointWidth=50,
PointStyle=FilledCircles);
>> curva:=Curve2d([t,f(t)],t=a..b);
>> for i from a to b step 0.2 do
>> plot(pmaximo, pminimo, p(i), curva);
>> end;
>> end_proc;
>> f:=x->sin(x)+cos(x);
>> fpontinho(f,-5,5)
A animação acima pode ser facilmente alterada para que a curva seja desenhada de acordo com o
movimento do ponto, modificando as seguintes linhas (em negrito):
-- corte ->> p:=x->Point( [x,f(x)], Color=RGB::Blue, PointWidth=50,
PointStyle=FilledCircles);
>> for i from a to b step 0.2 do
>> plot(pmaximo, pminimo,
>>
p(i), Curve2d( [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 reta
tangente, ou seja, plotar a reta 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 ao
citado acima. Depois, é só fazer k variar de a até b, que será o intervalo da animação.
32
MuPAD Tutorial
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
rt:=proc(f,x0,x1) begin
curva:=Curve2d([t,f(t)],t=x0..x1);
maximo:=max(f(x)$x=x0..x1);
minimo:=min(f(x)$x=x0..x1);
pmaximo:=Point(x1,maximo+1, Color=RGB::White);
pminimo:=Point(x0,minimo-1, Color=RGB::White);
caixa:=pmaximo,pminimo;
for k from x0 to x1 step 0.05 do
-5
y:=x->f(k)+f'(k)*(x-k);
reta:=Curve2d([t,y(t)], t=(k-0.7)..(k+0.7),
Color=RGB::Blue );
plot( reta,caixa,curva);
end_for;
end_proc;
f:=x->sin(x)+cos(4*x)+2*x+1;
rt(f,-5,5)
y
10
5
0
-2.5
0
2.5
5
x
-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 intervalo [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 em
(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á:
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
circ:=proc(a,b,r) begin
for i from 0.05 to float(2*PI) step 0.2 do
pontos:=Point(0,0,Color=RGB::White),
Point(a+r,b+r,Color=RGB::White),
Point(a-r,b-r,Color=RGB::White),
Point(a,b);
plot(pontos,
Curve2d([r*cos(t)+a,r*sin(t)+b],t=0..i),
line([a,b],[r*cos(i)+a,r*sin(i)+b],Color=RGB::Blue),
Scaling=Constrained, Labeling=FALSE, Ticks=None)
end_for;
end_proc;
33
MuPAD Tutorial
A sintaxe para a animação é circ(a,b,r), onde (a,b) é o centro da circunferência e r é seu raio.
>> circ(2,4,5);
Parábola
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 po nto (a,b) sobre o eixo Y e, mais ainda, fazer a coincidir com p.
Assim, teremos a equação y=x 2 /(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 um
segundo argumento, m, somente para controlar o intervalo de plotagem (que será simétrico, [-m,m]).
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
para:=proc(p,m) begin
for i from -m to m step 0.5 do
curva:=t->Curve2d( [k,k^2/(4*p)],k=-m-1..i );
diretriz:=Curve2d( [k,-p],k=-m-1..m,Color=RGB::Orange);
foco:=Point(0,p);
s1:=line( [i,i^2/(4*p)], [0,p], Color=RGB::Blue);
s2:=line( [i,i^2/(4*p)], [i,-p],Color=RGB::Black);
plot(curva(t),diretriz,foco,s1,s2, Labeling=FALSE, Ticks=None);
end_for;
end_proc;
para(2,10)
34
MuPAD Tutorial
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 ( x0 , y0 ) e semi-eixos a e b é
( x − x0 ) 2 ( y − x0 ) 2
+
=1.
a2
b2
Novamente teremos de recorrer às coordenadas polares para animar a elipse. A equação polar da
elipse é r =
m
, onde n ∈ (0,1) e m > 0 . Após algum algebrismo, pode-se mostrar que esta
1 − n cos θ
equação é equivalente a
( x − c) 2 y2
m
m
1
, b=
e c = an . Tomaremos n =
+ 2 = 1 , onde a =
2
2
a
b
1− n
2
1 − n2
e m = 10. Assim, nossa equação fica
( x − 20/3) 2
y2
+
= 1 , que é uma elipse de centro em
(40/3) 2
(20/ 3)2
(20/3, 0) e semi-eixos 40/3 e 20/ 3 . Seus focos estão em (0,0) e (2c,0) = (40/3,0) .
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:
>> elipse:=k->polar( [m/(1-n*cos(t)),t], t=0..k );
>> ponto:=t->Point(
>> [m*cos(t)/(1-n*cos(t)), m*sin(t)/(1-n*cos(t))],
>> Color=RGB::Blue, PointWidth=40);
>> segmento1:=t->line([0,0],
>> [m*cos(t)/(1-n*cos(t)), m*sin(t)/(1-n*cos(t))],
>> Color=RGB::Orange);
>> segmento2:=t->line([40/3,0],
>> [m*cos(t)/(1-n*cos(t)), m*sin(t)/(1-n*cos(t))],
>> Color=RGB::Orange );
>> regiao:=Point(-15,-15, Color=RGB::White), Point(15,15,
Color=RGB::White);
>> for i from 0.1 to float(2*PI) step 0.1 do
>> plot( elipse(i), ponto(i), segmento1(i), segmento2(i), regiao,
>> Scaling=Constrained, Labeling=FALSE, Ticks=None); end_for;
35
MuPAD Tutorial
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 r (t ) = x0 +
a 2
b + (t − y 0 )2 , onde (x 0 , y0 ) é seu
b
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
(x 0, y0 ) = (1, 2), a = 4, b = 3.
y
5
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
x:=t->x0+a/b*sqrt( b^2+(t-y0)^2 );
2.5
x0:=0;
0
y0:=0;
-7.5 -5
-2.5 0
2.5 5
a:=4;
-2.5
b:=3;
foco:=sqrt(a^2+b^2);
-5
f1:=Point(foco,y0);
f2:=Point(-foco,y0);
referencia:=Curve2d( [x(t),t], t=-7..7, Color=RGB::White);
esquerdo:=i->Curve2d( [x(t),t], t=-6..i);
direito:=i->Curve2d( [-x(t),t], t=-6..i);
l1:=i->line( [foco,y0], [x(i),i], Color=RGB::Orange );
l2:=i->line( [-foco,y0], [x(i),i], Color=RGB::Orange );
L1:=i->line( [foco,y0], [-x(i),i], Color=RGB::Blue );
L2:=i->line( [-foco,y0], [-x(i),i], Color=RGB::Blue );
for i from -5 to 5 do;
pe:=Point( [x(i), i], Color=RGB::Blue );
pd:=Point( [-x(i), i], Color=RGB::Blue );
plot( L1(i), L2(i), l1(i), l2(i), referencia,
esquerdo(i), direito(i), pe(i), pd(i));
end_for
7.5
10
x
BIBLIOGRAFIA
[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.
36
Download

mupad light tutorial