You are on page 1of 24

Noções de programação em Mathematica

Magda Stela Rebelo

Ano Lectivo 2002/2003


ÍNDICE 1

Índice

1.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Definição de funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Composições iterativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Estruturas de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 Listas, Vectores e Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.6 Uso de funções no Mathematica . . . . . . . . . . . . . . . . . . . . . . . . 21
1.1. INTRODUÇÃO 2

Noções de programação em
Mathematica

1.1 Introdução
O Mathematica permite efectuar cálculos numéricos e simbólicos, usando uma lin-
guagem muito próxima da linguagem usual da matemática. Constitui também uma ferra-
menta muito útil para o traçado de gráficos de diversos tipos. O Kernel e o Notebook são
as duas componentes que constituem o sistema Mathematica.
O Notebook é idêntico a um processador de texto, pelo que se utiliza para escrever e editar
texto e expressões, visualizar, gravar e imprimir resultados.
O Kernel processa e avalia as expressões escritas no Notebook ; é carregado e fica activo
aquando da primeira avaliação e permanece activo até que se desligue o sistema Mathe-
matica ou o Kernel.
O Notebook é formado por células. Cada célula pode conter o Input (comando introduzido
pelo utilizador) e o seu respectivo Output (resultado do processamento do comando In-
put), mensagens de erro, gráficos, etc... Note-se que o Input de uma célula pode ser
avaliado premindo simultaneamente as teclas shift e return.
No Notebook pode misturar texto com comandos. Para tal basta escrever os comentários
entre os sı́mbolos: (∗ ∗), e assim o Mathematica executa os comandos mas não executa
o comentário.
Vejamos um exemplo

In[1]:=3*5 (*multiplicaç~
ao de 3 por 5*)
Out[1]=15

As palavras In[1] e Out[1] abreviam as palavras Input e Output respectivamente. O


número entre parêntesis rectos indica que este é o primeiro Input e o primeiro Output. O
Mathematica numera o Input e Output pela ordem em que são executados. Neste pequeno
exemplo o único comando executado é a multiplicação de 3 por 5, pois como o restante se
1.1. INTRODUÇÃO 3

encontra entre os sı́mbolos (* *) o Mathematica interpreta o comando como comentário e


não o executa.
O Mathematica é ”Case Sensitive”, isto é, nos seus comandos letras maiúsculas e
minúsculas não são indistintas. Como qualquer linguagem o Mathematica tem uma sin-
taxe inerente. Vejamos algumas regras:

- Os comandos começam com letra maiúscula, e se o comando é formado por duas


palavras, cada palavra começa por letra maiúscula. Ex: MatrixForm

- As funções em Mathematica têm sempre a primeira letra maiúscula e o argumento


aparece entre parêntesis recto. Vejamos alguns exemplos em concreto

Tabela 1.1

Notação 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 além dos parêntesis rectos o Mathematica utiliza os parêntesis curvos e as


chavetas.
Os parêntesis curvos são usados para agrupar termos, às vezes são estritamente
necessários; outras vezes são usados para tornar as expressões mais claras.
As chavetas são normalmente usadas para delimitar uma lista, de modo a que todos
os objectos de um conjunto sejam tratados como um só.

- As expressões booleanas (de valor verdadeiro ou falso) desempenham um papel


importante no Mathematica. A tabela que se segue descreve a sintaxe dos conectivos
booleanos negação, conjunção e disjunção:
1.1. INTRODUÇÃO 4

Tabela 1.2

Escrita em Mathematica

Negação !p ou Not[p]
Conjunção p&&q ou And[p,q]
Disjunção p||q ou Or[p,q]

- No que diz respeito aos principais operadores de comparação, a sua sintaxe é 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ções acerca de um comando podemos recorrer ao ”Help”. Para
tal, no menu do ”Help”escolha ”Help”, este encontra-se dividido nos seguintes tópicos:

- Built-in Functions: Informação acerca das funções que estão definidas no Mathe-
matica.

- Add-ons:Informação acerca dos programas adicionais no seu sistema.

- The Mathematica Book: O livro ”The Mathematica Book”.

- Getting Started: Algumas informações iniciais.

- Other Information: Informações acerca dos comandos definidos no menu do


