Upload
jwms2010
View
17
Download
1
Tags:
Embed Size (px)
Citation preview
INDICE 1
Indice
1.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Definicao de funcoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Composicoes iterativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Estruturas de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 Listas, Vectores e Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.6 Uso de funcoes no Mathematica . . . . . . . . . . . . . . . . . . . . . . . . 21
1.1. INTRODUCAO 2
Nocoes de programacao em
Mathematica
1.1 Introducao
O Mathematica permite efectuar calculos numericos e simbolicos, usando uma lin-
guagem muito proxima da linguagem usual da matematica. Constitui tambem uma ferra-
menta muito util para o tracado de graficos de diversos tipos. O Kernel e o Notebook sao
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 expressoes, visualizar, gravar e imprimir resultados.
O Kernel processa e avalia as expressoes escritas no Notebook ; e carregado e fica activo
aquando da primeira avaliacao 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, graficos, 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 comentarios
entre os sımbolos: (∗ ∗), e assim o Mathematica executa os comandos mas nao executa
o comentario.
Vejamos um exemplo
In[1]:=3*5 (*multiplicac~ao de 3 por 5*)
Out[1]=15
As palavras In[1] e Out[1] abreviam as palavras Input e Output respectivamente. O
numero 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 sao executados. Neste pequeno
exemplo o unico comando executado e a multiplicacao de 3 por 5, pois como o restante se
1.1. INTRODUCAO 3
encontra entre os sımbolos (* *) o Mathematica interpreta o comando como comentario e
nao o executa.
O Mathematica e ”Case Sensitive”, isto e, nos seus comandos letras maiusculas e
minusculas nao sao indistintas. Como qualquer linguagem o Mathematica tem uma sin-
taxe inerente. Vejamos algumas regras:
- Os comandos comecam com letra maiuscula, e se o comando e formado por duas
palavras, cada palavra comeca por letra maiuscula. Ex: MatrixForm
- As funcoes em Mathematica tem sempre a primeira letra maiuscula e o argumento
aparece entre parentesis recto. Vejamos alguns exemplos em concreto
Tabela 1.1
Notacao 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]
loga(x) Log[a,x]√x Sqrt[x]
Para alem dos parentesis rectos o Mathematica utiliza os parentesis curvos e as
chavetas.
Os parentesis curvos sao usados para agrupar termos, as vezes sao estritamente
necessarios; outras vezes sao usados para tornar as expressoes mais claras.
As chavetas sao normalmente usadas para delimitar uma lista, de modo a que todos
os objectos de um conjunto sejam tratados como um so.
- As expressoes booleanas (de valor verdadeiro ou falso) desempenham um papel
importante no Mathematica. A tabela que se segue descreve a sintaxe dos conectivos
booleanos negacao, conjuncao e disjuncao:
1.1. INTRODUCAO 4
Tabela 1.2
Escrita em Mathematica
Negacao !p ou Not[p]
Conjuncao p&&q ou And[p,q]
Disjuncao p||q ou Or[p,q]
- No que diz respeito aos principais operadores de comparacao, 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 informacoes acerca de um comando podemos recorrer ao ”Help”. Para
tal, no menu do ”Help”escolha ”Help”, este encontra-se dividido nos seguintes topicos:
- Built-in Functions: Informacao acerca das funcoes que estao definidas no Mathe-
matica.
- Add-ons:Informacao acerca dos programas adicionais no seu sistema.
- The Mathematica Book: O livro ”The Mathematica Book”.
- Getting Started: Algumas informacoes iniciais.
- Other Information: Informacoes acerca dos comandos definidos no menu do
Mathematica e outras informacoes.
- Master Index: Um ındice geral do ”Help”.
1.2. DEFINICAO DE FUNCOES 5
Para alem do mencionado anteriormente tambem no proprio Notebook e possıvel obter
informacoes acerca de um determinado comando do Mathematica. Para tal basta escrever
?MatrixForm :Fornece breve informacao acerca do comando MatrixForm
??MatrixForm :Fornece informacao detalhada acerca do comando MatrixForm
?F* :Fornece lista de todos os comandos que comecam com a letra F
?*Form :Fornece lista de todos os comandos que terminam com Form
1.2 Definicao de funcoes
O Mathematica possui um enorme leque de funcoes pre definidas. No entanto, ao longo
do curso teremos necessidade de definir as nossas proprias funcoes que poderao nao estar
disponıveis no leque de funcoes iniciais do Mathematica.
A definicao de uma funcao real de variavel real f : R → R, no Mathematica, e efectuada
atraves do comando:
f [x−] = expressao (1.1)
O ”underscore”, ” ”, serve para indicar a variavel independente, ou seja, permite que os
argumentos da funcao possam ser substituıdos por qualquer expressao, seja ela numerica
ou simbolica.
Exemplo 1
- Atribuicao a f [x] da expressao z
In[1]:= f[x] = z (*definic~ao de uma express~ao*)
Out[1]= z
- A expressao f [x] e substituıda por z, o mesmo nao acontece a f [y]
In[2]:=f[x] + f[y]
Out[2]= z + f[y]
- Definamos agora a funcao Cos(x)
In[3]:= f[x_] = Cos[x] (*definic~ao da func~ao Cos(x)*)
Out[3]=Cos[x]
1.2. DEFINICAO DE FUNCOES 6
- Efectuando novamente a soma de f [x] com f [y], o valor z continua a ser atribuıdo a
expressao f [x]. No entanto, o valor de f [y] e identificado com a imagem da funcao
f , anteriormente definida, no ponto y.
In[4]:=f[x] + f[y]
Out[4]= z + Cos[y]
- Se nao quiser mais identificar f [x] com z pode apagar essa informacao da memoria.
Faca,
In[5]:=Clear[f]
ou
In[6]:= f =.
Assim, agora quando definimos uma nova funcao f e efectuamos a soma de f [x]
com f [y] obtemos
In[7]:= f[x_]=Log[x] (*definic~ao da func~ao logarıtmica de base e*)
Out[7]=Log[x]
In[8]:= f[x] + f[y] (*soma de duas imagens da func~ao f*)
Out[8]= Log[x] + Log[y]
Existem determinadas situacoes em que se torna necessario juntar os dois conceitos
atras explicados.
Por exemplo, a definicao da funcao factorial pode ser feita da seguinte forma:
f [n−] := nf [n − 1]; f [0] = 1.
Esta definicao 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. DEFINICAO DE FUNCOES 7
Observe-se que na definicao da funcao factorial utilizou-se ”:=”inves de ”=”. De seguida
sera ilustrado, atraves de um exemplo, a diferenca entre ”=”(atribuicao imediata) e
”:=”(atribuicao diferida) na definicao de funcoes.
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 expressao (*) e atribui o resultado ao lado es-
querdo. Neste caso, como a tem o valor numerico 3, a funcao passa a ser f(x) = 3 + x.
Mesmo que a seja alterado, como na altura da atribuicao da funcao f(x) a variavel a valia
3, a expressao que define f(x) nao e modificada.
No que diz respeito a expressao (**), o Mathematica nao avalia o lado direito da ex-
pressao (**) e associa os sımbolos que representam a expressao (**) a funcao g(x). So-
mente quando a funcao e invocada, substitui os valores simbolicos pelos valores guardados
na memoria nesse instante. Neste momento a funcao g(x) = 3 + x. Eventuais futuras
alteracoes de a, repercutem-se em futuras invocacoes de g(x), o mesmo nao acontece a
funcao 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 funcoes
1.2. DEFINICAO DE FUNCOES 8
- O comando
D[f, x]
do Mathematica calcula a derivada da funcao f em relacao a variavel x.
Para calcular a derivada de ordem n da funcao f em relacao a variavel x, use o
comando
D[f,{x,n}] .
Podemos definir a derivada de uma funcao 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 func~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 equacao eq relativamente a variavel var. Deter-
minar os zeros de uma dada funcao f(x) consiste na resolucao da equacao f(x) = 0,
pelo que para determinar os zeros da funcao f , no Mathematica, podemos aplicar o
comando Solve[] da seguinte forma
1.2. DEFINICAO DE FUNCOES 9
Solve[f(x)==0,x].
- Geracao de graficos
O comando, no Mathematica, que permite desenhar o grafico de uma funcao e
Plot[] .
Vejamos qual a informacao 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 grafico da funcao f(x) = x2 − 3x + 5 no intervalo
[−4, 5] o comando no Mathematica utilizado sera
In[1]:=f[x_] = x^2 - 3x + 5;
In[2]:= Plot[f[x], {x, -4, 5}]
Figura 1.1: Grafico da funcao f(x)
-4 -2 2 4
5
10
15
20
25
A funcao Plot admite varias opcoes adicionais (experimente ??Plot no Mathemati-
ca), como por exemplo, os intervalos a desenhar nos eixos das abcissas e ordenadas,
o estilo de linha do grafico, a cor, etc . . ..
Por exemplo a instrucao
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. DEFINICAO DE FUNCOES 10
desenha o grafico da funcao Cos(x) com os eixos coordenados centrados na origem
(AxesOrigin), com um rectangulo desenhado a volta do grafico (Frame), intervalo
do eixo das abcissas entre −4π e 4π (PlotRange), estilo do grafico (PlotStyle).
Na instrucao acima as opcoes do PlotStyle utilizadas foram:
Figura 1.2: Grafico da funcao 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 grafico. Poderia escolher Thick-
ness e nesse caso o valor seria relativo a area do grafico.
Para desenhar o grafico de funcoes cujo domınio esta contido em R2 o comando a
utilizar e
Plot3D[f [x, y], {x,minx,maxx}, {y,miny,maxy}] .
Por exemplo o grafico da funcao f(x, y) = sin(x2 + y) para valores de (x, y) ∈ D =
[0, 4] × [0, 4] e dado por
1.3. COMPOSICOES ITERATIVAS 11
Figura 1.3: Grafico da funcao f(x, y)
01
23
40
1
2
3
4
-1-0.5
00.51
01
23
4
1.3 Composicoes iterativas
Nesta seccao iremos estudar algumas das construcoes que permitem executar repetida-
mente uma determinada accao enquanto uma condicao e verdadeira. As construcoes aqui
abordadas sao os ciclos Do, While e For.
- O comando Do permite repetir varias instrucoes um numero pre-determinado de
vezes:
Do[(instr1;instr2;...),{i,imin,imax,di}]
i e uma variavel que varia desde imin ate imax com espacamento di. Do repete
as instrucoes instr1;instr2;... tantas vezes quanto os valores que a variavel i
assumir. As variaveis i, imin, imax e di sao inteiras ou reais.
Exemplo 4
In[1]:= Do[Print[i], {i, 2, 12, 2}]
2
4
6
8
10
12
1.3. COMPOSICOES ITERATIVAS 12
No exemplo (4) a variavel 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 composicao iterativa While permite efectuar uma determinada instrucao ate que
uma dada condicao falhe, ou seja, deixe de ser verdadeira:
While[condic~ao,acc~ao]
Enquanto a condic~ao e verdadeira a acc~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 finalizar so nos falta falar da composicao iterativa For.
Esta composicao tem como forma
For[i=imin, condic~ao, incr, acc~ao]
i e uma variavel que e inicializada com o valor imin e vai sendo incrementada, sendo
o valor do incremento incr, ate a condic~ao deixar de ser verdadeira. Analogamente
a acc~ao e executada enquanto a condic~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 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 variaveis que sao inicializadas sao i e t, mas somente a variavel i
e incrementada e neste caso o tipo de incremento utilizado e o mesmo do exemplo ante-
rior. Enquanto i^2 < 10 (condicao) vao sendo executadas duas accoes: o valor do t e
actualizado para t^2+i e cada uma destas expressoes e imprimida.
1.4 Estruturas de controle
As estruturas de controle sao conjuntos de instrucoes que permitem o programa actuar
segundo a avaliacao de uma expressao booleana. No Mathematica as instrucoes If e
Which sao estruturas de seleccao.
O comando If pode ser utilizado de duas formas:
(i) A instrucao
If[condic~ao,express~ao1, express~ao2]
avalia a condic~ao e executa a express~ao1, caso a primeira seja verdadeira e executa
a express~ao2, caso a primeira seja falsa.
(ii) A instrucao
If[condic~ao, express~ao1, express~ao2, express~ao3]
trabalha de forma analoga a anterior, mas caso a condic~ao nao 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 instrucao If para definir uma funcao definida por ramos. Por
exemplo a funcao
f(x) =
{x se x < 0sin(x) se x ≥ 0
pode ser definida no Mathematica, recorrendo a instrucao If, da seguinte forma
f[x_]=If[x < 0, x, Sin[x]];
Figura 1.4: Grafico da funcao f(x)
-6 -4 -2 2 4 6
-4
-3
-2
-1
1
Quando temos de avaliar mais que uma expressao e conveniente utilizar a instrucao
Which. A estrutura
Which[condic~ao1, express~ao1, condic~ao2, express~ao2,...]
avalia cada uma das condic~oes i e executa a express~ao i correspondente a primeira
condic~ao i avaliada como verdadeira.
Exemplo 10 In[1]:= Which[1 == 2, x, 1 == 1, y, 3 == 3, z]
Out[1]= y
Se pretendermos definir a funcao
g(x) =
x2 + 2 se x ≤ 02 se 0 < x < 12 cos(x − 1) se x ≥ 1
podemos recorrer a instrucao 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: Grafico da funcao g(x)
-10 -5 5 10
-2
2
4
6
8
1.5 Listas, Vectores e Matrizes
As listas sao uma das construcoes mais utilizadas nas linguagens de programacao. A
sua utilizacao torna possıvel agrupar expressoes 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 sao 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 funcao a uma lista consiste, geralmente, em aplicar a funcao 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 varias operacoes sobre a lista a, nomeadamente a atribuicao de um
valor a variavel x ou derivar a. Derivar a lista a significa derivar cada um dos elementos
de a em relacao a x.
Exemplo 12
In[5]:= D[a, x] (*derivar "a" em relac~ao a x*)
Out[5]={1, 2x,3x^2}
In[6]:= a /. x -> 2 (*na variavel a, onde encontrar a variavel x,
substituı por 2*)
Out[6]= {4, 6, 10}
Existem funcoes que tratam as listas como um unico objecto, neste caso, para aplicar a
funcao a cada um dos elementos da lista tera de usar a funcao Map.
In[7]:= f[x_] := x^3
In[8]:= Map[f, lista1] Out[8]= {1, 8, 27}
A funcao Table[] permite construir uma lista cujos elementos podem ser definidos de uma
forma generica. Vejamos como podemos utilizar esta funcao para gerar, por exemplo, um
vector cujos elementos sao 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, entao este tambem pode ser obtido a partir da funcao Table[]
Exemplo 14
In[3]:= Table[2, {5}]
Out[3]= {2, 2, 2, 2, 2}
Os vectores e as matrizes sao 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 2×2 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 funcao MatrixForm[]. Contudo,
para efectuar operacoes entre matrizes e vectores estes nao 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=
1346
O sinal de multiplicacao entre matrizes e 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=
1778
Para alem do produto de matrizes, podemos realizar todas as operacoes entre matrizes
nomeadamente a soma, a subtraccao, a multiplicacao por um escalar, etc . . . .
Por exemplo a multiplicacao 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 nao 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 nao pode somar vectores de dimensao diferente, que so e
possıvel multiplicar duas matrizes, A e B, cujas dimensoes sejam respectivamente m × q
e q × n. Caso isto nao aconteca, 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 aplicavel as matrizes de quaisquer dimensoes.
Para alem das muitas operacoes sobre listas, estao tambem disponıveis varias operacoes
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 soluc~ao do sistema de
equac~oes lineares BX=v1*)
Out[8]= {-1, 1}
Os elementos da matriz sao referenciados atraves da posicao que ocupam na lista. Por
exemplo, considere-se uma matriz A de dimensao 3 × 3
A =
a b c
d e f
g h i
,
a sua definicao 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 sera denotado
por
1.5. LISTAS, VECTORES E MATRIZES 20
In[2]:=A[[2,3]]
Out[2]=f
ou usando a funcao 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 dimensao 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 analoga, podemos
pensar no mesmo tipo de construcoes para matrizes bidimensionais, tridimensionais,. . . ,
n dimensionais.
Por exemplo:
Suponhamos que se pretendia escrever as entradas de uma qualquer matriz A de dimensao
3×3, simetrica, isto e 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 FUNCOES 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 dimensoes 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 representacao matricial de B e
MatrixForm[B]
1 12 43 9
1.6 Uso de funcoes no Mathematica
Na seccao (1.2) vimos como definir uma funcao dada por uma determinada expressao.
De modo a tornar um programa mais claro, recorre-se ao uso de funcoes para executar
um conjunto de instrucoes.
Por exemplo, se no Mathematica nao houvesse uma funcao para calcular a soma, poderıamos
definir a seguinte funcao 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 funcao SomaLista1 e a ultima instrucao da funcao, que
neste caso e a soma de todos os elementos de uma determinada lista. Note-se que esta
ultima instrucao nao tem ;.
A funcao SomaLista1 pode ser utilizada na definicao de outras funcoes.
1.6. USO DE FUNCOES NO MATHEMATICA 22
A funcao Func1, calcula os divisores de x, chama a funcao SomaLista1 para calcular
a soma dos divisores de x e depois compara com o dobro de x. Esta funcao e do tipo
Booleano, ou seja, Func1[x] toma e expressao True ou False consoante a soma dos
divisores de x seja o dobro de x ou nao.
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 definicao de cada uma das funcoes existem muitas variaveis que sao variaveis auxili-
ares e que so sao usadas na definicao desta. Nao nos interessa que essas variaveis estejam
definidas fora das funcoes, pois tal so implica guardar em memoria variaveis desnecessarias
e pode interferir com o resto do programa.
Exemplos de tais variaveis, nas funcoes acima definidas, sao as variaveis n, soma e div.
Podemos usar essas variaveis como locais, isto e, no final da execucao da funcao, o Mathe-
matica faz um ”Clear”automatico dessas variaveis. Tal procedimento pode ser realizado
utilizando a estrutura do Module.
As variaveis locais no Module so sao acessıveis e modificaveis no interior do Module, o que
permite isola-las do contexto global.O comando
Module[{x, y, ... }, expr]
indica que as variaveis x, y, ... sao tratadas como variaveis locais na estrutura da funcao.
Podemos redefinir as funcoes 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 FUNCOES NO MATHEMATICA 23
In[2]:=Func1[x_] := [{div}
div = Divisors[x];
SomaLista1[div] == 2x
];
Execute as funcoes acima e verifique que as variaveis n, soma e div deixam de ter valores
guardados na memoria. Um exemplo de funcao que faz uso de variaveis locais e a funcao
Do, pois a variavel i usada na funcao Do, na funcao SomaLista1, e local e nao esta definida
apos o uso dessa funcao.