apontamentos mathematica

24
No¸ oes de programa¸ ao em Mathematica Magda Stela Rebelo Ano Lectivo 2002/2003

Upload: rita-alhandra

Post on 01-Jul-2015

283 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Apontamentos MATHEMATICA

Nocoes de programacao em Mathematica

Magda Stela Rebelo

Ano Lectivo 2002/2003

Page 2: Apontamentos MATHEMATICA

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

Page 3: Apontamentos MATHEMATICA

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

Page 4: Apontamentos MATHEMATICA

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:

Page 5: Apontamentos MATHEMATICA

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”.

Page 6: Apontamentos MATHEMATICA

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]

Page 7: Apontamentos MATHEMATICA

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

Page 8: Apontamentos MATHEMATICA

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

Page 9: Apontamentos MATHEMATICA

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

Page 10: Apontamentos MATHEMATICA

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]}]

Page 11: Apontamentos MATHEMATICA

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

Page 12: Apontamentos MATHEMATICA

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

Page 13: Apontamentos MATHEMATICA

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

Page 14: Apontamentos MATHEMATICA

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.

Page 15: Apontamentos MATHEMATICA

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]]

Page 16: Apontamentos MATHEMATICA

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}

Page 17: Apontamentos MATHEMATICA

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.

Page 18: Apontamentos MATHEMATICA

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

Page 19: Apontamentos MATHEMATICA

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

Page 20: Apontamentos MATHEMATICA

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

Page 21: Apontamentos MATHEMATICA

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]}}

Page 22: Apontamentos MATHEMATICA

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.

Page 23: Apontamentos MATHEMATICA

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];

Page 24: Apontamentos MATHEMATICA

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.