Você está na página 1de 24

No c oes de programa cao em Mathematica

Magda Stela Rebelo


Ano Lectivo 2002/2003

INDICE 1

Indice
1.1 Introdu c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Deni c ao de fun c oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Composi c oes iterativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Estruturas de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 Listas, Vectores e Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.6 Uso de fun c oes no Mathematica . . . . . . . . . . . . . . . . . . . . . . . . 21
1.1. INTRODUC

AO 2
No c oes de programa cao em
Mathematica
1.1 Introdu cao
O Mathematica permite efectuar c alculos numericos e simb olicos, usando uma lin-
guagem muito pr oxima da linguagem usual da matem atica. Constitui tambem uma ferra-
menta muito util para o tra cado de gr acos de diversos tipos. O Kernel e o Notebook s ao
as duas componentes que constituem o sistema Mathematica.
O Notebook e identico a um processador de texto, pelo que se utiliza para escrever e editar
texto e express oes, visualizar, gravar e imprimir resultados.
O Kernel processa e avalia as express oes escritas no Notebook; e carregado e ca activo
aquando da primeira avalia c ao e permanece activo ate que se desligue o sistema Mathe-
matica ou o Kernel.
O Notebook e formado por celulas. Cada celula pode conter o Input (comando introduzido
pelo utilizador) e o seu respectivo Output (resultado do processamento do comando In-
put), mensagens de erro, gr acos, etc... Note-se que o Input de uma celula pode ser
avaliado premindo simultaneamente as teclas shift e return.
No Notebook pode misturar texto com comandos. Para tal basta escrever os coment arios
entre os smbolos: ( ), e assim o Mathematica executa os comandos mas n ao executa
o coment ario.
Vejamos um exemplo
In[1]:=3*5 (*multiplica c~ ao de 3 por 5*)
Out[1]=15
As palavras In[1] e Out[1] abreviam as palavras Input e Output respectivamente. O
n umero entre parentesis rectos indica que este e o primeiro Input e o primeiro Output. O
Mathematica numera o Input e Output pela ordem em que s ao executados. Neste pequeno
exemplo o unico comando executado e a multiplica c ao de 3 por 5, pois como o restante se
1.1. INTRODUC

AO 3
encontra entre os smbolos (* *) o Mathematica interpreta o comando como coment ario e
n ao o executa.
O Mathematica e Case Sensitive, isto e, nos seus comandos letras mai usculas e
min usculas n ao s ao indistintas. Como qualquer linguagem o Mathematica tem uma sin-
taxe inerente. Vejamos algumas regras:
- Os comandos come cam com letra mai uscula, e se o comando e formado por duas
palavras, cada palavra come ca por letra mai uscula. Ex: MatrixForm
- As fun c oes em Mathematica tem sempre a primeira letra mai uscula e o argumento
aparece entre parentesis recto. Vejamos alguns exemplos em concreto
Tabela 1.1
Nota cao usual Escrita em Mathematica
sen(x) Sin[x]
cos(x) Cos[x]
f(x) = 2x f[x_]:=2x
f(x, y) = 2x + y f[x_,y_]:=2x+y
ln(x) Log[x]
log
a
(x) Log[a,x]