Mathematica e outras informações.

- Master Index: Um ı́ndice geral do ”Help”.


1.2. DEFINIÇÃO DE FUNÇÕES 5

Para além do mencionado anteriormente também no próprio Notebook é possı́vel obter


informações acerca de um determinado comando do Mathematica. Para tal basta escrever

?MatrixForm :Fornece breve informação acerca do comando MatrixForm


??MatrixForm :Fornece informação detalhada acerca do comando MatrixForm
?F* :Fornece lista de todos os comandos que começam com a letra F
?*Form :Fornece lista de todos os comandos que terminam com Form

1.2 Definição de funções


O Mathematica possui um enorme leque de funções pré definidas. No entanto, ao longo
do curso teremos necessidade de definir as nossas próprias funções que poderão não estar
disponı́veis no leque de funções iniciais do Mathematica.
A definição de uma função real de variável real f : R → R, no Mathematica, é efectuada
através do comando:

f [x− ] = expresse
ao (1.1)

O ”underscore”, ” ”, serve para indicar a variável independente, ou seja, permite que os


argumentos da função possam ser substituı́dos por qualquer expressão, seja ela numérica
ou simbólica.

Exemplo 1

- Atribuição a f [x] da expressão z

In[1]:= f[x] = z (*definiç~


ao de uma express~
ao*)
Out[1]= z

- A expressão f [x] é substituı́da por z, o mesmo não acontece a f [y]

In[2]:=f[x] + f[y]
Out[2]= z + f[y]

- Definamos agora a função Cos(x)

In[3]:= f[x_] = Cos[x] (*definiç~


ao da funç~
ao Cos(x)*)
Out[3]=Cos[x]
1.2. DEFINIÇÃO DE FUNÇÕES 6

- Efectuando novamente a soma de f [x] com f [y], o valor z continua a ser atribuı́do à
expressão f [x]. No entanto, o valor de f [y] é identificado com a imagem da função
f , anteriormente definida, no ponto y.

In[4]:=f[x] + f[y]
Out[4]= z + Cos[y]

- Se não quiser mais identificar f [x] com z pode apagar essa informação da memória.
Faça,

In[5]:=Clear[f]

ou

In[6]:= f =.

Assim, agora quando definimos uma nova função f e efectuamos a soma de f [x]
com f [y] obtemos

In[7]:= f[x_]=Log[x] (*definiç~


ao da funç~
ao logarı́tmica de base e*)
Out[7]=Log[x]

In[8]:= f[x] + f[y] (*soma de duas imagens da funç~


ao f*)
Out[8]= Log[x] + Log[y]

Existem determinadas situações em que se torna necessário juntar os dois conceitos


atrás explicados.
Por exemplo, a definição da função factorial pode ser feita da seguinte forma:

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

Esta definição significa que para qualquer valor de n, f [n] toma o valor nf [n − 1], 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. DEFINIÇÃO DE FUNÇÕES 7

Observe-se que na definição da função factorial utilizou-se ”:=”invés de ”=”. De seguida


será ilustrado, através de um exemplo, a diferença entre ”=”(atribuição imediata) e
”:=”(atribuição diferida) na definição de funções.

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ão (*) e atribui o resultado ao lado es-
querdo. Neste caso, como a tem o valor numérico 3, a função passa a ser f (x) = 3 + x.
Mesmo que a seja alterado, como na altura da atribuição da função f (x) a variável a valia
3, a expressão que define f (x) não é modificada.

No que diz respeito à expressão (**), o Mathematica não avalia o lado direito da ex-
pressão (**) e associa os sı́mbolos que representam a expressão (**) à função g(x). So-
mente quando a função é invocada, substitui os valores simbólicos pelos valores guardados
na memória nesse instante. Neste momento a função g(x) = 3 + x. Eventuais futuras
alterações de a, repercutem-se em futuras invocações de g(x), o mesmo não acontece à
função 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ções


1.2. DEFINIÇÃO DE FUNÇÕES 8

- O comando

D[f, x]

do Mathematica calcula a derivada da função f em relação à variável x.


Para calcular a derivada de ordem n da função f em relação à variável x, use o
comando

D[f,{x,n}] .

