Escolar Documentos
Profissional Documentos
Cultura Documentos
Trabalho de Cálculo II
Prof. Dr. Marcio Antônio de Faria Rosa
Acredito que este software ajudou e vai continuar ajudando a ciência daqui pra frente.
Introdução
O Software Mathematica é um programa avançado que, a princípio, parece ser inútil quando se vê uma tela branca. Mas
depois que você aprende sobre os seus recursos fica surpreendido. Este tutorial consiste numa visão geral envolvendo
Cálculo, Algebra Linear e, o foco de pesquisa, a base para entender e fazer fractais. O objetivo é instigar quem se interessa a
mexer mais aprofundamente no Mathematica e mostrar como começar a desenvolver o conhecimento sobre o aplicativo.
Na versão atual, 7.0 (novembro de 2009), é possível encontrar ao abrir o programa uma tela de boas vindas contendo um
guia de exemplos para iniciantes.
Os recursos desse ferramenta magnífica podem ser vistos nos sites da Wolfram:
http://www.wolfram.com/products/mathematica/ - O produto Mathematica
http://library.wolfram.com/ - Uma biblioteca contendo milhares de exemplos, dicas e tutoriais
http://www.wolfram.com/products/mathematica/newin7/?buildid=1148351 - Sobre as novidades do Mathematica 7.0 e suas
aplicações em todas as ciências
Básico do Básico
Antes de começar é preciso saber que o Help deste programa é um dos melhores já feitos e deve ser utilizado com afinco.
Graças a ele eu consegui desenvolver esse tutorial.
O Mathematica pode ser usado como desde uma simples calculadora até como um programa que analisa gráficos avançados.
No programa você trabalha nos notebooks (.nb) e que é dividido em células de entrada. É muito fácil de se familiarizar.
Os comandos são inseridos nas tais células de entrada cada uma facilmente identificada na lateral direita do programa.
São validados ou computados quando se aperta a tecla ÷ + ç (enter da esquerda) ou o ó (da direita, no teclado
numérico). Exemplo:
2 + 2 H* Pressionei SHIFT + ENTER *L
É possível entrar com expressões enormes na linha de comando. Você pode inserir comentários, bastando colocá-los na
forma entre: (* texto *)
H5 * 7 - 31 7L 4
H* Exemplo de comentário *L
107
14
Se realizarmos uma conta como acima o resultado sai em forma de fração. O Mathematica realiza cálculo com simbologias,
assim como o nosso raciocínio. Assim, os resultados saem com mais exatidão. Pode-se também transformar esse tipo de
resultado em numérico com a função N (para numeral). Outro comando importante, o qual exemplifico abaixo, é o % que se
refere ao resultado ("out") anterior, e // N passa da forma de fração para forma numérica
2 097739Vinicius.nb
Se realizarmos uma conta como acima o resultado sai em forma de fração. O Mathematica realiza cálculo com simbologias,
assim como o nosso raciocínio. Assim, os resultados saem com mais exatidão. Pode-se também transformar esse tipo de
resultado em numérico com a função N (para numeral). Outro comando importante, o qual exemplifico abaixo, é o % que se
refere ao resultado ("out") anterior, e // N passa da forma de fração para forma numérica
% N
7.41667
A habilidade deste software é impressionante: consegue realizar contas com exatidão computacional.
2 ^ 1000
10 715 086 071 862 673 209 484 250 490 600 018 105 614 048 117 055 336 074 437 503 883 703 510 511 249
361 224 931 983 788 156 958 581 275 946 729 175 531 468 251 871 452 856 923 140 435 984 577 574 698 574
803 934 567 774 824 230 985 421 074 605 062 371 141 877 954 182 153 046 474 983 581 941 267 398 767 559
165 543 946 077 062 914 571 196 477 686 542 167 660 429 831 652 624 386 837 205 668 069 376
Aproxime para qualquer precisão de dígitos que queira. Aqui, a função N é usada para aproximar em 100 dígitos o número Π
(Pi, mais a frente veja os atalhos para "desenhar" esses símbolos).
N@Pi, 100D
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280
34825342117068
No Mathematica está embutido diversos pacotes de funções, equações, imagens, mapas e milhares de raciocínios para
aprimorar seu desempenho. A única dificuldade que o programa encontra é utilizar-se da memória do computador para caçar
a melhor opção. Mas isso é irrelevante para cálculos pequenos:
Sin@Pi 3D
3
2
Nota: funções importantes, como seno, cosseno, tangente, e letras gregas escritas por extenso são sempre Maiúsculas e os
argumentos fechados em colchetes.
Ágebra parece simples frente ao Mathematica:
Expand@Hx + 1L ^ 10D
Factor@x ^ 4 - x ^ 3 - 2 x - 4D
H- 2 + xL H1 + xL I2 + x2 M
D@x ^ 2, xD
2x
1
4
-2 -1 1 2
Colchetes, Chaves e parênteses tem propósitos diferentes no Mathematica. Colchetes [] são usado para separar argumentos
de uma função como em:
N@Tan@1D, 20D
1.5574077246549022305
H2 * 5 - 1L 3
Chaves {} são usados para listagem. Listas são muito importantes em Mathematica como estrutura fundamental. Muitas
funções agem automaticamente nos elementos da lista.
81.4142135623730950488, 2.7182818284590452354<
Alguns comandos retornam listas. Os comandos Table e Range são dois dos mais importante comandos. O comando Table
tem a sintaxe Table[expr,{x,xMin,xMax}]. A expressão expr nos valores xMin, xMin+1, …, xMin+n, onde n é o maior
valor então xMin+n £ xMax. Por exemplo, aqui estão os dez primeiros números naturais em sua forma quadrada.
As vezes é melhor usar uma versão mais leve de Table o qual especifica o tamanho do intervalo: Table[expr,
{x,xMin,xMax,step}], no qual step representa o tamanho do intervalo:
4 097739Vinicius.nb
A versão mais específica de Table[expr,{n}] simplismente produz n cópias de expr. Veremos várias instancias onde isso
será útil. Table aceita múltiplas variáveis para criar listas. No exemplo a seguir, x é fixo para cada sub lista de 0 a 2 de
acordo como se move de lista para lista, y vai de 1 a 4 dentro de cada sub lista
O comando Range simplesmente produz uma lista de números dados a certos min, max e passo. Isso não é limitado quanto
parece, desde que as funções atuem em listas
Range@10D ^ 2
Até agora, tudo tem sido bem claro como criar todo tipo de exemplo. Mathematica permite inserir valores matemáti-
cos e resolver de maneira muito mais próxima com o real. Por exemplo, a seguir são equivalentes.
N@Pi ^ 2 6D
1.64493
F
Π2
NB
6
1.64493
Possuem dois métodos básicos de escrever expressões compostas - usando atalhos do programa ou atalhos do teclado. Pelo
programa leva-se mais tempo mas pode se ver qual selecionar sem erro. O melhor a se fazer é saber alguns atalhos de teclado
para usar o programa apenas quando necessário.
Π2
Agora vamos ver como escrever 6
usando o menu (pallete).
Π2
Aqui é para como escreve 6
usando o teclado.
1) Digite å .
2) Escreva "pi".
3) Digite å .
4) Aperte â e ^ simultaneamente.
097739Vinicius.nb 5
Π2
Agora vamos ver como escrever 6
usando o menu (pallete).
Π2
Aqui é para como escreve 6
usando o teclado.
1) Digite å .
2) Escreva "pi".
3) Digite å .
4) Aperte â e ^ simultaneamente.
5) Digite "2".
6) Aperte a seta para direita.
7) Aperte â e / simultaneamente
8) Digite "6".
9) Aperte duas vezes a seta para direita para sair da expressão
c = 7
c+3
10
Nomes simbólicos podem ser alfanuméricos e talvez se refiram a objetos mais complicados
umaLista = Range@10D + c
HumaListaL2
864, 81, 100, 121, 144, 169, 196, 225, 256, 289<
Clear@c, umaListaD
097739Vinicius.nb 7
c+3
3+c
umaLista2
umaLista2
f@x_D := x + 2
f@3D
fAy2 E
2 + y2
Clear@fD;
diff@f_D := D@f, xD;
diffAx2 E
2x
Clear@diffD;
diff@f_D = D@f, xD;
diffAx2 E
D@f, xD
Usando := faz dizer ao Mathematica para esperar até que alguma expressão seja substituída por f para obter sua derivada.
As vezes é conveniente usar uma função pura. Uma função pura tem a sintaxe expr &, onde expr é uma expressão do
Mathematica envolvendo o simbolo # e o operador & diz ao Mathematica para tratar expr como uma função com #. Por
exemplo, #^#& é i,a função que gera um número(ou possivelmente outro objeto do Mathematica) pra ele mesmo. Usamos
colchetes ao quadrado para ligar a algum argumento apenas como outra função.
8 097739Vinicius.nb
ð ^ ð &@3D
27
Como vimos à pouco, funções puras são particularmente úteis no contexto da manipulação de lista.
Existem vários comandos básicos para funções ou datas. O comando básico é Plot - dizemos até em "plotar" um
gráfico. Por exemplo, na função x2 sobre a aproximação -2 £ x £ 2 (denominado {x,-2,2}:
-2 -1 1 2
Poderemos também plot mais de uma função no mesmo gráfico através da lista de funções. Aqui o plot de sin(x) junto com
uma aproximação polinomial
-6 -4 -2 2 4 6
-1
-2
Note que incluímos a opção PlotRange®{-2,2} o qual controla a posição vertical no plot. O comando de Plot tem tantas
opções que as vezes é melhor conferir na Ajuda Online.
Plots tridimensionais de duas variáveis podem ser geradas usando o comando Plot3D.
097739Vinicius.nb 9
-1
-2
1.0
0.5
0.0
-2
-1
O comando ContourPlot oferece outra maneira de vizualisar a função de duas variaveis. Parece as curvas de níveis.
-1
-2
-2 -1 0 1 2
2
1
0
-1
-2
1.0
0.5
0.0
-2
-1
1.0
0.5
0.0 2
-0.5
-1.0
0
-2
0
-2
2
097739Vinicius.nb 11
10
5 2
0
0
-2
0
-2
1.0 4
0.5
0.0 2
-0.5
-1.0
-4 0
-2
0 -2
2
-4
4
12 097739Vinicius.nb
-0.5
-1.0
-2
88- 4, 16<, 8- 3, 9<, 8- 2, 4<, 8- 1, 1<, 80, 0<, 81, 1<, 82, 4<, 83, 9<, 84, 16<<
097739Vinicius.nb 13
ListPlot@%D
15
10
-4 -2 2 4
Quando arrumado muitos pontos, é melhor assimilar a saída do comando Table com uma variável e serve para suprir a saída.
15
10
-4 -2 2 4
ListLinePlot@dataD
15
10
-4 -2 2 4
Para relembrar novamente: um ponto-e-vígula não só supri a saída do gráfico, mas como registra, sem ativar, o texto/co-
mando. Isso é conveniente quando não se quer ver a saída, mas quer combinar isso com gráficos subseqüentes gerados. Por
exemplo, para gerar a parábola acima junto com pontos escolhidos para gerá-la, poderíamos plotar eles separadamente,
guardar esses resultados dentro de variáveis e usando o comando Show para mostrar esses pontos juntos:
14 097739Vinicius.nb
plot1 = ListPlot@data,
PlotStyle ® 8PointSize@.015D<D;
plot2 = ListLinePlot@dataD;
Show@plot1, plot2D
15
10
-4 -2 2 4
Show@GraphicsGrid@88plot1, plot2<<DD
15 15
10 10
5 5
-4 -2 2 4 -4 -2 2 4
Resolvendo equações
Mathematica tem um potencial nas técnicas de resolver equações. O comando básico é o Solve. Veja como ele acha a
rota certa dentro de um polinomial:
SolveAx3 - 2 x - 4 0, xE
Geralmente não se pode calcular com exatidão expressões como a abaixo. Então o programa se utiliza de alternativas para
demostrar resultados fora do padrão, criando sua propria simbologia:
SolveAx5 - 2 x - 3 0, xE
Para aproximar em números as variáveis que ele cria, basta usar o comando NSolve.
097739Vinicius.nb 15
NSolveAx5 - 2 x - 3 0, xE
O Solve e NSolve funcionam bem com polinômios. Entretanto muitas equações envolvem funções abstratas que estão
além da capacidades desses comandos. A simples equação cosHxL = x. NSolve não resolve e retorna com erro explicativo.
NSolve@Cos@xD x, xD
1.0
0.8
0.6
0.4
0.2
O comando FindRoot se utiliza do método de Newton para resolver essa - forma iterativa (dá-lhe Google!) - . No gráfico
mostra um valor abaixo e próximo de 0,8. Seria um bom palpite, mas vejamos com o comando:
FindRoot@Cos@xD x, 8x, 0.8<D
8x ® 0.739085<
Notar que FindRoot é utilizado para resolver certas equações para a dimensão fractal de um conjunto.
Sequências Randômicas
Muitos algoritimos de fractais possuem sequências aleatórias de elementos e por isso é importante ser capaz de gerá-las. O
Mathematica possui alguns comandos para esse propósito; RandomInteger é, quem sabe, o mais fundamental.
RandomInteger[{iMin,iMax},n] gera a lista de n inteiros entre iMin e iMax.
84, 2, 4, 2, 4, 3, 4, 1, 2, 4<
Em algumas aplicações esse números nao precisam ser necessariamente números e nem com pesos iguais.
Suponha que três funções, f1, f2, f3, precisam ser definidas aleatóriamentes com pesos 1/2, 1/3 e 1/6.
Para isso existe o comando que o acompanha RandomChoice .
Claro que não são comandos genuinamente aleatórios, mas pseudos-aleatório; Eles são procedimentos pré-determinados que
aparentam aleatoriedade. A saída do numero pseudo-aleatorio depende de uma entrada inicial chamada alimento ou em
inglês seed. SeedRandom aceita número inteiro de entrada
16 097739Vinicius.nb
SeedRandom@1D;
RandomReal@81, 4<, 5D
83.45217, 1.33426, 3.36858, 1.56341, 1.72408<
Se a tabela é gerada novamente depois de outra chamada SeedRandom[1], o comando Random irá gerar a mesma sequência
de números.
SeedRandom@1D;
RandomReal@81, 4<, 5D
83.45217, 1.33426, 3.36858, 1.56341, 1.72408<
Gráficos Bases
-2 -1 1 2
-1
Se digitar InputForm verá como a representação se aproxima de comandos (com opções e tudo mais)
% InputForm
A saída fica na forma Graphics[primitives_,options_], onde primitives é a lista de fráficos e options é a lista
de opções/parâmetros. O comando Graphics pode desenhar gráficos básicos. Gráficos básico podem ser obtidos desen-
hando na mão através do menu Graphics da barra de ferramentas.
Existem mais de 10 tipo de gráficos, como Line and Polygon. Line é um comando que você põe coordenadas para
desenhar linha, como 88x1 , y1 <, ..., 8xn , yn << que define os pontos dos vértives. Linhas podem desenhar polígonos.
097739Vinicius.nb 17
Por exemplo, Thickness afeta a espessura de uma Line. Por exemplo, podemos distinguir as duas linhas abaixo:
Graphics@8
Thickness@.01D, Line@880, 1<, 82, 1<<D,
Thickness@.03D, Line@880, 0<, 81, 1<, 82, 0<<D
<D
Graphics@
Polygon@880, 0<, 81, 0<, 81, 1<, 80, 1<<DD
Graphics@8GrayLevel@.7D,
Polygon@880, 0<, 81, 0<, 81, 1<, 80, 1<<D<D
vertices = 880, 0<, 81, 0<, 81, 1<, 80, 1<, 80, 0<<;
Graphics@8
8GrayLevel@.7D, Polygon@verticesD<,
Line@verticesD<,
AspectRatio ® AutomaticD
Mathematica pode atuar em listas ou conjuntos de diversas formas. Aqui está uma lista de números inteiros escolhi-
dos aleatoriamente.
20 097739Vinicius.nb
SeedRandom@1D;
umaLista = RandomInteger@81, 10<, 810<D
82, 5, 1, 8, 1, 1, 9, 7, 1, 5<
sortedList = Sort@umaListaD
81, 1, 1, 1, 2, 5, 5, 7, 8, 9<
Inverter a ordem
Reverse@sortedListD
89, 8, 7, 5, 5, 2, 1, 1, 1, 1<
RotateLeft@sortedList, 3D
81, 2, 5, 5, 7, 8, 9, 1, 1, 1<
Drop@sortedList, 3D
81, 2, 5, 5, 7, 8, 9<
sortedList@@3DD
Partition@sortedList, 2D
881, 1<, 81, 1<, 82, 5<, 85, 7<, 88, 9<<
Flatten@%D
81, 1, 1, 1, 2, 5, 5, 7, 8, 9<
Select@umaLista, OddQD
85, 1, 1, 1, 9, 7, 1, 5<
Podemos verificar se algum item dentr de uma casa é impar ou não (verdadeiro ou falso):
8OddQ@2D, OddQ@3D<
8False, True<
Com o comando (#>5)& podemos selecionar números inteiros maiores que cinco.
88, 9, 7<
Agora, o mais interessante é poder trabalhar conjuntos como uma variável e aplicar comandos de álgebra, cálculo, estatística:
097739Vinicius.nb 21
sortedList2
81, 1, 1, 1, 4, 25, 25, 49, 64, 81<
O Map facilitará para mim se eu quiser escrever várias funções de números no conjunto:
Map@f, umaListaD
8f@2D, f@5D, f@1D, f@8D, f@1D, f@1D, f@9D, f@7D, f@1D, f@5D<
f umaLista
8f@2D, f@5D, f@1D, f@8D, f@1D, f@1D, f@9D, f@7D, f@1D, f@5D<
É interessante utilizarmos o Map para fazer conjuntos e visualizar operações com números da listagem:
882, 4<, 85, 25<, 81, 1<, 88, 64<, 81, 1<, 81, 1<, 89, 81<, 87, 49<, 81, 1<, 85, 25<<
Plus umaLista
40
Para tirar a média de um conjunto podemos definir uma função que soma o total de um conjunto (Total[x]) e dividir pelo
tamanho (Length[x]), como abaixo:
media@l_D := Total@lD Length@lD;
media@umaListaD
4
Técnicas que pesquisei e achei para pensar em fractais são os comando Through, Inner, e Outer. Ele são usados em
pacotes como FractalGeometry. Through é parecido com Map, mas aplica a cada função de uma lista um argumento (x)
Mais pra frente é possível ver um exemplo de fractal que utiliza métodos avançados
Iteração (
Como eu havia me deparado antes com esse método de resolução, resolvi pesquisar melhor e ver como funciona. É utilizado
em fractais e em ciência da computação.
Wiki: "Se uma função f mapeia um conjunto por ela mesma, então o valro inicial x0 deve ser colocado para obtenção do
valor x1. Esse valor deve ser coocado em f para que ele continue achando os valores seguintes. Isso forma a sequência
8x0 , x1 , x2 , ...< onde xn = f Hxn-1 L para qualquer inteiro n > 0. Por outro lado, xn = f n Hx0 L onde f n representa o n-simo
componente de f com ele mesmo." O Mathematica possui os comando Nest e NestList. Nest[f,x0,n] retorna na
verdade fn @x0D.
22 097739Vinicius.nb
Clear@fD;
Nest@f, x0, 5D
f@f@f@f@f@x0DDDDD
NestList@f, x0, 5D
A função eu defino abaixo e depois utilizo Nest para se repetir até 3 vezes:
recip@x_D := 1 H1 + xL
Nest@recip, x, 3D
1
1
1+ 1
1+
1+x
Por exemplo, a iteração de Cos começando em 0.8, deve gerar a sequência a qual converge para o ponto fixo de Cos.
No exemplo, utiliza-se Cos ao invés de Cos[x] já que NestList "prescreve" a função.
0.739085
Quando se define uma função ela é padrinizada como uma regra para qualquer f (no exemplo abaixo f HxL = x2 ).
f@x_D := x2
f@2D
x2 . x ® 2
4
A expressão é x2 , a regra x®2 e /. é o operador substituto que fala ao programa implementar a regra. A seta ® foi digitada
como -> e o programa desenha ela automaticamente.
Um alternativa para x®2 é escrever Rule[x,2].
Agora perceba como os comandos Solve envolvem regras ao resolver formulas algébricas. Podemos utilizar variáveis e
retornar as raízes dentro da equação inicial para saber os resultados.
097739Vinicius.nb 23
y = x3 + 4 x2 - 3 x + 1;
resolve = Solve@D@y, xD 0, xD
:19, >
13
27
Mais exemplos de regras: (Tudo que o que for 1 será elevado ao quadrado e tudo o que for 2 também)
81, 2, a, b, Π< . 91 ® 12 , 2 ® 22 =
81, 4, a, b, Π<
81, 4, a, b, Π<
a + b Hc + dL3
a + b Ic3 + 3 c2 d + 3 c d2 + d3 M
Algebra Lineal
Vetores são representados como listas de um tamanho apropriado no Mathematica. Então um vetor bidimensional é simplifi-
cado numa lista de dois componentes.
Cada componente também com dois componentes, dessa forma:
88a, b<, 8c, d<< MatrixForm H* LEMBRE-SE QUE SIGNIFICA PASSAR PARA *L
a b
c d
Você passa para matriz utilizando o exemplo acima, MatrixForm. Repare que o segundo componente c,d é da segunda
linha na matriz.
Para escrever matrizes basta apertar K O na Pallete Basic Math, ou indo em Table/Matrix dentro do menu Insert.
A multiplicação de matrizes é representada por . entre duas matrizes ou entre matriz e vetor:
8a x1 + b x2 , c x1 + d x2 <
a b
c d
Transpose@mD MatrixForm
K O
a c
b d
Inverse@mD MatrixForm
d b
-
-b c+a d -b c+a d
c a
-
-b c+a d -b c+a d
Det@mD
-b c + a d
Outras operações :
NE MatrixForm
1 2
MatrixExpAJ
0 3
F MatrixForm
1 2
MatrixExpB
0 3
ã - ã + ã3
0 ã3
, 81, 2<F
1 2
LinearSolveB
3 4
:0, >
1
2
Podemos descobrir os efeitos da multiplicação por certos tipos de matrizes, normalmente em vetores 2D.
Para exemplificar, achei um desenho de um triangulo que copiei e colei do help:
triangulo = GraphicsB::GrayLevel@.7D,
:1 2, 3 2>>F>,
Axes ® TrueF
0.8
0.6
0.4
0.2
A função feita a seguir aceita objetos como Graphics e matrizes e aplica uma transformação definida por uma matriz para
todos os vetores numéricos em 2D nesse Graphics:
(Confuso mas tente entende)
transformar@Graphics@g_, opts___D, M_ ? MatrixQD :=
Graphics@GeometricTransformation@g,
AffineTransform@MDD, optsD;
a 0
Agora a matriz diagonal deve distorcer o triangulo num fator a na horizontal e d na direção vertical.
0 d
0.4
0.3
0.2
0.1
Rotation is a bit trickier. Para rotacionar o desenho num ângulo Θ precisamos, como visto em cálculo II, multiplicar pela
matriz
cos Θ -sin Θ
.
sin Θ cos Θ
Ou entao utilizar o comando já pronto RotationMatrix., que ele faz a mesma coisa:
RotationMatrix@ΘD MatrixForm
Cos@ΘD - Sin@ΘD
Sin@ΘD Cos@ΘD
RotationTransform é análogo ao AffineTransform que utilizamos acima, mas em AlgeLin é melhor utilizar o primeiro
Ó 1 Ó 0 Ó
Exemplo: testarei os vetores Ò = eÔ = . Para rotacionar Θ fazemos, primeiro em Ò :
0 1
8Cos@ΘD, Sin@ΘD<
Ó Ó
Esse é o vetor Ò rodado num ângulo Θ. Agora rotacionarei Ô multiplicando ele pela matriz rotacional:
8- Sin@ΘD, Cos@ΘD<
Ó
Se Ô é
0 cos Π 2
sin Π 2
= .
1
Ó
Entao Ô rodado por um ângulo Θ deve ser
cosH Θ + Π 2L -sin Θ
sinHΘ + Π 2L
= ,
cos Θ
Ó
que é exatamente a matriz multiplicada pelo vetor Ô . TrigExpand demonstra a igualdade óbvia acima através da Trigonome-
tria básica
8Cos@Θ + Π 2D, Sin@Θ + Π 2D< TrigExpand
8- Sin@ΘD, Cos@ΘD<
Ó Ó
Agora farei um variável matricial M que roda vetores. Já que M roda tanto Ò quanto Ô por um ângulo Θ, ele roda também
qualquer vetor através de um ângulo já que podemos separá-lo por vetores unitários:
MJ N = M Jx1 J N + x2 J NN = x1 M K O + x2 M K O.
x1 1 0 1 0
x2 0 1 0 1
0.8
0.6
0.4
0.2
Agora podemos ver como distorcer um triângulo multiplicando seus vetores por matrizes definidas por:
M = rotacionar.refletir.comprimir;
transformar@triangulo, MD
0.5
0.4
0.3
0.2
0.1
O conjunto de comandos eigenvectors e eigenvalues são complicados e avançados para se entender a geometria por trás de
algumas matrizes. O primeiro é utilizado para computar dimensão fractal de conjuntos simétricos. O vetor v é um eigenvec-
tor da matriz M se lá possuir um número Λ tal que Mv = Λv. Nesse caso, Λ é o correspondente eigenvalue. Em cálculo II
podemos exemplificar algo parecido com Multiplicador de Lagrange. Um conjunto de eigenvectors forma o chamado
eigensystem da matriz. O eigenvector dtermina um subespaço dimensional que é invariante sob M e o eigenvalue determina
o fator pelo qual o subespaço será expandido ou comprimido por M.
Eigenvalues, Eigenvectors, e Eigensystem :
28 097739Vinicius.nb
O conjunto de comandos eigenvectors e eigenvalues são complicados e avançados para se entender a geometria por trás de
algumas matrizes. O primeiro é utilizado para computar dimensão fractal de conjuntos simétricos. O vetor v é um eigenvec-
tor da matriz M se lá possuir um número Λ tal que Mv = Λv. Nesse caso, Λ é o correspondente eigenvalue. Em cálculo II
podemos exemplificar algo parecido com Multiplicador de Lagrange. Um conjunto de eigenvectors forma o chamado
eigensystem da matriz. O eigenvector dtermina um subespaço dimensional que é invariante sob M e o eigenvalue determina
o fator pelo qual o subespaço será expandido ou comprimido por M.
Eigenvalues, Eigenvectors, e Eigensystem :
:2, >
1
2
Eigenvectors@MD
23
por 1 2 e deve expandir o vetor
1
Então essa matriz deve comprimir o vetor pelo fator 2.
0 1
M.81, 0<
: , 0>
1
2
M.82 3, 1<
: , 2>
4
3
O comando Eigensystem retorna uma linha contendo duas listas; a primeira contém os eigenvalues e a segunda os respec-
tivos eigenvectors
Eigensystem@MD
Os comandos Inner e Outer generalizam o produto de matrizes de vetores. O produto escalar w e v é w.v. Vetores são
representados como listas:
w = 81, 2, 3<;
v = 8a, b, c<;
w.v
a+2b+3c
Inner é implementação do Dot (como se fosse produto escalar) no qual f ativa uma regra de multiplicação e g de adição:
Clear@f, gD;
Inner@f, 81, 2, 3<, 8a, b, c<, gD
g@f@1, aD, f@2, bD, f@3, cDD
Repare que se f fosse Times denotaria multiplicação e se g fosse Plus indicaria adição; então retomaríamos o produto
escalar:
097739Vinicius.nb 29
a+2b+3c
Uma maneira de pensar no comando Inner é na multiplicação de matrizes de uma linha vezes a coluna.
H 1 2 3 L. b MatrixForm
a
c
Ha+2b+3c L
Perceba que o comprimento não precisa ter o mesmo número de algarismos que o primeiro termo, mas obteremos o produto
como se fosse distributiva.
b .H 1 2 3 4 L MatrixForm
a
c
a 2a 3a 4a
b 2b 3b 4b
c 2c 3c 4c
a 2a 3a 4a
b 2b 3b 4b
c 2c 3c 4c
O produto vetorial entre dois vetores é o vetor ortogonal a eles dois. Para fazer esse tipo de multiplicação basta usar o
CrossProduct
Para fazê - lo, primeiro é preciso ativar o pacote VectorAnalysis com o seguinte codigo:
<< "VectorAnalysis`"
8- 1, 2, - 1<
A versão 7.0, além de trazer novas facilidades nas ferrementas, botões e novas interfaces, também traz novos comandos,
como Cone, Tube, BSplineCurve, DateListLogPlot, ListCurvePathPlot, FindCurvePathStreamPlot, VectorPlot, entre outros.
Explorando os novos comandos e suas opções:
Automatic
3
: 0 ,
-1
-2
-3
-3 -2 -1 0 1 2 3
Full
3
0 ,
-1
-2
-3
-3 -2 -1 0 1 2 3
>
097739Vinicius.nb 31
0 >
-1
-2
-3
-3 -2 -1 0 1 2 3
-1
-2
-3
-3 -2 -1 0 1 2 3
-1
-2
-3
-3 -2 -1 0 1 2 3
Automatic
: 0 ,
-1
-2
-3
-3 -2 -1 0 1 2 3
,
097739Vinicius.nb 33
Coarse
0 ,
-1
-2
-3
-3 -2 -1 0 1 2 3
Fine
0 >
-1
-2
-3
-3 -2 -1 0 1 2 3
-1
-2
-3
-3 -2 -1 0 1 2 3
StreamDensityPlot
StreamDensityPlot@
88- 1 - x ^ 2 + y, 1 + x - y ^ 2<, Log@Norm@8- 1 - x ^ 2 + y, 1 + x - y ^ 2<D + 1D<, 8x, - 3, 3<, 8y, - 3, 3<D
-1
-2
-3
-3 -2 -1 0 1 2 3
097739Vinicius.nb 35
-1
-2
-3
-3 -2 -1 0 1 2 3
ListVectorPlot
Plotar o campo de vetores interpolado de um específico conjunto de vetores.
ListVectorPlot@Table@8y, - x<, 8x, - 3, 3, 0.2<, 8y, - 3, 3, 0.2<DD
30
25
20
15
10
0 5 10 15 20 25 30
VectorPlot3D
36 097739Vinicius.nb
-1
-1
-1
LineIntegralConvolutionPlot
-1
-2
-3
-3 -2 -1 0 1 2 3
SpokenString@a + b ^ 2D
a plus b squared
SpokenString@Graphics@8Red, Disk@D<DD
Comando Manipulate aprimorado. Agora possui mais suporte para arrumar os controles dentro da grade
1.0
Multiplier
Phase Parameter
0.5
1 2 3 4 5 6
-0.5
-1.0
Fractais
Tentando aprender algo sobre fractais, descobri alguns exemplos interessantes que tentei estudar, mas é um pouco compli-
cado e avançado para explicar. Vou deixar como material extra para dar noção do que se pode fazer.
38 097739Vinicius.nb
boundaryPic = ;
H* The image of the Mandelbrot set was generated with the following code. *L
H* The image was inserted into the initialization code to speed up *L
H* the start up of the demonstration. *L
H*
MandelFunction = CompileA88c,_Complex<<,
LengthAFixedPointListAð2 +c&,0,100,
SameTest ® HAbs@ðD>2&LEEE;
mandelData = Table@MandelFunction@x+I*yD,
8y,-1.3,1.3,2.6501<,8x,-2,0.6,2.6501<D;
kernel = 8
81,1,1<,
81,-8,1<,
81,1,1<
<;
convolvedData = Abs@ListConvolve@kernel, mandelDataDD;
boundaryPic = ArrayPlotAconvolvedData,
Frame ® False, DataRange ® 88-2,0.6<,8-1.3,1.3<<,
ColorFunction ® IGrayLevelAH1-ðL100 E&M,
ImageSize ® 250E;
*L
097739Vinicius.nb 39
Manipulate@Deploy@Grid@88boundaryPic,
Dynamic@JuliaModified@pt@@1DD + pt@@2DD I,
PlotRange ® 88- 1.8, 1.8<, 8- 1.8, 1.8<<DD<,
8Text Dynamic@If@pt@@2DD ³ 0,
Row@8Style@"c", ItalicD, " = ",
ToString@NumberForm@pt@@1DD, 85, 4<, NumberPadding ® 8" ", "0"<DD , " + ",
ToString@NumberForm@pt@@2DD, 85, 4<, NumberPadding ® 8" ", "0"<DD, "ä"<D,
Row@8Style@"c", ItalicD, " = ",
ToString@NumberForm@pt@@1DD, 85, 4<, NumberPadding ® 8" ", "0"<DD
, " - ",
ToString@NumberForm@- pt@@2DD, 85, 4<, NumberPadding ® 8" ", "0"<DD, "ä"<DDD,
SpanFromLeft<
<DD,
88pt, 80, 0<<, 8- 2, - 1.3<, 80.6, 1.3<, Locator<,
SaveDefinitions ® TrueD
c = -1.7140 + 0.0250ä
Σ = 3; Ρ = 26.5; Β = 1;
vinny =
8x@tD, y@tD, z@tD< . NDSolve@8x '@tD Σ Hy@tD - x@tDL, y '@tD Ρ x@tD - x@tD z@tD - y@tD,
z '@tD x@tD y@tD - Β z@tD, x@0D 0, y@0D 1, z@0D 1<,
8x@tD, y@tD, z@tD<, 8t, 0, 100<, MaxSteps ® 10 000D@@1DD;
ParametricPlot3D@vinny, 8t, 0, 100<, PlotPoints ® 10 000D
0 10 20 30 40
-20
-10
10
20
-10
-5
0
5
10