x Sqrt[x]
Para alem dos parentesis rectos o Mathematica utiliza os parentesis curvos e as
chavetas.
Os parentesis curvos s ao usados para agrupar termos, ` as vezes s ao estritamente
necess arios; outras vezes s ao usados para tornar as express oes mais claras.
As chavetas s ao normalmente usadas para delimitar uma lista, de modo a que todos
os objectos de um conjunto sejam tratados como um s o.
- As express oes booleanas (de valor verdadeiro ou falso) desempenham um papel
importante no Mathematica. A tabela que se segue descreve a sintaxe dos conectivos
booleanos nega c ao, conjun c ao e disjun c ao:
1.1. INTRODUC

AO 4
Tabela 1.2
Escrita em Mathematica
Nega c ao !p ou Not[p]
Conjun c ao p&&q ou And[p,q]
Disjun c ao p||q ou Or[p,q]
- No que diz respeito aos principais operadores de compara c ao, a sua sintaxe e des-
crita na tabela apresentada de seguida
Tabela 1.3
Escrita em Mathematica
Igual x = = y ou Equal[x,y]
Diferente x != y ou Unequal[x,y]
Menor x < y ou Less[x,y]
Maior x > y ou Greater[x,y]
Menor ou igual x <= y ou LessEqual[x,y]
Maior ou igual x >= y ou GreaterEqual[x,y]
Para obter mais informa c oes acerca de um comando podemos recorrer ao Help. Para
tal, no menu do Helpescolha Help, este encontra-se dividido nos seguintes t opicos:
- Built-in Functions: Informa c ao acerca das fun c oes que est ao denidas no Mathe-
matica.
- Add-ons:Informa c ao acerca dos programas adicionais no seu sistema.
- The Mathematica Book: O livro The Mathematica Book.
- Getting Started: Algumas informa c oes iniciais.
- Other Information: Informa c oes acerca dos comandos denidos no menu do
Mathematica e outras informa c oes.
- Master Index: Um ndice geral do Help.
1.2. DEFINIC

AO DE FUNC

OES 5
Para alem do mencionado anteriormente tambem no pr oprio Notebook e possvel obter
informa c oes acerca de um determinado comando do Mathematica. Para tal basta escrever
?MatrixForm :Fornece breve informa c ao acerca do comando MatrixForm
??MatrixForm :Fornece informa c ao detalhada acerca do comando MatrixForm
?F* :Fornece lista de todos os comandos que come cam com a letra F
?*Form :Fornece lista de todos os comandos que terminam com Form
1.2 Deni cao de fun c oes
O Mathematica possui um enorme leque de fun c oes pre denidas. No entanto, ao longo
do curso teremos necessidade de denir as nossas pr oprias fun c oes que poder ao n ao estar
disponveis no leque de fun c oes iniciais do Mathematica.
A deni c ao de uma fun c ao real de vari avel real f : R R, no Mathematica, e efectuada
atraves do comando:
f[x

] = expressao (1.1)
O underscore, , serve para indicar a vari avel independente, ou seja, permite que os
argumentos da fun c ao possam ser substitudos por qualquer express ao, seja ela numerica
ou simb olica.
Exemplo 1
- Atribui c ao a f[x] da express ao z
In[1]:= f[x] = z (*defini c~ ao de uma express~ ao*)
Out[1]= z
- A express ao f[x] e substituda por z, o mesmo n ao acontece a f[y]
In[2]:=f[x] + f[y]
Out[2]= z + f[y]
- Denamos agora a fun c ao Cos(x)
In[3]:= f[x_] = Cos[x] (*defini c~ ao da fun c~ ao Cos(x)*)
Out[3]=Cos[x]
1.2. DEFINIC

AO DE FUNC

OES 6
- Efectuando novamente a soma de f[x] com f[y], o valor z continua a ser atribudo ` a
express ao f[x]. No entanto, o valor de f[y] e identicado com a imagem da fun c ao
f, anteriormente denida, no ponto y.
In[4]:=f[x] + f[y]
Out[4]= z + Cos[y]
- Se n ao quiser mais identicar f[x] com z pode apagar essa informa c ao da mem oria.
Fa ca,
In[5]:=Clear[f]
ou
In[6]:= f =.
Assim, agora quando denimos uma nova fun c ao f e efectuamos a soma de f[x]
com f[y] obtemos
In[7]:= f[x_]=Log[x] (*defini c~ ao da fun c~ ao logar tmica de base e*)
Out[7]=Log[x]
In[8]:= f[x] + f[y] (*soma de duas imagens da fun c~ ao f*)
Out[8]= Log[x] + Log[y]
Existem determinadas situa c oes em que se torna necess ario juntar os dois conceitos
atr as explicados.
Por exemplo, a deni c ao da fun c ao factorial pode ser feita da seguinte forma:
f[n

] := nf[n 1]; f[0] = 1.


Esta deni c ao signica que para qualquer valor de n, f[n] toma o valor nf[n1], excepto
quando n = 0, f[0] toma o valor 1.
In[1]:= f[0] = 1
Out[1]= 1
In[2]:= f[n_]:=nf[n-1]
In[3]:= f[10] (*o valor de 10!*)
Out[3]= 3628800
1.2. DEFINIC

AO DE FUNC