Podemos definir a derivada de uma função 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ç~


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ção eq relativamente à variável var. Deter-


minar os zeros de uma dada função f (x) consiste na resolução da equação f (x) = 0,
pelo que para determinar os zeros da função f , no Mathematica, podemos aplicar o
comando Solve[] da seguinte forma
1.2. DEFINIÇÃO DE FUNÇÕES 9

Solve[f(x)==0,x].

- Geração de gráficos
O comando, no Mathematica, que permite desenhar o gráfico de uma função é

Plot[] .

Vejamos qual a informação 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áfico da função f (x) = x2 − 3x + 5 no intervalo


[−4, 5] o comando no Mathematica utilizado será

In[1]:=f[x_] = x^2 - 3x + 5;

In[2]:= Plot[f[x], {x, -4, 5}]

Figura 1.1: Gráfico da função f (x)


25

20

15

10

-4 -2 2 4

A função Plot admite várias opções 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áfico, a cor, etc . . ..
Por exemplo a instrução

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. DEFINIÇÃO DE FUNÇÕES 10

desenha o gráfico da função Cos(x) com os eixos coordenados centrados na origem


(AxesOrigin), com um rectângulo desenhado à volta do gráfico (Frame), intervalo
do eixo das abcissas entre −4π e 4π (PlotRange), estilo do gráfico (PlotStyle).
Na instrução acima as opções do PlotStyle utilizadas foram:

Figura 1.2: Gráfico da função Cos(x)


1.5

0.5

-0.5

-1

-10 -5 0 5 10

- 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áfico. Poderia escolher Thick-


ness e nesse caso o valor seria relativo à area do gráfico.

Para desenhar o gráfico de funções cujo domı́nio está contido em R2 o comando a


utilizar é

P lot3D[f [x, y], {x, minx , maxx }, {y, miny , maxy }] .

Por exemplo o gráfico da função f (x, y) = sin(x2 + y) para valores de (x, y) ∈ D =


[0, 4] × [0, 4] é dado por
1.3. COMPOSIÇÕES ITERATIVAS 11

Figura 1.3: Gráfico da função f (x, y)

1
0.5 4
0
-0.5 3
-1
0 2
1
2 1
3
40

1.3 Composições iterativas


Nesta secção iremos estudar algumas das construções que permitem executar repetida-
mente uma determinada acção enquanto uma condição é verdadeira. As construções aqui
abordadas são os ciclos Do, While e For.

- O comando Do permite repetir várias instruções um número pré-determinado de


vezes:

Do[(instr1;instr2;...),{i,imin,imax,di}]

i é uma variável que varia desde imin até imax com espaçamento di. Do repete
as instruções instr1;instr2;... tantas vezes quanto os valores que a variável i
assumir. As variáveis i, imin, imax e di são inteiras ou reais.

Exemplo 4

In[1]:= Do[Print[i], {i, 2, 12, 2}]

2
4
6
8
10
12
1.3. COMPOSIÇÕES ITERATIVAS 12

No exemplo (4) a variável 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ção iterativa While permite efectuar uma determinada instrução até que
uma dada condição falhe, ou seja, deixe de ser verdadeira:

While[condiç~
ao,acç~
ao]

Enquanto a condiç~
ao é verdadeira a acç~
ao é 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 finalizar só nos falta falar da composição iterativa For.


Esta composição tem como forma

For[i=imin, condiç~
ao, incr, acç~
ao]

i é uma variável que é inicializada com o valor imin e vai sendo incrementada, sendo
o valor do incremento incr, até a condiç~
ao deixar de ser verdadeira. Analogamente
a acç~
ao é executada enquanto a condiç~
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 três primeiros naturais. O sı́mbolo 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áveis que são inicializadas são i e t, mas somente a variável i
é incrementada e neste caso o tipo de incremento utilizado é o mesmo do exemplo ante-
rior. Enquanto i^2 < 10 (condição) vão sendo executadas duas acções: o valor do t é
actualizado para t^2+i e cada uma destas expressões é imprimida.

1.4 Estruturas de controle


As estruturas de controle são conjuntos de instruções que permitem o programa actuar
segundo a avaliação de uma expressão booleana. No Mathematica as instruções If e
Which são estruturas de selecção.

