Sie sind auf Seite 1von 20

Notas de programacao em

Mathematica
Notas de apoio `as aulas de laboratorio de Analise Numerica
Nuno Filipe Martins
Departamento de Matematica
Faculdade de Ciencias e Tecnologia, Universidade Nova de Lisboa
Notas de programacao em Mathematica 1
0. Informacoes genericas
Tal como acontece com qualquer outro programa, existem alguns preceitos elemen-
tares a ter em conta quanto ao funcionamento do sistema Mathematica que necessitam
de ser focados antes mesmo de o comecarmos a usar. Convem assim referir e explicar
sucinta e simplicadamente o papel das duas componentes que constituem o sistema
Mathematica: o Notebook e o Kernel. O Notebook assemelha-se a um editor de texto e
tem portanto as caractersticas mais importantes de um editor de texto, nomeadamente
escrever e editar texto e expressoes, visualizar, gravar e imprimir resultados. Quando
o Mathematica e invocado, o Notebook ca automaticamente activo. Quando se pre-
tende avaliar uma expressao, e tambem necessario que o Kernel o esteja, pois e este
que processa e avalia as expressoes escritas no Notebook. O Kernel e carregado e ca
activo aquando da primeira avalia cao e permanece activo ate que se desligue o sistema
Mathematica ou o Kernel. O Kernel e o Notebook comunicam atraves de um processo
chamado MathLink.
Cada Notebook esta organizado em celulas, delimitadas por um parentese recto no
lado direito da janela. As celulas de input podem avaliar-se premindo simultaneamente
as teclas shift e return.
As func oes em Mathematica tem sempre a primeira letra capitalizada e o argumento
aparece entre parentesis rectos e nao entre parentesis curvos. Em Mathematica, os
parentesis curvos estao reservados para indicar o agrupamento de termos. Esta notac ao
tem algumas vantagens, pois na notacao usual c(1 + x) pode ser interpretado como
c (1 + x) ou como c[1 + x] (isto e nao e claro que c se trata de uma constante ou de
uma func ao). O quadro seguinte apresenta alguns exemplos de como passar da notacao
usual para a escrita em Mathematica.
Notac ao usual Escrita em Mathematica
sen(x), sin(x) Sin[x]
cos(x) Cos[x]
f(x, y) = x + y f[x_,y_]:=x+y
ln(x) Log[x]
log
a
(x) Log[a,x]
1
2 Notas de programacao em Mathematica
Tal como as func oes, as expressoes booleanas (de valor verdadeiro ou falso) sao,
como veremos mais adiante, muito importantes. A tabela seguinte descreve a sintaxe
dos conectivos booleanos negac ao, conjunc ao e disjunc ao:
Escrita em Mathematica
Negacao !p ou Not[p]
Conjunc ao p && q ou And[p,q]
Disjunc ao p || q ou Or[p,q]
Quanto aos principais operadores de comparac ao, a sua sintaxe e descrita na tabela
a seguir:
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]
Note que o teste de igualdade e expresso por ==e nao por =. Este ultimo operador
e utilizado para atribuicao de valor a uma variavel. Existe ainda um outro teste de
igualdade ===que iremos falar mais `a frente.
O Mathematica dispoe de um sistema de ajuda interactivo. Para obter informac ao
sobre uma determinada func ao pode escever o comando ? antes da func ao ou entao
aceder directamente ao sistema de ajuda primindo simultaneamente as teclas shift e
F1, onde para alem de encontrar informac ao sobre uma determinada funcao pode ainda
encontrar varios exemplos de utilizacao da funcao.
2
Notas de programacao em Mathematica 3
1. Algumas funcoes e comandos do sistema Mathematica
1.1 Calculo numerico
O Mathematica dispoe de uma enorme quantidade de constantes, operac oes e func oes
matematicas pre denidas e permite ainda uma enorme precisao nos calculos.
[In]:= ?N
N[expr] gives the numerical value of expr. N[expr, n] attempts to
give a result with n-digit precision.
[In]:= N[Pi]
[Out]= 3.14159
[In]:= N[Pi,100]
[Out]= 3.141592653589793238462643383279502884197169399375105820974944592
307816406286208998628034825342117068
[In]:= ?Precision
Precision[x] gives the number of digits of precision in the number
x.
[In]:= Precision[2]
[Out]= Infinity
[In]:= Precision[2.0]
[Out]= 16
1.2 Equacoes, Somas e Limites
A resoluc ao de equac oes pode ser obtida utilizando a func ao Solve:
[In]:= f[x_]:=(x^2-1)*Exp[x] (* Define f *)
[In]:= ?Solve
Solve[eqns, vars] attempts to solve an equation or set of equations
for the variables vars. Solve[eqns, vars, elims] attempts to solve
the equations for vars, eliminating the variables elims.
[In]:= Solve[(x^2-1)*Exp[x]==0,x]
[Out]= {{x -> -1},{x -> 1}}
3
4 Notas de programacao em Mathematica
[In]:= Solve[Cos[x]==0,x]
Solve:: ifun : Inverse functions are being used by Solve, so some
solutions may not be found.
[Out]= {{x -> -Pi/2}, {x -> Pi/2}}
Tambem se podem calcular limites de func oes, somas nitas e series :
[In]:= Sum[i,{i,1,50}] (* Soma dos 50 primeiros naturais *)
[Out]= 1275
[In]:= Sum[i,{i,1,Infinity}]
Sum:: div : Sum does not converge.
[In]:= ?Limit
Limit[expr, x->x0] finds the limiting value of expr when x
approaches x0.
[In]:= Limit[Exp[x],{x->-Infinity}]
[Out]= {0}
[In]:= Limit[Exp[x],{x-> Infinity}]
[Out]= Infinity
1.3 Manipulacao de polinomios
Consideremos a func ao polinomial p(x) = x
3
+ 8x
2
+ 20x + 16.
[In]:= p[x_]:=x^3+8 x^2+20 x+16 (* Define p(x) *)
[In]:= p[2]
[Out]= 96
[In]:= p[a]
[Out]= 16 + 20 a + 8 a^2 + a^3
[In]:= ?Factor
Factor[poly] factors a polynomial over the integers.
Factor[poly, Modulus->p] factors a polynomial modulo a prime p.
Factor[poly, Extension->{a1, a2, ... }] factors a polynomial
allowing coefficients that are rational combinations of the
4
Notas de programacao em Mathematica 5
algebraic numbers ai.
[In]:= Factor[p[x]] (* Factoriza p(x) *)
[Out]= (2 + x)^2(4 + x)
[In]:= Integrate[p[x],x] (* Calcula uma primitiva de p *)
[Out]= 16 x + 10 x^2 + 8 x^3/3 + x^4/4
[In]:= D[%,x] (* Deriva a primitiva de p *)
[Out]= 16 + 20 x + 8 x^2 + x^3
[In]:= ?D
D[f, x] gives the partial derivative of f with respect to x.
D[f,{x, n}] gives the nth partial derivative of f with respect
to x. D[f, x1, x2, ... ] gives a mixed derivative.
[In]:= Simplify[p[x]] (* Simplifica p(x) *)
[Out]= (2 + x)^2(4 + x)
[In]:= Solve[p[x]==0, x] (* Determina os zeros de p(x) *)
[Out]= {{x->-4},{x->-2},{x->-2}}
1.4 Geracao de gracos
(* Desenha o grafico de cos(x)*sin(x) em [-2Pi,2Pi] *)
[in]:= Plot[ Cos[x] Sin[x], {x, -2Pi, 2Pi}]
[out]=
-6 -4 -2 2 4 6
-0.4
-0.2
0.2
0.4
(* Graficos tridimensionais *)
[in]:= Plot3D[Cos[x]Sin[y],{x,-Pi,Pi},{y,-2 Pi,2 Pi}]
5
6 Notas de programacao em Mathematica
[out]=
-2
0
2
-5
0
5
-1
-0.5
0
0.5
1
-2
0
2
[in]:= ParametricPlot3D[
{Cos[t] (2 + Cos[u]), Sin[t] (2 + Cos[u]), Sin[u]},
{t, 0, 2Pi}, {u, 0, 2Pi},PlotPoints->40]
[out]=
-2
0
2
-2
0
2
-1
-0.5
0
0.5
1
-2
0
2
2. Listas, Vectores e Matrizes
As listas sao uma das construc oes mais utilizadas nas linguagens de programacao. A
sua utilizac ao torna possvel agrupar e manipular coleccoes de objectos, representando-
os como sequencias de elementos. Grande parte da informacao com que lidaremos na
cadeira de Analise Numerica tera que ser representada no Mathematica recorrendo a
listas. A utilizac ao e manipulac ao de listas no Mathematica e simples e eciente, pois
sobre elas esta disponvel um vasto leque de operac oes pre-denidas. O Mathematica
6
Notas de programacao em Mathematica 7
permite ainda uma grande exibilidade na criac ao de listas, podendo-se ter listas de
quase tudo !
O exemplo mais simples e que utilizaremos com mais frequencia sera porventura o das
listas constituidas apenas por n umeros :
Estes poderao ser, por exemplo, valores de dada func ao em determinados pontos, ou
simplesmente as coordenadas de um ponto. Por exemplo, costuma-se escrever p = (3, 5)
para indicar que as coordenadas do ponto p sao 3 e 5. Em Mathematica escrevemos
[in]:= p={3,5}
[out]= {3,5}
Se pretendessemos obter apenas a segunda coordenada (ou seja, o segundo elemento da
lista) escreveriamos
[in]:= p[[2]]
e obteriamos como resposta
[out]= 5
Existe uma funcao que permite construir uma lista cujos elementos podem-se obter a
partir de uma dada formula. A func ao chama-se Table[ ]. Vejamos como podemos
utilizar esta func ao para gerar, por exemplo, um vector cujos elementos sao os cinco
primeiros n umeros primos:
[in]:= Table[Prime[i],{i,1,5}]
[out]= {2,3,5,7,11}
O Mathematica usa a mesma ideia de lista para lidar com 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.
7
8 Notas de programacao em Mathematica
[in]:= A={{a,b},
{c,d}}
[out]= {{a,b},{c,d}}
Para escrever A com o aspecto usual de uma matriz usariamos
[in]:= MatrixForm[A] (* ou A //MatrixForm *)
[out]=
_
a b
c d
_
A multiplicac ao de matrizes requer um ponto em vez do habitual *, pois o Mathematica
assume que o produto (com * ou com um espaco) seja comutativo.
[in]:= MatrixForm[B={{1,11},{x,-3}}]
[out]=
_
1 11
x 3
_
[in]:= MatrixForm[B . A]
[out]=
_
a + 11c b + 11d
3c + ax 3d + bx
_
Para alem das muitas operac oes sobre listas, estao tambem disponveis varias operacoes
especcas sobre vectores e matrizes. Em seguida, ilustram-se algumas delas:
[in]:= Det[B] (* Calcula o determinante da matriz B *)
[out]= -3-11x
[in]:= IdentityMatrix[2]
[out]= {{1,0},{0,1}}
[in]:= NullSpace[{{1,1,1}{2,2,2}}]
[out]= {{-1,0,1}{-1,1,0}}
8
Notas de programacao em Mathematica 9
Note-se que
_
_
1 0 1

T
,
_
1 1 0

T
_
e uma base do subespaco vectorial
E = {X M
31
| AX = 0} M
31
.

E tambem possvel obter uma caracterizac ao para E :


Solve[{{1,1,1}{2,2,2}}.{x,y,z}=={0,0},{x,y,z}]
Que origina a seguinte mensagem
Solve::Svars:
Equations may not give solutions for all "solve" variables.
{{x->-y-z}}
Ou seja o sistema anterior e possvel e indeterminado e
E =
_
_
x y z

T
M
31
| x = y z
_
.
Veriquemos que, por exemplo, (1, 2, 1) e uma soluc ao do sistema anterior :
[in]:= {{1,1,1},{2,2,2}}.{1,-2,1}
[out]= {0,0}
ou, de outra forma
[in]:= {{1,1,1},{2,2,2}}.{1,-2,1}=={0,0}
[out]= true
Regressemos ao operador Table[ ] . Vimos anteriormente um exemplo de como obter
um vector cujos elementos obedeciam a uma determinada regra (naquele caso, eram os
5 primeiros n umeros primos). De forma analoga, podemos pensar no mesmo tipo de
construc oes para matrizes bidimensionais, tridimensionais, . . ., n dimensionais.
Por exemplo :
Suponhamos que se pretendia escrever as entradas de uma qualquer matriz A do tipo
3 3, simetrica, isto e tal que A = A
T
. Ora, se for A = [a
ij
]
1i,j3
entao
[in]:= A=Table[a[i,j]=a[j,i],{i,3},{j,3}]
[out]= {{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]}}
9
10 Notas de programacao em Mathematica
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]
_
_
Exerccio 1. Considere as seguintes matrizes :
A=Table[If[i<j,1,0],{i,1,3},{j,1,3}]
B=Table[If[i<j,1,0],{j,1,3},{i,1,3}]
C=Table[Switch[Abs[i-j],1,c[i,j],0,0,_,1],{i,1,4},{j,1,4}]]
Sem avaliar no Mathematica, determine as matrizes A, B e C.
Conrme agora os resultados obtidos utilizando o Mathematica.
3. Denicao de funcoes
Tal como acontecia no caso anterior das listas, o Mathematica tambem possui um
enorme n umero de func oes pre denidas. No entanto teremos necessidade de, ao longo
do curso, denir as nossas proprias func oes que poderao nao estar disponveis no leque
de func oes iniciais do Mathematica. Embora existam varias formas de denir func oes
no Mathematica, sera aqui abordada aquela que mais se assemelha `a escrita usual em
matematica.
Suponha-se que se pretende denir a funcao real de vari avel real f : R R denida
por f(x) = cos(x). No Mathematica poderiamos denir f do seguinte modo:
f[x_]:=Cos[x]
Mais a frente veremos a diferenca entre denir uma funcao com =e com :=. Por
agora, concentremo-nos nos argumentos das func oes. A denicao anterior especica
que quando o Mathematica encontra uma expressao que coincide com f[x_] dever a
substitui-la por Cos[x]. O underscore serve precisamente para indicar a variavel
10
Notas de programacao em Mathematica 11
independente. Se se tivesse denido f[x]:=Cos[x] ent ao apenas f[x] seria substituido
por Cos[x], o mesmo nao acontecendo por exemplo a f[y]. Para claricar melhor esta
situac ao vejamos esta diferenca em termos de escrita matematica:
Denicao no Mathematica Escrita em matematica
f[x_]:=Cos[x] f(x) = cos(x), x R
f[x]:=Cos[x] f(x) = cos(x)
Note que para denir a func ao f no Mathematica nao foi necessario indicar os con-
juntos de partida e de chegada. Por isto, diz-se que o Mathematica e uma linguagem
sem declaracao de tipos.
Ilustremos agora com um exemplo a diferenca entre =(atribuicao imediata) e
:=(atribuic ao diferida) na denicao de funcoes :
Considere-se a func ao m[x_]:=Max[x].
[In]:= m[x_]:=Max[x]
[In]:= ?m
Global m
m[x_]:=Max[x]
Dena-se agora uma nova func ao mi[x_]=Max[x]
[In]:= mi[x_]=Max[x] ;
[In]:= ?mi
Global mi
mi[x_]=x
Neste ultimo caso, a expressao atribuida Max[x] e avaliada (obtendo-se x) e este resul-
tado e que e associado a mi[x_].
Estes sao alguns dos preceitos basicosa ter em conta quando pretendermos denir
uma func ao. De seguida vamos ver alguns exemplos ilustrativos da potencialidade des-
te tipo de ferramentas que, de uma forma simples permite-nos denir, por exemplo
func oes nao triviais noutras linguagens de programac ao.
11
12 Notas de programacao em Mathematica
Exemplo 1. Consideremos a funcao de Heaviside h denida por:
h(x) :=
_
_
_
1 se x > 0
1
2
se x = 0
0 se x < 0
No Mathematica poderiamos denir a func ao de Heaviside por
h[x_]=If[x<0,0,If [x>0,1,1/2]]
Exemplo 2. Vejamos como denir uma funcao deriv[funcao, variavel ] com algumas
das propriedades do operador de derivacao :
Escrita em matematica Denicao no Mathematica
(f + g)

(x) = f

(x) + g

(x) deriv[f_+g_,x_]:=deriv[f,x]+deriv[g,x]
(fg)

(x) = f(x)g

(x) + g(x)f

(x) deriv[f_ g_,x_]:=f deriv[g,x]+g deriv[f,x]


f

(x) = 1 se f(x) = x deriv[x_,x_]:=1


(x
n
)

= nx
n1
deriv[x_^n_,x_]:=n x^(n-1)
f

(x) = ae
ax+b
se f(x) = e
ax+b
deriv[Exp[a_ x_+b_],x_]:=aExp[a x+b]
f

(x) = 0 se f(x) = c deriv[c_,x_]:=0 /; FreeQ[c,x]


Exerccio 2. Transcreva as denic oes anteriores para um cheiro notebookdo Mathe-
matica.
Altere o cheiro anterior de modo que :
seja possvel calcular a derivada da func ao logaritmo.
seja possvel calcular a derivada da func ao composta.
Repare que neste exemplo as sucessivas atribuicoes deriv[ ] nao revogam as ante-
riores. Este tipo de situac ao pode ser uma fonte de erros e de confusoes, se nao houver
cuidado, como podemos ver no seguinte caso:
[In]:= i[_]:=Log[x]
[In]:= i[2]
[Out]= Log[x]
[In]:= i[x_]:=Log[x]
[In]:= i[2]
[Out]= Log[x]
12
Notas de programacao em Mathematica 13
[In]:= ?i
Global i
i[_]:= Log[x]
i[x_]:= Log[x]
Nesta situacao, o melhor a fazer e apagar todas a regras associadas a i e introduzir
apenas a que nos interessa:
[In]:= Clear[i]
[In]:= i[x_]:=Log[x]
[In]:= ?i
Global i
i[x_]:= Log[x]
Exerccio 3. (Problema de Collatz) Considere a aplicacao f : N N denida por
f(n) =
_
n
2
se n e par
3n + 1 se n e mpar
Existe uma conjectura que diz que aplicando iterativamente f, a qualquer que seja o
valor inicial de n, existe um k
n
N tal que f
kn
(n) = 1
1
.
Utilize o Mathematica para testar a conjectura, mais concretamente, dena a funcao f,
arbitre um valor para n e teste varios valores k
n
ate que f
kn
(n) = 1.
Sugestao: Utilize as funcoes EvenQ[ ] e Nest[ ].
1
Nota: f
k
n
= f . . . f
. .
k
n
vezes
.
13
14 Notas de programacao em Mathematica
Exerccios
1. Considere o espaco vectorial real R
3
e f : R
3
R
3
a aplicac ao denida por
f(x, y, z) = (x + y, y + z, z).
Utilize o Mathematica para:
a) Mostrar que
i) f e uma aplicac ao linear.
ii) B = ((1, 1, 1), (0, 1, 2), (1, 1, 0)) e uma base de R
3
.
b) Determinar A = M(f; B, B).
c) Calcular os valores proprios da matriz A
2
da alnea b).
Sugestao: Relembre que os valores proprios de A sao precisamente os zeros
reais do polinomio caracterstico p() = |A I
3
|.
d) Determinar, para cada valor proprio , de A, uma base do subespaco proprio
associado
E

=
_
X R
3
| AX = X
_
.
2. Considere a func ao f : N R denida por
f(n) =
n1

k=0
(1)
k
2k + 1
.
Sabendo que

4
=

k=0
(1)
k
2k + 1
, utilize o Mathematica para calcular um valor apro-
ximado de considerando n termos do desenvolvimento em serie (n denido pelo
utilizador).
2
Recorde que, dada uma matriz A M
nn
(R), diz-se que R e um valor proprio de A se existir
um vector X M
n1
(R) nao nulo tal que AX = X.
14
Notas de programacao em Mathematica 15
Utilize o Mathematica para :
3. Calcular e imprimir o termo de ordem n da sucessao de Fibonacci, denida por
_
_
_
x
0
= 1
x
1
= 1
x
k+1
= x
k
+ x
k1
, k N
(n denido pelo utilizador).
4. Dada uma matriz A = [a
ij
] M
nm
(C) (introduzida pelo utilizador) calcular
A

:= max
i=1,...,n
m

j=1
|a
ij
| .
5. Calcule a soma dos n primeiros termos da sucessao denida por
_
_
_
x
0
= 3.5
x
n+1
= x
n

x
2
n
16
2x
n
, n N
0
.
4. Composic oes iterativas
Nesta secc ao iremos ver algumas das construc oes que permitem executar repetida-
mente uma certa acc ao enquanto uma condicao e verdadeira. As construc oes que aqui
abordaremos sao decerto ja conhecidas no contexto de programac ao em outras lingua-
gens. Sao elas, os ciclos While, Do e For.
Comecemos pela composicao iterativa While.
Esta composic ao tem como forma While[condicao,accao].
Exemplo 3.
[In]:= x=2 ;
While[x<8,x=x+2]
Print[x] (* Imprime o maior par menor ou igual a 8 *)
[Out]= 8
[In]:= y=2;
15
16 Notas de programacao em Mathematica
While[x<=10 && y<=15,Print[y];x=x+1;y=3 y] (* Imprime todos os va-
2 lores de y enquanto
6 x<=10 e y<=15 (repare
que o valor inicial
de x e 8)
*)
Composic ao iterativa Do.
[In]:= ?Do
Do[expr, {imax}] evaluates expr imax times. Do[expr, {i, imax}]
evaluates expr with the variable i successively taking on the va-
lues 1 through imax (in steps of 1). Do[expr, {i, imin, imax}]
starts with i = imin. Do[expr,{i,imin, imax, di}] uses steps di.
Do[expr, {i,imin, imax}, {j, jmin,jmax},... ] evaluates expr
looping over different values of j, etc. for each i.
Exemplo 4.
[In]:= sum=0 ;
Do[sum=sum+i,{i,1,500}] (* soma os 500 primeiros naturais *)
Print[sum]
[Out]= 125250
Composic ao iterativa For.
[In]:= ?For
For[start, test, incr, body] executes start, then repeatedly eva-
luates body and incr until test fails to give True.
Exemplo 5.
[In]:= For[i=1,i<4,i++,Print[i]] (* Imprime os tr^es primeiros naturais *)
1
2
3
16
Notas de programacao em Mathematica 17
Exemplo 6. Vejamos um exemplo um pouco mais complicado
[In]:= Clear[x];
For[i=1;t=x,i<4,i++,t=t+i;Print[t]]
1+x
3+x
6+x
Estas ferramentas ja nos permitem comecar a programar em Mathematica alguns algo-
ritmos mais elaborados. Em particular, estamos em condicoes de comecar a programar
os algoritmos com que nos depararemos ao longo da disciplina de Analise Numerica.
Mas antes de entrarmos na Analise Numerica, vejamos mais uns exemplos elucidativos
do modo como podemos utilizar as ferramentas que ja possuimos:
Exemplo 7. Uma matriz A do tipo n m diz-se de diagonal principal dominante em
sentido estrito se,
|a
ii
| >
m

j=1
j=i
|a
ij
| , i = 1, . . . , n.
Vamos construir uma func ao diagonal[matriz ] que permite testar se uma dada matriz
e ou nao de diagonal dominante em sentido estrito.
[In]:= Clear[cont];
cont=0;
diagonal[A_]:=( For[i=1,i<=Dimensions[A][[1]],i++,
If[A[[i,i]]<=
Sum[Abs[A[[i,j]]],{j,1,Dimensions[A][[2]]}]-
Abs[A[[i,i]]], cont=1 ]];
If[cont==1,"Nao e de diagonal estritamente dominan-
te", "

E de diagonal estritamente dominante" ] )


Utilizemos a func ao anterior para averiguar se a matriz
A =
_
1 2
2 3
_
e de diagonal principal dominante em sentido estrito
17
18 Notas de programacao em Mathematica
[In]:= A={{1,2},{2,3}} ;
diagonal[A]
[Out]= Nao e de diagonal estritamente dominante
Exemplo 8. (Algoritmo de Euclides) Sejam a, b Z nao nulos. Sabe-se que nestas
condic oes existe o mdc(a, b) e o algoritmo de Euclides permite calcula-lo. Vejamos
como:
A ideia consiste em aplicar sucessivamente o teorema da divisao, do seguinte modo:
a = bq + r
0
b = r
0
q
0
+ r
1
r
0
= r
1
q
1
+ r
2
.
.
.
r
n2
= r
n1
q
n1
+ r
n
r
n1
= r
n
q
n
+ 0
Ent ao mdc(a, b)= r
n
. Vamos construir uma func ao mdc[a,b] que devolve o maximo
divisor comum entre dois inteiros nao nulos a e b:
[In]:= Clear[mdc,a,b,m,n,r,]
mdc[a_Integer /; a!=0,b_Integer/; b!=0]:= ( m=a;n=b;r=Mod[m,n];
While[r !=0,
m=n;
n=r;
r=Mod[m,n]];
n )
Assim,
[In]:= mdc[5,15]
[Out]= 5
Tambem se poderia conrmar o resultado anterior utilizando a func ao pre denida
GCD[ ].
Exerccio 4. Uma matriz A = [a
ij
] M
nm
(K) diz-se diagonal se a
ij
= 0, i = j.
Elabore um algoritmo que permita decidir se uma dada matriz e ou nao diagonal.
18
Notas de programacao em Mathematica 19
Referencias
Jose Carmo, Amlcar Sernadas, Cristina Sernadas, F. Miguel Dionsio, Carlos Ca-
leiro, Introducao `a programacao em Mathematica, IST Press, 1999.
Stephen Wolfram, The Mathematica Book 3rd ed., Wolfram Media, Cambridge Uni-
versity Press, 1996.
19

Das könnte Ihnen auch gefallen