OES 7
Observe-se que na deni c ao da fun c ao factorial utilizou-se :=inves de =. De seguida
ser a ilustrado, atraves de um exemplo, a diferen ca entre =(atribui c ao imediata) e
:=(atribui c ao diferida) na deni c ao de fun c oes.
Exemplo 2
In[1]:= a = 3
Out[1]= 3
In[2]:= f[x_] = a + x(*)
Out[2]= 3 + x
In[3]:= g[x_] := a + x(**)
In[4]:= g[x]
Out[4]= 3 + x
O Mathematica avalia o lado direito da express ao (*) e atribui o resultado ao lado es-
querdo. Neste caso, como a tem o valor numerico 3, a fun c ao passa a ser f(x) = 3 + x.
Mesmo que a seja alterado, como na altura da atribui c ao da fun c ao f(x) a vari avel a valia
3, a express ao que dene f(x) n ao e modicada.
No que diz respeito ` a express ao (**), o Mathematica n ao avalia o lado direito da ex-
press ao (**) e associa os smbolos que representam a express ao (**) ` a fun c ao g(x). So-
mente quando a fun c ao e invocada, substitui os valores simb olicos pelos valores guardados
na mem oria nesse instante. Neste momento a fun c ao g(x) = 3 + x. Eventuais futuras
altera c oes de a, repercutem-se em futuras invoca c oes de g(x), o mesmo n ao acontece ` a
fun c ao f(x).
In[7]:= Clear[a]
In[8]:= f[x]
Out[8]= 3 + x
In[9]:= g[x]
Out[9]= a + x
Alguns comandos importantes no estudo de fun c oes
1.2. DEFINIC

AO DE FUNC

OES 8
- O comando
D[f, x]
do Mathematica calcula a derivada da fun c ao f em rela c ao ` a vari avel x.
Para calcular a derivada de ordem n da fun c ao f em rela c ao ` a vari avel x, use o
comando
D[f,{x,n}] .
Podemos denir a derivada de uma fun c ao por forma a podermos atribuir valores
ao argumento, calcular limites, etc. . . .
Exemplo 3
In[1]:= f[x_] = Log[x] - 2
Out[1]= -2 + Log[x]
In[2]:= df[x_] = D[f[x], x](*derivada da fun c~ ao definida acima*)
Out[2]= 1/x
In[3]:= df[1](*valor da derivada no ponto 1*)
Out[3]= 1
In[4]:= Limit[f[x], x -> 0]
Out[4]=-
In[5]:= Limit[df[x], x -> +]
Out[5]= 0
O comando
Solve[eq,var]
do Mathematica permite resolver a equa c ao eq relativamente ` a vari avel var. Deter-
minar os zeros de uma dada fun c ao f(x) consiste na resolu c ao da equa c ao f(x) = 0,
pelo que para determinar os zeros da fun c ao f, no Mathematica, podemos aplicar o
comando Solve[] da seguinte forma
1.2. DEFINIC

AO DE FUNC

OES 9
Solve[f(x)==0,x].
- Gera cao de gracos
O comando, no Mathematica, que permite desenhar o gr aco de uma fun c ao e
Plot[] .
Vejamos qual a informa c ao acerca deste comando
In[1]:= ?Plot
From In[1]:= "Plot[f, {x, xmin, xmax}] generates a
plot of f as a function of x from xmin \ to xmax. Plot[{f1, f2,
... }, {x, xmin, xmax}] plots several functions fi."
Por exemplo para desenhar o gr aco da fun c ao f(x) = x
2
3x + 5 no intervalo
[4, 5] o comando no Mathematica utilizado ser a
In[1]:=f[x_] = x^2 - 3x + 5;
In[2]:= Plot[f[x], {x, -4, 5}]
Figura 1.1: Graco da fun cao f(x)
-4 -2 2 4
5
10
15
20
25
A fun c ao Plot admite v arias op c oes adicionais (experimente ??Plot no Mathemati-
ca), como por exemplo, os intervalos a desenhar nos eixos das abcissas e ordenadas,
o estilo de linha do gr aco, a cor, etc . . ..
Por exemplo a instru c ao
Plot[Cos[x],{x,-2Pi,2Pi}, AxesOrigin->{0,0}, Frame->True,
PlotRange->{{-4Pi,4Pi},{-1.5,1.5}},
PlotStyle->{RGBColor[0.3,0.4,0.5], AbsoluteThickness[1]}]
1.2. DEFINIC