O comando If pode ser utilizado de duas formas:

(i) A instrução

If[condiç~
ao,express~
ao1, express~
ao2]

avalia a condiç~
ao e executa a express~
ao1, caso a primeira seja verdadeira e executa
a express~
ao2, caso a primeira seja falsa.

(ii) A instrução

If[condiç~
ao, express~
ao1, express~
ao2, express~
ao3]

trabalha de forma análoga à anterior, mas caso a condiç~


ao não 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 à instrução If para definir uma função definida por ramos. Por
exemplo a função 
x se x < 0
f (x) =
sin(x) se x ≥ 0
pode ser definida no Mathematica, recorrendo à instrução If, da seguinte forma
f[x_]=If[x < 0, x, Sin[x]];

Figura 1.4: Gráfico da função f (x)


1

-6 -4 -2 2 4 6
-1

-2

-3

-4

Quando temos de avaliar mais que uma expressão é conveniente utilizar a instrução
Which. A estrutura

Which[condiç~
ao1, express~
ao1, condiç~
ao2, express~
ao2,...]

avalia cada uma das condiç~


oes i e executa a express~
ao i correspondente à primeira
ao i avaliada como verdadeira.
condiç~

Exemplo 10 In[1]:= Which[1 == 2, x, 1 == 1, y, 3 == 3, z]


Out[1]= y

Se pretendermos definir a função


 2
 x +2 se x ≤ 0
g(x) = 2 se 0 < x < 1

2 cos(x − 1) se x ≥ 1
podemos recorrer à instrução Which e definir 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: Gráfico da função g(x)


8

-10 -5 5 10

-2

1.5 Listas, Vectores e Matrizes


As listas são uma das construções mais utilizadas nas linguagens de programação. A
sua utilização torna possı́vel agrupar expressões 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ão 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


escreverı́amos

In[2]:= p[[2]]
Out[2]= 3

Aplicar uma determinada função a uma lista consiste, geralmente, em aplicar a função a
cada um dos elementos da lista.
Vejamos um exemplo:

Exemplo 11

In[3]:= lista1 = {1, 2, 3} (*lista1 é uma lista com 3 elementos*)


Out[3]= {1, 2, 3}

In[4]:= a = x^lista1 + 2 (*a é 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árias operações sobre a lista a, nomeadamente a atribuição de um


valor à variável x ou derivar a. Derivar a lista a significa derivar cada um dos elementos
de a em relação a x.

Exemplo 12

In[5]:= D[a, x] (*derivar "a" em relaç~


ao a x*)
Out[5]={1, 2x,3x^2}

In[6]:= a /. x -> 2 (*na variável a, onde encontrar a variável x,


substituı́ por 2*)
Out[6]= {4, 6, 10}

Existem funções que tratam as listas como um único objecto, neste caso, para aplicar a
função a cada um dos elementos da lista terá de usar a função Map.

In[7]:= f[x_] := x^3

In[8]:= Map[f, lista1] Out[8]= {1, 8, 27}

A função Table[] permite construir uma lista cujos elementos podem ser definidos de uma
forma genérica. Vejamos como podemos utilizar esta função para gerar, por exemplo, um
vector cujos elementos são 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ão este também pode ser obtido a partir da função Table[]

Exemplo 14

In[3]:= Table[2, {5}]


Out[3]= {2, 2, 2, 2, 2}

Os vectores e as matrizes são representados por listas e listas de listas respectivamente.


No que diz respeito às matrizes, a ideia consiste em olhar, por exemplo, para uma matriz
do tipo 2 × 2 como uma lista de duas linhas, onde cada linha é uma lista de duas entradas
numéricas.
1.5. LISTAS, VECTORES E MATRIZES 17

Exemplo 15

In[1]:= V = {1, 3, 4, 6} (*v é um vector de dimens~


ao 4x1*)
Out[1]={1, 3, 4, 6}

In[2]:= A = {{a, b}, {c, d}} (*M é uma matriz 2x2*)


Out[2]={{a,b},{c, d}}

Para escrever A e V em forma matricial podemos usar a função MatrixForm[]. Contudo,


para efectuar operações entre matrizes e vectores estes não 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ção entre matrizes é o ponto final, ”.”, 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 além do produto de matrizes, podemos realizar todas as operações entre matrizes
nomeadamente a soma, a subtracção, a multiplicação por um escalar, etc . . . .
Por exemplo a multiplicação 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 significa somar um escalar, p, a cada um


dos elementos de v... o que não 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ão pode somar vectores de dimensão diferente, que só é
possı́vel multiplicar duas matrizes, A e B, cujas dimensões sejam respectivamente m × q
e q × n. Caso isto não aconteça, 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 é aplicável às matrizes de quaisquer dimensões.
Para além das muitas operações sobre listas, estão também disponı́veis várias operações
especı́ficas 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ç~


ao do sistema de
equaç~
oes lineares BX=v1*)
Out[8]= {-1, 1}

