Académique Documents
Professionnel Documents
Culture Documents
Í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
Tabela 1.1
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]
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.
f [x− ] = expresse
ao (1.1)
Exemplo 1
In[2]:=f[x] + f[y]
Out[2]= z + f[y]
- 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
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]
Exemplo 2
In[1]:= a = 3
Out[1]= 3
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
- O comando
D[f, x]
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
O comando
Solve[eq,var]
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[] .
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."
In[1]:=f[x_] = x^2 - 3x + 5;
20
15
10
-4 -2 2 4
0.5
-0.5
-1
-10 -5 0 5 10
1
0.5 4
0
-0.5 3
-1
0 2
1
2 1
3
40
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
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
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
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
(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.
(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]
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]];
-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,...]
-10 -5 5 10
-2
In[1]:= p = {2, 3}
Out[1]= {2, 3}
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
Exemplo 12
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.
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
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
Exemplo 15
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[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}
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
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
In[1]:= A={{a,b,c},{d,e,f},{g,h,i}};
In[2]:=A[[2,3]]
Out[2]=f
In[3]:=Part[A,2,3]
Out[3]=f
In[4]:=A[[2]][[3]]
Out[4]=f
In[7]:= Length[A]
Out[7]= 3
In[8]:= Dimensions[A]
Out[8]= {3, 3}
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
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
Exemplo 21
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
Exemplo 22
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
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.
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.