Você está na página 1de 19

Introduo ao MATLAB

e ao pacote GAAL

1. O que o MATLAB ?
2. Matrizes
3. Sistemas lineares
4. Inverso de matrizes
5. Determinantes

1. O que o MATLAB

MATLAB (acrnimo de MATrix LABoratory) um software interativo de alta


performance voltado para o clculo numrico. O MATLAB integra anlise numrica,
clculo com matrizes, processamento de sinais e construo de grficos em
ambiente fcil de usar, onde problemas e solues so expressos somente como
eles so escritos matematicamente, ao contrrio da programao tradicional.
O MATLAB um sistema interativo cujo elemento bsico de informao
uma matriz que no requer dimensionamento. Esse sistema permite a resoluo de
muitos problemas numricos em apenas uma frao do tempo que se gastaria para
escrever um programa semelhante em linguagem Fortran, Basic ou C. Alm disso,
as solues dos problemas so expressas no MATLAB quase exatamente como
elas so escritas matematicamente.
Alguns pacotes para clculos especficos podem ser incorporados a rotinas
pr-definidas. Um pacote chamado GAAL com funes que so direcionadas para
o estudo de Geometria Analtica e lgebra Linear pode ser obtido atravs da Internet
no endereo http://www.mat.ufmg.br/~regi. Neste endereo, voc encontrar as
instrues para instalar esse pacote. OBS: voc deve ter o MATLAB instalado
anteriormente para instalar o pacote GAAL!

2. Matrizes
As matrizes constituem a estrutura bsica do MATLAB, por isso ele permite
vrias maneiras de manipul-las. Para construir uma matriz, os elementos de uma
mesma linha devem estar separados por branco ou vrgulas e as linhas devem estar
separadas por ponto e vrgula. Para criarmos uma matriz 3x2 fazemos:

EDU>>B=[1 2 3; 4 5 6]; ou EDU>> A=[1,2,3;4,5,6];


O ponto e vrgula foram colocados para que o MATLAB no exibisse o
resultado do comando executado, por exemplo:

EDU>> A=[1 2;3 4];


EDU>> A=[1 2;3 4]

A=

1 2
3 4

2.1 Operaes Elementares com Matrizes

Abaixo h um quadro onde listamos as principais operaes feitas com


matrizes:

Operao Descrio
A+B Efetua a soma de duas matrizes
A-B Efetua a subtrao de duas matrizes
A. Encontra a transposta da matriz A
A(:,j) Mostra a coluna j de A
Num*A Produto escalar de num por A
A^k Matriz A elevada potncia k

Exemplo 1: Consideremos as matrizes A=[1 2;3 4] e B=[2 3;1 5]. Vamos realizar
as operaes listadas na tabela acima sobre estas matrizes.

EDU>> A=[1 2;3 4]; % declarao da matriz A


EDU>> B=[2 3;1 5]; % declarao da matriz B
EDU>> A+B %soma das matrizes

ans =

3 5
4 9

OBS: Quando no se atribui o resultado de um comando a uma varivel, o MATLAB


atribui o resultado a uma varivel ans (ou seja, answer)

EDU>> A-B % subtrao das matrizes

ans =
-1 -1
2 -1

EDU>> A.' % transposta da matriz A

ans =

1 3
2 4

EDU>> B(:,2) % segunda coluna de B

ans =

3
5

EDU>> 5*B % multiplicao da matriz B por 5

ans =

10 15
5 25

EDU>> B^2 % matriz B elevada ao quadrado

ans =

7 21
7 28

Para modificar o elemento de uma matriz, basta atribuirmos a ele um novo


valor:

EDU>> A(1,2)=5;
EDU>> A

A=

1 5
3 4
Se um for atribudo um valor a um elemento no existente, ou seja, cujos
ndices (um ou ambos) excedem o tamanho da matriz, ento o MATLAB aumenta
esta matriz automaticamente preenchendo-a com valores nulos nas demais
posies novas, de forma que a matriz permanea retangular:

EDU>> A(1,4)=7;
EDU>> A

A=

1 5 0 7
3 4 0 0

Seja agora a matriz quadrada C de ordem 3:

EDU>> C=[1 2 3;4 5 6;7 8 9];

Os elementos de uma matriz podem ser referenciados tantos


individualmente, tal como

EDU>> C(3,3)

ans =

ou em conjuntos. Se quisermos os elementos das linhas 1 2 3 e da coluna 2,


fazemos

EDU>> C([1 2 3],2)

ans =

2
5
8

Consideremos agora uma matriz D, 4x3:

EDU>> D=[3 5 1;7 3 5; 3 1 2;5 2 4];

Para sabermos o nmero de linhas e de colunas de uma matriz, utilizamos o


comando size. Existem duas notaes para essa funo:

EDU>> t=size(D)

t=
3 3

onde a varivel t uma matriz linha contendo duas posies, uma contendo o
nmero de linhas e outra contendo o nmero de colunas. A outra maneira :

EDU>> [l,c]=size(D)

l=

c=

onde as variveis l e c recebem respectivamente, o nmero de linhas e o nmero


de colunas.

2.2 Operaes sobre as colunas de uma matriz


O MATLAB possui funes que se aplicam individualmente cada coluna de
uma matriz, produzindo uma matriz linha com elementos correspondentes ao
resultado de cada coluna. A tabela abaixo mostra algumas dessas funes.

Funo Descrio
sum Soma dos elementos das colunas da matriz
prod Produto dos elementos das colunas da matriz
mean Mdia aritmtica dos elementos das colunas da matriz
std Desvio padro dos elementos das colunas da matriz
max Maiores elementos das colunas da matriz
min Menores elemento das colunas da matriz
Ordena em ordem crescente os elementos das colunas da
sort
matriz

Exemplo 2: Considere um quadrado mgico, isto , uma matriz de ordem n>=3,


com valores entre 1 e n2, tal que a soma das linhas, das colunas e das diagonais
do sempre o mesmo valor. Vamos demonstrar as principais operaes da tabela
acima.
EDU>> F=magic(3) % cria uma matriz mgica de ordem 3.

F=

8 1 6
3 5 7
4 9 2

EDU>> sum(F) % efetua a soma dos elementos das colunas de F

ans =

15 15 15

EDU>> prod(F) % efetua a produto dos elementos das colunas de F

ans =

96 45 84

EDU>> mean(F) % efetua a mdia aritmtica dos elementos das colunas de F

ans =

5 5 5

EDU>> std(F) % efetua o desvio padro dos elementos das colunas de F


ans =

2.6458 4.0000 2.6458

EDU>> max(F) % Mostra os maiores elementos das colunas da matriz

ans =

8 9 7

EDU>> min(F) % Mostra os menores elementos das colunas da matriz

ans =

3 1 2

EDU>> sort(F) % Ordena em ordem crescente os elementos das colunas da


matriz
ans =

3 1 2
4 5 6
8 9 7

Todas essas funes podem ser aplicadas para se produzir os resultados


relativos a cada linha, bastando aplicar as funes transposta da matriz:

EDU>> sum(F.')

ans =

15 15 15

EDU>> prod(F.')

ans =

48 105 72

2.3 Funes especiais


O MATLAB possui algumas funes para manipulao de matrizes, como
listadas na tabela abaixo:

Funo Descrio
diag Sendo o argumento um vetor, cria uma matriz diagonal com os
elementos do vetor. Se o argumento for uma matriz, produz uma
matriz coluna com os elementos da diagonal principal.
tril Obtm a parte triangular inferior de uma matriz
triu Obtm a parte triangular superior de uma matriz

Exemplo 3: Utilizaremos a matriz F declarada no exemplo anterior para mostrar as


funes acima:

EDU>> d=diag(F) % mostra os elementos da diagonal principal da matriz F

d=

8
5
2
EDU>> D=diag(d) % cria uma matriz diagonal em que os elementos da diagonal
principal so os elementos do vetor d.

D=

8 0 0
0 5 0
0 0 2

EDU>> L=tril(F) % Obtm a parte triangular inferior da matriz F

L=

8 0 0
3 5 0
4 9 2

EDU>>U=triu(F) % Obtm a parte triangular superior da matriz F

U=

8 1 6
0 5 7
0 0 2

2.4 Gerao de Matrizes Especiais


O MATLAB tambm fornece vrias matrizes elementares que so de grande
utilidade. Se um nico parmetro for provido, ento a matriz ser quadrada e se
forem dois parmetros, a matriz ser retangular com as dimenses iguais aos
valores desses parmetros. Essas funes esto especificadas na tabela abaixo:

Funo Descrio da matriz


zeros Cria uma matriz em que todos os elementos so nulos
ones Cria uma matriz em que todos os elementos so iguais a 1
eye Cria a matriz identidade ou parte dela
rand Cria uma matriz de elementos aleatrios uniformemente
distribudos entre 0 e 1
randi* Cria uma matriz de elementos aleatrios uniformemente
distribudos entre -5 e 5
randn Cria uma matriz de elementos aleatrios com distribuio normal
com mdia zero e desvio padro 1
* comando do pacote GAAL.

Exemplo 4: Algumas matrizes construdas com o auxlio dessas funes:

EDU>> Z=zeros(2)

Z=

0 0
0 0

EDU>> U=ones(2,3)

U=

1 1 1
1 1 1

EDU>> I=eye(2,4)

I=

1 0 0 0
0 1 0 0

EDU>> R=rand(3)

R=

0.9501 0.4860 0.4565


0.2311 0.8913 0.0185
0.6068 0.7621 0.8214

EDU>> randn(3,5)

ans =

-0.4326 0.2877 1.1892 0.1746 -0.5883


-1.6656 -1.1465 -0.0376 -0.1867 2.1832
0.1253 1.1909 0.3273 0.7258 -0.1364

3. Sistemas Lineares
Nesta seo, vamos utilizar os comandos do pacote GAAL para resolvermos
sistemas lineares. Instrues sobre a instalao deste pacote voc encontra no site
http://www.mat.ufmg.br/~regi.
O mtodo que ser utilizado na resoluo de sistemas lineares o mtodo
de Gauss-Jordan. No quadro abaixo, esto listados os comandos que efetuam as
operaes elementares sobres matrizes.

Comando Descrio
Faz a operao elementar alpha x linha i linha i da
B=opel(alpha,i,A) *
matriz A e armazena na matriz B.
Faz a operao elementar alpha x linha i + linha j linha
B=opel(alpha,i,j,A) *
j da matriz A e armazena em B.
Faz a troca da linha i com a linha j da matriz A e armazena
B=opel(A,i,j) *
a matriz resultante na varivel B.
Calcula passo a passo a forma escalonada reduzida da
B=escalona(A) *
matriz A e armazena a matriz resultante na varivel B.
x=A\b Retorna o vetor soluo x do sistema linear Ax=b.

* comandos do pacote GAAL.


Vamos utilizar os comandos listados acima para resolvermos o seguinte
sistema linear:

Inicialmente vamos criar a matriz aumentada:

EDU>> A=[1 1 2 8; -1 -2 3 1; 3 -7 4 10] %cria a matriz aumentada do sistema.


A=

1 1 2 8
-1 -2 3 1
3 -7 4 10

Temos que encontrar o piv da primeira coluna. Como o primeiro elemento


da coluna 1 1, basta zerarmos os demais elementos.

EDU>> B=opel(1,1,2,A); % multiplica por 1 a primeira linha e soma com a


segunda linha.
1*linha 1 + linha 2 ==> linha 2

EDU>> B=opel(-3,1,3,B); % multiplica a primeira linha por 3 e soma com a


terceira.
-3*linha 1 + linha 3 ==> linha 3

EDU>> B % mostra o contedo da matriz B

B=

1 1 2 8
0 -1 5 9
0 -10 -2 -14

Vamos agora encontrar o piv da segunda coluna. Para isso, basta


multiplicarmos a segunda linha por 1.

EDU>> B=opel(-1,2,B) % multiplica a segunda linha por 1.


-1*linha 2 ==> linha 2

B=

1 1 2 8
0 1 -5 -9
0 -10 -2 -14

Temos que zerar os outros elementos da segunda coluna.

EDU>> B=opel(-1,2,1,B); % multiplica por 1 a segunda linha e soma com a


primeira linha.
-1*linha 2 + linha 1 ==> linha 1

EDU>> B=opel(10,2,3,B); % multiplica a segunda linha por 10 e soma com a


terceira linha.
10*linha 2 + linha 3 ==> linha 3

EDU>> B % mostra o contedo da matriz B.

B=

1 0 7 17
0 1 -5 -9
0 0 -52 -104

Encontraremos agora o piv da terceira linha. Para isso, multiplicaremos a


terceira linha por 1/52.

EDU>> B=opel(-1/52,3,B); % multiplica a terceira linha por 1/52.


-1/52*linha 3 ==> linha 3

EDU>> B % mostra o contedo da matriz B.


B=

1 0 7 17
0 1 -5 -9
0 0 1 2

Para terminarmos o processo de escalonamento, basta zerarmos os


elementos da terceira coluna.

EDU>> B=opel(5,3,2,B); % multiplica por 5 a terceira linha e soma com a


segunda linha.
5*linha 3 + linha 2 ==> linha 2

EDU>> B=opel(-7,3,1,B); % multiplica a terceira linha por -7 e soma com a


primeira linha.
-7*linha 3 + linha 1 ==> linha 1

EDU>> B % mostra o contedo da matriz B.

B=

1 0 0 3
0 1 0 1
0 0 1 2

Portanto encontramos o vetor soluo deste sistema, X=[3 1 2];

Executando o comando escalona(A), bastaria criar a matriz aumentada e


executarmos o comando. Como exemplo, vamos resolver o sistema acima
utilizando este comando.

Inicialmente temos que criar a matriz aumentada do sistema.

EDU>> A=[1 1 2 8; -1 -2 3 1; 3 -7 4 10]

A=

1 1 2 8
-1 -2 3 1
3 -7 4 10

Criada a matriz aumentada, basta executarmos o comando escalona(A):

EDU>> B=escalona(A)
[ 1, 1, 2, 8]
[ -1, -2, 3, 1]
[ 3, -7, 4, 10]

eliminao 1:
(1)*linha 1 + linha 2 ==> linha 2
(-3)*linha 1 + linha 3 ==> linha 3
[ 1, 1, 2, 8]
[ 0, -1, 5, 9]
[ 0, -10, -2, -14]

Continua ? (s/n) s
eliminao 2:
(-1)*linha 2 ==> linha 2
[ 1, 1, 2, 8]
[ 0, 1, -5, -9]
[ 0, -10, -2, -14]

Continua ? (s/n) s
(-1)*linha 2 + linha 1 ==> linha 1
(10)*linha 2 + linha 3 ==> linha 3
[ 1, 0, 7, 17]
[ 0, 1, -5, -9]
[ 0, 0, -52, -104]

Continua ? (s/n) s
eliminao 3:
(-1/52)*linha 3 ==> linha 3
[ 1, 0, 7, 17]
[ 0, 1, -5, -9]
[ 0, 0, 1, 2]

Continua ? (s/n) s
(-7)*linha 3 + linha 1 ==> linha 1
(5)*linha 3 + linha 2 ==> linha 2
[ 1, 0, 0, 3]
[ 0, 1, 0, 1]
[ 0, 0, 1, 2]

Continua ? (s/n) s
Fim

B=

[ 1, 0, 0, 3]
[ 0, 1, 0, 1]
[ 0, 0, 1, 2]
Portanto, obtemos o mesmo vetor soluo, X=[3 1 2];

Um recurso que o prprio MATLAB oferece para resolver sistemas lineares


com rapidez o operador \. Dado qualquer sistema linear Ax=b, a soluo pode ser
facilmente digitando o comando A\b. Vamos resolver o sistema acima utilizando este
comando.

Inicialmente, do mesmo modo que acima, temos que criar a matriz dos
coeficientes e o vetor dos termos independentes do sistema:

EDU>> A=[1 1 2 ; -1 -2 3 ; 3 -7 4 ]; % forma a matriz A


EDU>> b=[8 1 10]'; % forma o vetor dos termos independentes

Agora, basta executar o comando:

EDU>> x=A\b

x=

3.0000
1.0000
2.0000

Obtemos, claro, o mesmo vetor soluo encontrado acima quando utilizamos o


pacote de GAAL.

4. Inverso de matrizes
Nesta seo, encontraremos a inversa de matrizes usando o MATLAB.
Utilizaremos aqui o mesmo mtodo apresentado no livro texto, que consiste em
escalonar a matriz aumentada. Essa matriz aumentada formada pela matriz cuja
inversa queremos encontrar e pela matriz identidade. Inicialmente, vamos listar os
comandos do pacote GAAL que utilizaremos:

Comando Descrio
Atribui matriz M a matriz obtida colocando lado a lado as
M=[A,B]
matrizes A e B
Faz a operao elementar alpha x linha i linha i da matriz
B=opel(alpha,i,A)
A e armazena na varivel B.
Faz a operao elementar alpha x linha i + linha j linha j
B=opel(alpha,i,j,A)
da matriz A e armazena em B.
Faz a troca da linha i com a linha j da matriz A e armazena a
B=opel(A,i,j)
matriz resultante na varivel B.
Calcula passo a passo a forma escalonada reduzida da
B=escalona(A)
matriz A e armazena a matriz resultante na varivel B.

Vamos utilizar esses comandos para encontrar a inversa da matriz

Inicialmente, escrevemos a matriz aumentada.

EDU>> A=[1 2 3;1 1 2;0 1 2]; % forma a matriz A


EDU>> B=[A,eye(3)]; % forma a matriz aumentada B
EDU>> B % escreve a matriz B

B=
1 2 3 1 0 0
1 1 2 0 1 0
0 1 2 0 0 1

Vamos agora escalonar a matriz aumentada. O elemento da primeira linha


(piv) 1, precisamos apenas zerar os elementos da primeira coluna.

EDU>> B=opel(-1,1,2,B) % multiplica a primeira linha por 1 e soma com a


segunda.
-1*linha 1 + linha 2 ==> linha 2

B=

1 2 3 1 0 0
0 -1 -1 -1 1 0
0 1 2 0 0 1

Encontraremos agora o piv da segunda linha. Para isso, basta


multiplicarmos a segunda linha por -1.

EDU>> B=opel(-1,2,B) % multiplica a segunda linha por 1.


-1*linha 2 ==> linha 2

B=

1 2 3 1 0 0
0 1 1 1 -1 0
0 1 2 0 0 1

Devemos agora zerar os elementos da segunda coluna.

EDU>> B=opel(-2,2,1,B) % multiplica a segunda linha por 2 e soma com a


primeira linha.
-2*linha 2 + linha 1 ==> linha 1

B=
1 0 1 -1 2 0
0 1 1 1 -1 0
0 1 2 0 0 1

EDU>> B=opel(-1,2,3,B) % multiplica a segunda linha por 1 e soma com a


terceira linha.
-1*linha 2 + linha 3 ==> linha 3

B=
1 0 1 -1 2 0
0 1 1 1 -1 0
0 0 1 -1 1 1

Como o elemento da terceira linha e terceira coluna j o piv, basta


zerarmos os elementos da terceira coluna.

EDU>> B=opel(-1,3,2,B) % multiplica a terceira linha por 1 e soma com a


segunda.
-1*linha 3 + linha 2 ==> linha 2

B=

1 0 1 -1 2 0
0 1 0 2 -2 -1
0 0 1 -1 1 1

EDU>> B=opel(-1,3,1,B) % multiplica a terceira linha por 1 e soma com a


primeira.
-1*linha 3 + linha 1 ==> linha 1

B=
1 0 0 0 1 -1
0 1 0 2 -2 -1
0 0 1 -1 1 1

Assim, a matriz [A|I3] equivalente por linhas matriz acima, que da


forma [I3|S], portanto a matriz A invertvel e sua inversa a matriz S, ou seja,
S= .

O MATLAB tambm oferece um comando muito simples para o clculo da


inversa de uma matriz:

Comando Descrio
B=inv(A) Atribui matriz B a inversa da matriz A

Vamos utilizar o comando acima para calcularmos a inversa da matriz


definida anteriormente.

EDU>> A=[1 2 3;1 1 2;0 1 2]; % forma a matriz A


EDU>> B=inv(A) % calcula a inversa da matriz A

B=

0 1 -1
2 -2 -1
-1 1 1

Como esperado, obtemos a mesma matriz encontrada anteriormente.

5. Determinantes
O determinante de uma matriz pode ser facilmente encontrado usando o
MATLAB. O quadro abaixo mostra esse comando, alm de um comando
especfico do pacote GAAL para encontrarmos o determinante de uma matriz.

Comando Descrio
b=det(A) Atribui varivel b o determinante da matriz A.
Calcula o determinante da matriz A aplicando operaes
b=detopelp(A)* elementares at que a matriz esteja na forma triangular
superior e atribui o resultado varivel b.

*Comando do pacote GAAL

Vamos utilizar esses comandos para calcular o determinante da seguinte matriz:


Inicialmente temos que criar a matriz e depois executarmos os comandos. Vamos
calcular primeiramente utilizando o recurso oferecido pelo MATLAB:

EDU>> A=[1 2 3; 1 1 2; 0 1 2]; % cria a matriz A


EDU>> b=det(A) % calcula o determinante da matriz A

b=

-1

Utilizando o comando do pacote GAAL:

EDU>> b=detopelp(A) % calcula o determinante da matriz A transformando-a em


uma matriz triangular superior.

A=

[ 1, 2, 3]
[ 1, 1, 2]
[ 0, 1, 2]

eliminao 1:
-1*linha 1 + linha 2 ==> linha 2

A=

[ 1, 2, 3]
[ 0, -1, -1]
[ 0, 1, 2]

Continua ? (s/n) s
eliminao 2:
-1*linha 2 ==> linha 2

A=

[ 1, 2, 3]
[ 0, 1, 1]
[ 0, 1, 2]

det(A) = (-1)*det(A)
Continua ? (s/n) s
-1*linha 2 + linha 3 ==> linha 3

A=

[ 1, 2, 3]
[ 0, 1, 1]
[ 0, 0, 1]

Continua ? (s/n) s
Fim!
det(A) = (-1)*det(A)

b=

-1