Os elementos da matriz são referenciados através da posição que ocupam na lista. Por
exemplo, considere-se uma matriz A de dimensão 3 × 3
 
a b c
A = d e f  ,
g h i

a sua definição no Mathematica é

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á denotado


por
1.5. LISTAS, VECTORES E MATRIZES 20

In[2]:=A[[2,3]]
Out[2]=f

ou usando a função 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ão 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áloga, podemos
pensar no mesmo tipo de construções para matrizes bidimensionais, tridimensionais,. . . ,
n dimensionais.
Por exemplo:
Suponhamos que se pretendia escrever as entradas de uma qualquer matriz A de dimensão
3×3, simétrica, isto é tal que A = AT . Assim, se A = [aij ]1≤i,j≤3 podemos definir 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 FUNÇÕES 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) define uma matriz de dimensões 3 × 2, onde cada uma das entradas é
o ı́ndice da linha ou o quadrado deste consoante o elemento seja referente à primeira ou
segunda coluna de B.
A representação matricial de B é
MatrixForm[B]  
1 1
 2 4
3 9

1.6 Uso de funções no Mathematica


Na secção (1.2) vimos como definir uma função dada por uma determinada expressão.
De modo a tornar um programa mais claro, recorre-se ao uso de funções para executar
um conjunto de instruções.
Por exemplo, se no Mathematica não houvesse uma função para calcular a soma, poderı́amos
definir a seguinte função 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 fica guardado na função SomaLista1 é a última instrução da função, que
neste caso é a soma de todos os elementos de uma determinada lista. Note-se que esta
última instrução não tem ;.
A função SomaLista1 pode ser utilizada na definição de outras funções.
1.6. USO DE FUNÇÕES NO MATHEMATICA 22

A função Func1, calcula os divisores de x, chama a função SomaLista1 para calcular


a soma dos divisores de x e depois compara com o dobro de x. Esta função é do tipo
Booleano, ou seja, Func1[x] toma e expressão True ou False consoante a soma dos
divisores de x seja o dobro de x ou não.

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 definição de cada uma das funções existem muitas variáveis que são variáveis auxili-
ares e que só são usadas na definição desta. Não nos interessa que essas variáveis estejam
definidas fora das funções, pois tal só implica guardar em memória variáveis desnecessárias
e pode interferir com o resto do programa.
Exemplos de tais variáveis, nas funções acima definidas, são as variáveis n, soma e div.
Podemos usar essas variáveis como locais, isto é, no final da execução da função, o Mathe-
matica faz um ”Clear”automático dessas variáveis. Tal procedimento pode ser realizado
utilizando a estrutura do Module.
As variáveis locais no Module só são acessı́veis e modificáveis no interior do Module, o que
permite isolá-las do contexto global.O comando

Module[{x, y, ... }, expr]

indica que as variáveis x, y, ... são tratadas como variáveis locais na estrutura da função.
Podemos redefinir as funções 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 FUNÇÕES NO MATHEMATICA 23

In[2]:=Func1[x_] := [{div}
div = Divisors[x];
SomaLista1[div] == 2x
];

Execute as funções acima e verifique que as variáveis n, soma e div deixam de ter valores
guardados na memória. Um exemplo de função que faz uso de variáveis locais é a função
Do, pois a variável i usada na função Do, na função SomaLista1, é local e não está definida
após o uso dessa função.

You might also like