AO DE FUNC

OES 10
desenha o gr aco da fun c ao Cos(x) com os eixos coordenados centrados na origem
(AxesOrigin), com um rect angulo desenhado ` a volta do gr aco (Frame), intervalo
do eixo das abcissas entre 4 e 4 (PlotRange), estilo do gr aco (PlotStyle).
Na instru c ao acima as op c oes do PlotStyle utilizadas foram:
Figura 1.2: Graco da fun cao Cos(x)
-10 -5 0 5 10
-1
-0.5
0
0.5
1
1.5
- RGBColor: o peso das cores vermelho(R), verde(G) e azul(B) encontram-se
entre os valores 0 e 1.
- AbsoluteThickness: espessura da linha do gr aco. Poderia escolher Thick-
ness e nesse caso o valor seria relativo ` a area do gr aco.
Para desenhar o gr aco de fun c oes cujo domnio est a contido em R
2
o comando a
utilizar e
Plot3D[f[x, y], {x, min
x
, max
x
}, {y, min
y
, max
y
}] .
Por exemplo o gr aco da fun c ao f(x, y) = sin(x
2
+ y) para valores de (x, y) D =
[0, 4] [0, 4] e dado por
1.3. COMPOSIC

OES ITERATIVAS 11
Figura 1.3: Graco da fun cao f(x, y)
0
1
2
3
4
0
1
2
3
4
-1
-0.5
0
0.5
1
0
1
2
3
4
1.3 Composi c oes iterativas
Nesta sec c ao iremos estudar algumas das constru c oes que permitem executar repetida-
mente uma determinada ac c ao enquanto uma condi c ao e verdadeira. As constru c oes aqui
abordadas s ao os ciclos Do, While e For.
- O comando Do permite repetir v arias instru c oes um n umero pre-determinado de
vezes:
Do[(instr1;instr2;...),{i,imin,imax,di}]
i e uma vari avel que varia desde imin ate imax com espa camento di. Do repete
as instru c oes instr1;instr2;... tantas vezes quanto os valores que a vari avel i
assumir. As vari aveis i, imin, imax e di s ao inteiras ou reais.
Exemplo 4
In[1]:= Do[Print[i], {i, 2, 12, 2}]
2
4
6
8
10
12
1.3. COMPOSIC

