Mathematica
Click here to load reader
-
Upload
mariane-motta -
Category
Documents
-
view
6 -
download
0
Transcript of Mathematica
Notas de programacao emMathematica
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 simplificadamente 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 caracterısticas 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 fica 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 fica
activo aquando da primeira avaliacao 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 funcoes 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 notacao
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 funcao). O quadro seguinte apresenta alguns exemplos de como passar da notacao
usual para a escrita em Mathematica.
Notacao 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]
loga(x) Log[a,x]
1
2 Notas de programacao em Mathematica
Tal como as funcoes, as expressoes booleanas (de valor verdadeiro ou falso) sao,
como veremos mais adiante, muito importantes. A tabela seguinte descreve a sintaxe
dos conectivos booleanos negacao, conjuncao e disjuncao:
Escrita em Mathematica
Negacao !p ou Not[p]
Conjuncao p && q ou And[p,q]
Disjuncao p || q ou Or[p,q]
Quanto aos principais operadores de comparacao, 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 informacao
sobre uma determinada funcao pode escever o comando ? antes da funcao ou entao
aceder directamente ao sistema de ajuda primindo simultaneamente as teclas shift e
F1 , onde para alem de encontrar informacao 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, operacoes e funcoes
matematicas pre definidas 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 resolucao de equacoes pode ser obtida utilizando a funcao 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 funcoes, somas finitas 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 funcao polinomial p(x) = x3 + 8x2 + 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 graficos
(* 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 construcoes mais utilizadas nas linguagens de programacao. A
sua utilizacao torna possıvel 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 utilizacao e manipulacao de listas no Mathematica e simples e eficiente, pois
sobre elas esta disponıvel um vasto leque de operacoes pre-definidas. O Mathematica
6
Notas de programacao em Mathematica 7
permite ainda uma grande flexibilidade na criacao 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 numeros :
Estes poderao ser, por exemplo, valores de dada funcao 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 funcao chama-se Table[ ]. Vejamos como podemos
utilizar esta funcao para gerar, por exemplo, um vector cujos elementos sao os cinco
primeiros numeros 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 bc d
)
A multiplicacao 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 11x −3
)
[in]:= MatrixForm[B . A]
[out]=
(a + 11c b + 11d−3c + ax −3d + bx
)
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:
[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 ∈ M3×1 | AX = 0} ⊆ M3×1.
E tambem possıvel obter uma caracterizacao 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 possıvel e indeterminado e
E ={[
x y z]T ∈ M3×1 | x = −y − z
}.
Verifiquemos que, por exemplo, (1,−2, 1) e uma solucao 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 numeros primos). 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 do tipo
3× 3, simetrica, isto e tal que A = AT. Ora, se for A = [aij]1≤i,j≤3 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]
Exercıcio 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.
Confirme agora os resultados obtidos utilizando o Mathematica.
3. Definicao de funcoes
Tal como acontecia no caso anterior das listas, o Mathematica tambem possui um
enorme numero de funcoes pre definidas. No entanto teremos necessidade de, ao longo
do curso, definir as nossas proprias funcoes que poderao nao estar disponıveis no leque
de funcoes iniciais do Mathematica. Embora existam varias formas de definir funcoes
no Mathematica, sera aqui abordada aquela que mais se assemelha a escrita usual em
matematica.
Suponha-se que se pretende definir a funcao real de variavel real f : R −→ R definida
por f(x) = cos(x). No Mathematica poderiamos definir f do seguinte modo:
f[x_]:=Cos[x]
Mais a frente veremos a diferenca entre definir uma funcao com ”=”e com ”:=”. Por
agora, concentremo-nos nos argumentos das funcoes. A definicao anterior especifica
que quando o Mathematica encontra uma expressao que coincide com f[x_] devera
substitui-la por Cos[x]. O underscore ” ” serve precisamente para indicar a variavel
10
Notas de programacao em Mathematica 11
independente. Se se tivesse definido f[x]:=Cos[x] entao apenas f[x] seria substituido
por Cos[x], o mesmo nao acontecendo por exemplo a f[y]. Para clarificar melhor esta
situacao vejamos esta diferenca em termos de escrita matematica:
Definicao no Mathematica Escrita em matematicaf[x_]:=Cos[x] f(x) = cos(x), ∀x ∈ Rf[x]:=Cos[x] f(x) = cos(x)
Note que para definir a funcao 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
”:=”(atribuicao diferida) na definicao de funcoes :
Considere-se a funcao m[x_]:=Max[x].
[In]:= m[x_]:=Max[x]
[In]:= ?m
Global ’m
m[x_]:=Max[x]
Defina-se agora uma nova funcao 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 ”basicos”a ter em conta quando pretendermos definir
uma funcao. De seguida vamos ver alguns exemplos ilustrativos da potencialidade des-
te tipo de ferramentas que, de uma forma simples permite-nos definir, por exemplo
funcoes nao triviais noutras linguagens de programacao.
11
12 Notas de programacao em Mathematica
Exemplo 1. Consideremos a funcao de Heaviside h definida por:
h(x) :=
1 se x > 012
se x = 00 se x < 0
No Mathematica poderiamos definir a funcao de Heaviside por
h[x_]=If[x<0,0,If [x>0,1,1/2]]
Exemplo 2. Vejamos como definir uma funcao deriv[funcao, variavel] com algumas
das propriedades do operador de derivacao :
Escrita em matematica Definicao 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
(xn)′ = nxn−1 deriv[x_^n_,x_]:=n x^(n-1)
f ′(x) = aeax+b se f(x) = eax+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]
Exercıcio 2. Transcreva as definicoes anteriores para um ficheiro ”notebook”do Mathe-
matica.
Altere o ficheiro anterior de modo que :
• seja possıvel calcular a derivada da funcao logaritmo.
• seja possıvel calcular a derivada da funcao composta.
Repare que neste exemplo as sucessivas atribuicoes deriv[ ] nao revogam as ante-
riores. Este tipo de situacao 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]
Exercıcio 3. (Problema de Collatz) Considere a aplicacao f : N −→ N definida por
f(n) =
{ n
2se 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 kn ∈ N tal que fkn(n) = 11.
Utilize o Mathematica para testar a conjectura, mais concretamente, defina a funcao f ,
arbitre um valor para n e teste varios valores kn ate que fkn(n) = 1.
Sugestao: Utilize as funcoes EvenQ[ ] e Nest[ ].
1Nota: fkn = f ◦ . . . ◦ f︸ ︷︷ ︸kn vezes
.
13
14 Notas de programacao em Mathematica
Exercıcios
1. Considere o espaco vectorial real R3 e f : R3 −→ R3 a aplicacao definida por
f(x, y, z) = (x + y, y + z, z).
Utilize o Mathematica para:
a) Mostrar que
i) f e uma aplicacao linear.
ii) B = ((1, 1, 1), (0, 1, 2), (1, 1, 0)) e uma base de R3.
b) Determinar A = M(f ;B,B).
c) Calcular os valores proprios da matriz A2 da alınea b).
Sugestao: Relembre que os valores proprios de A sao precisamente os zeros
reais do polinomio caracterıstico p(λ) = |A− λI3|.d) Determinar, para cada valor proprio λ, de A, uma base do subespaco proprio
associado
Eλ ={X ∈ R3 | AX = λX
}.
2. Considere a funcao f : N −→ R definida por
f(n) =n−1∑
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 definido pelo
utilizador).
2Recorde que, dada uma matriz A ∈ Mn×n(R), diz-se que λ ∈ R e um valor proprio de A se existirum vector X ∈ Mn×1(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, definida por
x0 = 1x1 = 1xk+1 = xk + xk−1, k ∈ N
(n definido pelo utilizador).
4. Dada uma matriz A = [aij] ∈ Mn×m(C) (introduzida pelo utilizador) calcular
‖A‖∞ := maxi=1,...,n
m∑j=1
|aij| .
5. Calcule a soma dos n primeiros termos da sucessao definida por
x0 = 3.5
xn+1 = xn − x2n − 16
2xn
, n ∈ N0.
4. Composicoes iterativas
Nesta seccao iremos ver algumas das construcoes que permitem executar repetida-
mente uma certa accao enquanto uma condicao e verdadeira. As construcoes que aqui
abordaremos sao decerto ja conhecidas no contexto de programacao em outras lingua-
gens. Sao elas, os ciclos While, Do e For.
Comecemos pela composicao iterativa While.
Esta composicao 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)
*)
Composicao 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
Composicao 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 tres 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,
|aii| >m∑
j=1j 6=i
|aij| , ∀i = 1, . . . , n.
Vamos construir uma funcao 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 funcao anterior para averiguar se a matriz
A =
[1 22 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
condicoes 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 + r0
b = r0q0 + r1
r0 = r1q1 + r2...
rn−2 = rn−1qn−1 + rn
rn−1 = rnqn + 0
Entao mdc(a, b)= rn. Vamos construir uma funcao 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 confirmar o resultado anterior utilizando a funcao pre definida
GCD[ ].
Exercıcio 4. Uma matriz A = [aij] ∈ Mn×m(K) diz-se diagonal se aij = 0,∀i 6= 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, Amılcar Sernadas, Cristina Sernadas, F. Miguel Dionısio, 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