OES ITERATIVAS 12
No exemplo (4) a vari avel i vai tomar todos os valores pares entre 2 e 12.
Vejamos um outro exemplo.
Exemplo 5
In[4]:= sum = 0;
Do[sum = sum + i, {i, 2, 100, 2}] (*soma os pares entre 2 e 100*)
Print[sum]
2550
- A composi c ao iterativa While permite efectuar uma determinada instru c ao ate que
uma dada condi c ao falhe, ou seja, deixe de ser verdadeira:
While[condi c~ ao,ac c~ ao]
Enquanto a condi c~ ao e verdadeira a ac c~ ao e executada.
Exemplo 6
In[1]:= x = 2;
While[x < 12, x = x + 2] (*Imprime o maior par menor ou igual 12*)
Print[x]
12
- Para nalizar s o nos falta falar da composi c ao iterativa For.
Esta composi c ao tem como forma
For[i=imin, condi c~ ao, incr, ac c~ ao]
i e uma vari avel que e inicializada com o valor imin e vai sendo incrementada, sendo
o valor do incremento incr, ate a condi c~ ao deixar de ser verdadeira. Analogamente
a ac c~ ao e executada enquanto a condi c~ ao for verdadeira.
Exemplo 7
In[1]:= For[i = 1, i < 4, i++, Print[i]]
Out[1]=
1
2
3
1.4. ESTRUTURAS DE CONTROLE 13
O exemplo (7) imprime os tres primeiros naturais. O smbolo i++ incrementa o valor
de i 1.
Vejamos um exemplo um pouco mais complicado.
Exemplo 8
In[2]:= For[i = 1; t = x, i^2 < 10, i++, t = t^2 + i; Print[t] ]
(1 + x^2)
(2 +((1 + x^2))^2)
(3 + ((2 + ((1 + x^2))^2))^2)
No exemplo (8) as vari aveis que s ao inicializadas s ao i e t, mas somente a vari avel i
e incrementada e neste caso o tipo de incremento utilizado e o mesmo do exemplo ante-
rior. Enquanto i^2 < 10 (condi c ao) v ao sendo executadas duas ac c oes: o valor do t e
actualizado para t^2+i e cada uma destas express oes e imprimida.
1.4 Estruturas de controle
As estruturas de controle s ao conjuntos de instru c oes que permitem o programa actuar
segundo a avalia c ao de uma express ao booleana. No Mathematica as instru c oes If e
Which s ao estruturas de selec c ao.
O comando If pode ser utilizado de duas formas:
(i) A instru c ao
If[condi c~ ao,express~ ao1, express~ ao2]
avalia a condi c~ ao e executa a express~ ao1, caso a primeira seja verdadeira e executa
a express~ ao2, caso a primeira seja falsa.
(ii) A instru c ao
If[condi c~ ao, express~ ao1, express~ ao2, express~ ao3]
trabalha de forma an aloga ` a anterior, mas caso a condi c~ ao n ao seja verdadeira
nem falsa executa a express~ ao 3.
1.4. ESTRUTURAS DE CONTROLE 14
Exemplo 9 In[1]:= If[7 > 8, x, y]
Out[1]= y
In[2]:= If[x == y, a, b, c]
Out[2]= c
Podemos ainda recorrer ` a instru c ao If para denir uma fun c ao denida por ramos. Por
exemplo a fun c ao
f(x) =
_
x se x < 0
sin(x) se x 0
pode ser denida no Mathematica, recorrendo ` a instru c ao If, da seguinte forma
f[x_]=If[x < 0, x, Sin[x]];
Figura 1.4: Graco da fun cao f(x)
-6 -4 -2 2 4 6
-4
-3
-2
-1
1
Quando temos de avaliar mais que uma express ao e conveniente utilizar a instru c ao
Which. A estrutura
Which[condi c~ ao1, express~ ao1, condi c~ ao2, express~ ao2,...]
avalia cada uma das condi c~ oes i e executa a express~ ao i correspondente ` a primeira
condi c~ ao i avaliada como verdadeira.
Exemplo 10 In[1]:= Which[1 == 2, x, 1 == 1, y, 3 == 3, z]
Out[1]= y
Se pretendermos denir a fun c ao
g(x) =
_
_
_
x
2
+ 2 se x 0
2 se 0 < x < 1
2 cos(x 1) se x 1
podemos recorrer ` a instru c ao Which e denir g(x) da seguinte forma
g[x_]:=Which[x<=0,x^2 + 2,(x > 0 && x < 1), 2, x >= 1,2*Cos[x-1]]
1.5. LISTAS, VECTORES E MATRIZES 15
Figura 1.5: Graco da fun cao g(x)
-10 -5 5 10
-2
2
4
6
8
1.5 Listas, Vectores e Matrizes
As listas s ao uma das constru c oes mais utilizadas nas linguagens de programa c ao. A
sua utiliza c ao torna possvel agrupar express oes do mesmo tipo ou de tipos diferentes.
Representam-se de maneira simples: elementos separados por virgulas e entre chavetas.
Por exemplo, para indicar que as coordenadas do ponto p s ao 2 e 3 costuma-se escrever
p = (2, 3). Em Mathematica escrevemos
In[1]:= p = {2, 3}
Out[1]= {2, 3}
Se pretendermos obter apenas a segunda coordenada, ou seja, o segundo elemento da lista
escreveramos
In[2]:= p[[2]]
Out[2]= 3
Aplicar uma determinada fun c ao a uma lista consiste, geralmente, em aplicar a fun c ao a
cada um dos elementos da lista.
Vejamos um exemplo:
Exemplo 11
In[3]:= lista1 = {1, 2, 3} (*lista1 e uma lista com 3 elementos*)
Out[3]= {1, 2, 3}
In[4]:= a = x^lista1 + 2 (*a e uma lista, x^lista1 eleva x a cada
um dos elementos da lista1*)
Out[4]= {2 + x, 2 + x^2, 2 + x^3}
1.5. LISTAS, VECTORES E MATRIZES 16
Podemos efectuar v arias opera c oes sobre a lista a, nomeadamente a atribui c ao de um
valor ` a vari avel x ou derivar a. Derivar a lista a signica derivar cada um dos elementos
de a em rela c ao a x.
Exemplo 12
In[5]:= D[a, x] (*derivar "a" em rela c~ ao a x*)
Out[5]={1, 2x,3x^2}
In[6]:= a /. x -> 2 (*na vari avel a, onde encontrar a vari avel x,
substitu por 2*)
Out[6]= {4, 6, 10}
Existem fun c oes que tratam as listas como um unico objecto, neste caso, para aplicar a
fun c ao a cada um dos elementos da lista ter a de usar a fun c ao Map.
In[7]:= f[x_] := x^3
In[8]:= Map[f, lista1] Out[8]= {1, 8, 27}
A fun c ao Table[] permite construir uma lista cujos elementos podem ser denidos de uma
forma generica. Vejamos como podemos utilizar esta fun c ao para gerar, por exemplo, um
vector cujos elementos s ao os primeiros 5 mpares:
Exemplo 13
In[1]:= Table[2*i - 1, {i, 1, 5}]
Out[1]= {1, 3, 5, 7, 9}
Suponhamos que se pretende o vector com 5 elementos onde cada um destes toma o valor
2, ent ao este tambem pode ser obtido a partir da fun c ao Table[]
Exemplo 14
In[3]:= Table[2, {5}]
Out[3]= {2, 2, 2, 2, 2}
Os vectores e as matrizes s ao representados por listas e listas de listas respectivamente.
No que diz respeito ` as matrizes, a ideia consiste em olhar, por exemplo, para uma matriz
do tipo 22 como uma lista de duas linhas, onde cada linha e uma lista de duas entradas
numericas.
1.5. LISTAS, VECTORES E MATRIZES 17
Exemplo 15
In[1]:= V = {1, 3, 4, 6} (*v e um vector de dimens~ ao 4x1*)
Out[1]={1, 3, 4, 6}
In[2]:= A = {{a, b}, {c, d}} (*M e uma matriz 2x2*)
Out[2]={{a,b},{c, d}}
Para escrever A e V em forma matricial podemos usar a fun c ao MatrixForm[]. Contudo,
para efectuar opera c oes entre matrizes e vectores estes n ao se podem encontrar nesta
forma.
In[3]:= MatrixForm[A] (*ou A//MatrixForm*)
Out[3]//MatrixForm=
_
a b
c d
_
In[4]:= VectorForm[v]
Out[4]//MatrixForm=
_
_
_
_
1
3
4
6
_
_
_
_
O sinal de multiplica c ao entre matrizes e o ponto nal, ., em vez do habitual *.
Exemplo 16
In[5]:= v = {1, 2, 3}; A ={{2, -1, 1}, {3, 4, -4}, {3, 0, 5}};
In[6]:= v.A Out[7]= {17, 7, 8}
In[8]:=MatrixForm[v.A]
Out[8]//MatrixForm=
_
_
17
7
8
_
_
Para alem do produto de matrizes, podemos realizar todas as opera c oes entre matrizes
nomeadamente a soma, a subtrac c ao, a multiplica c ao por um escalar, etc . . . .
Por exemplo a multiplica c ao dum vector v por um escalar p
1.5. LISTAS, VECTORES E MATRIZES 18
Exemplo 17
In[1]:= v = {2, 4, 7}
Out[1]= {2, 4, 7}
In[2]:= p*v
Out[2]= {2 p, 4 p, 7 p}
No Mathematica, somar um escalar ao vector v signica somar um escalar, p, a cada um
dos elementos de v... o que n ao faz muito sentido em Algebra a menos que estejamos a
somar o vector v ao vector q*{1,1,1}.
In[3]:= q + v
Out[3]={2 + q, 4 + q, 7 + q}
O Mathematica sabe que n ao pode somar vectores de dimens ao diferente, que s o e
possvel multiplicar duas matrizes, A e B, cujas dimens oes sejam respectivamente mq
e q n. Caso isto n ao aconte ca, o Mathematica emita mensagens de erro.
Exemplo 18
In[4]:= v + {2, 3}
From In[4]:= Thread::"tdlen": "Objects of
unequal length in {2, 4, 7}+{2, 3} cannot be combined."
Out[4]={2,3} +{2, 4, 7}
In[5]:= M = {{2, 3}, {1, 2}} Out[5]= {{2, 3}, {1, 2}}
In[6]:= M.v
From In[6]:= Dot::"dotsh": "Tensors {{2, 3},{1, 2}}and
{2, 4, 7} have incompatible shapes." Out[6]= {{2,
3},{1,2}}.{2,4,7}
Tudo o que foi dito para vectores e aplic avel ` as matrizes de quaisquer dimens oes.
Para alem das muitas opera c oes sobre listas, est ao tambem disponveis v arias opera c oes
especcas sobre vectores e matrizes. Em seguida ilustram-se algumas delas:
Exemplo 19
1.5. LISTAS, VECTORES E MATRIZES 19
In[1]:= B = {{1, 2}, {5, 7}}
Out[1]= {{1, 2}, {5, 7}}
In[2]:= Det[B] (*calcula o determinante da matriz B*) Out[2]= -3
In[3]:= Inverse[B](*Determina a inversa de B *)
Out[3]={{-7/3,2/3}, {5/3, -1/3}}
In[4]:= Transpose[B] (*Determina a transposta de B*)
Out[4]={{1,5}, {2, 7}}
In[5]:= IdentityMatrix[3](*Cria a matriz Identidade de dimens~ ao
3x3*)
Out[5]= {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}
In[6]:= DiagonalMatrix[{2, 1, 3}](*Cria uma matriz diagonal,
cujos elementos da diagonal s~ ao
os elementos da lista do argumento*)
Out[6]= {{2, 0, 0}, {0, 1, 0}, {0, 0, 3}}
In[7]:= v1 = {1, 2} Out[7]= {1, 2}
In[8]:= LinearSolve[B, v1] (*Determina a solu c~ ao do sistema de
equa c~ oes lineares BX=v1*)
Out[8]= {-1, 1}
Os elementos da matriz s ao referenciados atraves da posi c ao que ocupam na lista. Por
exemplo, considere-se uma matriz A de dimens ao 3 3
A =
_
_
a b c
d e f
g h i
_
_
,
a sua deni c ao no Mathematica e
In[1]:= A={{a,b,c},{d,e,f},{g,h,i}};
O elemento da segunda linha, terceira coluna da matriz A, no Mathematica ser a denotado
por
1.5. LISTAS, VECTORES E MATRIZES 20
In[2]:=A[[2,3]]
Out[2]=f
ou usando a fun c ao Part[]
In[3]:=Part[A,2,3]
Out[3]=f
ou usando o facto de que queremos o terceiro elemento do segundo elemento da lista
In[4]:=A[[2]][[3]]
Out[4]=f
Caso se pretenda uma das linhas ou coluna da matriz A fazemos
In[5]:=A[[1]] (*a primeira linha da matriz A*)
Out[5]={a,b,c}
In[6]:=Table[A[[i,1]],{i,1,3}] (* a primeira coluna de A*)
Out[6]={a,d,g}
Os comandos Length[] e Dimensions indicam o comprimento e a dimens ao duma lista,
respectivamente.
In[7]:= Length[A]
Out[7]= 3
In[8]:= Dimensions[A]
Out[8]= {3, 3}
Regressemos ao operador Table[]. Vimos anteriormente um exemplo de como obter um
vector cujos elementos obedeciam a uma determinada regra. De forma an aloga, podemos
pensar no mesmo tipo de constru c oes para matrizes bidimensionais, tridimensionais,. . . ,
n dimensionais.
Por exemplo:
Suponhamos que se pretendia escrever as entradas de uma qualquer matriz A de dimens ao
33, simetrica, isto e tal que A = A
T
. Assim, se A = [a
ij
]
1i,j3
podemos denir a matriz
A da seguinte forma
In[1]:=A=Table[a[i,j]=a[j,i],{i,1,3},{j,1,3}] Out[1]=
{{a[1,1],a[2,1],a[3, 1]},
{a[2, 1], a[2, 2],a[3, 2]},
{a[3, 1],a[3, 2],a[3, 3]}}
1.6. USO DE FUNC

OES NO MATHEMATICA 21
Matricialmente
MatrixForm[A]
_
_
a[1, 1] a[2, 1] a[3, 1]
a[2, 1] a[2, 2] a[3, 2]
a[3, 1] a[3, 2] a[3, 3]
_
_
Exemplo 20
In[2]:= B = Table[{i, i^2}, {i, 1, 3}]
Out[2]={{1, 1},{2,4},{3,9}}
O exemplo (20) dene uma matriz de dimens oes 3 2, onde cada uma das entradas e
o ndice da linha ou o quadrado deste consoante o elemento seja referente ` a primeira ou
segunda coluna de B.
A representa c ao matricial de B e
MatrixForm[B]
_
_
1 1
2 4
3 9
_
_
1.6 Uso de fun c oes no Mathematica
Na sec c ao (1.2) vimos como denir uma fun c ao dada por uma determinada express ao.
De modo a tornar um programa mais claro, recorre-se ao uso de fun c oes para executar
um conjunto de instru c oes.
Por exemplo, se no Mathematica n ao houvesse uma fun c ao para calcular a soma, poderamos
denir a seguinte fun c ao para determinar a soma dos elementos de uma lista.
Exemplo 21
SomaLista1[ x_] := (n =Length[x] (*Length[] permite conhecer o
comprimento de uma lista *);
soma = 0;
Do[soma = soma + x[[i]], {i, 1,n}](*calcula a
soma dos elementos da lista x*);
soma);
O resultado que ca guardado na fun c ao SomaLista1 e a ultima instru c ao da fun c ao, que
neste caso e a soma de todos os elementos de uma determinada lista. Note-se que esta
ultima instru c ao n ao tem ;.
A fun c ao SomaLista1 pode ser utilizada na deni c ao de outras fun c oes.
1.6. USO DE FUNC

OES NO MATHEMATICA 22
A fun c ao Func1, calcula os divisores de x, chama a fun c ao SomaLista1 para calcular
a soma dos divisores de x e depois compara com o dobro de x. Esta fun c ao e do tipo
Booleano, ou seja, Func1[x] toma e express ao True ou False consoante a soma dos
divisores de x seja o dobro de x ou n ao.
Exemplo 22
In[2]:=Func1[x_] := (div = Divisors[x];(*Calcula os divisores de
x*)
SomaLista1[div] == 2x(*Compara div com o dobro
de x*)
)
In[3]:=Func1[10]
Out[3]=False
In[4]:=Func1[28]
Out[3]=True
Na deni c ao de cada uma das fun c oes existem muitas vari aveis que s ao vari aveis auxili-
ares e que s o s ao usadas na deni c ao desta. N ao nos interessa que essas vari aveis estejam
denidas fora das fun c oes, pois tal s o implica guardar em mem oria vari aveis desnecess arias
e pode interferir com o resto do programa.
Exemplos de tais vari aveis, nas fun c oes acima denidas, s ao as vari aveis n, soma e div.
Podemos usar essas vari aveis como locais, isto e, no nal da execu c ao da fun c ao, o Mathe-
matica faz um Clearautom atico dessas vari aveis. Tal procedimento pode ser realizado
utilizando a estrutura do Module.
As vari aveis locais no Module s o s ao acessveis e modic aveis no interior do Module, o que
permite isol a-las do contexto global.O comando
Module[{x, y, ... }, expr]
indica que as vari aveis x, y, ... s ao tratadas como vari aveis locais na estrutura da fun c ao.
Podemos redenir as fun c oes SomaLista1 e Func1.
SomaLista2[ x_] := Module[{n,soma},
n =Length[x];
soma = 0;
Do[soma = soma + x[[i]], {i, 1,n}];
soma];
1.6. USO DE FUNC

OES NO MATHEMATICA 23
In[2]:=Func1[x_] := [{div}
div = Divisors[x];
SomaLista1[div] == 2x
];
Execute as fun c oes acima e verique que as vari aveis n, soma e div deixam de ter valores
guardados na mem oria. Um exemplo de fun c ao que faz uso de vari aveis locais e a fun c ao
Do, pois a vari avel i usada na fun c ao Do, na fun c ao SomaLista1, e local e n ao est a denida
ap os o uso dessa fun c ao.

Você também pode gostar