Introdução ao MATLAB

e ao pacote GAAL

 

 

1.    O que é o MATLAB ?

2.    Matrizes

3.    Sistemas lineares

4.    Inversão de matrizes

5.    Determinantes

 

 

 

1. O que é o MATLAB

 

MATLAB (acrônimo de MATrix LABoratory) é um software interativo de alta performance voltado para o cálculo numérico. O MATLAB integra análise numérica, cálculo com matrizes, processamento de sinais e construção de gráficos em ambiente fácil de usar, onde problemas e soluções são expressos somente como eles são escritos matematicamente, ao contrário da programação tradicional.

O MATLAB é um sistema interativo cujo elemento básico de informação é uma matriz que não requer dimensionamento. Esse sistema permite a resolução de muitos problemas numéricos em apenas uma fração do tempo que se gastaria para escrever um programa semelhante em linguagem Fortran, Basic ou C. Além disso, as soluções dos problemas são expressas no MATLAB quase exatamente como elas são escritas matematicamente.

Alguns pacotes para cálculos específicos podem ser incorporados a rotinas pré-definidas. Um pacote chamado GAAL com funções que são direcionadas para o estudo de Geometria Analítica e Álgebra Linear pode ser obtido através da Internet no endereço http://www.mat.ufmg.br/~regi. Neste endereço, você encontrará as instruções para instalar esse pacote. OBS: você deve ter o MATLAB instalado anteriormente para instalar o pacote GAAL! 

    

2. Matrizes

 

                As matrizes constituem a estrutura básica do MATLAB, por isso ele permite várias maneiras de manipulá-las. Para construir uma matriz, os elementos de uma mesma linha devem estar separados por branco ou vírgulas e as linhas devem estar separadas por ponto e vírgula. 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 vírgula foram colocados para que o MATLAB não 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 Operações Elementares com Matrizes

 

Abaixo há um quadro onde listamos as principais operações feitas com matrizes:

 

Operação

Descrição

A+B

Efetua a soma de duas matrizes

A-B

Efetua a subtração 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 à potência k

 

 

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

 

EDU>> A=[1 2;3 4];     % declaração da matriz A

EDU>> B=[2 3;1 5];     % declaração da matriz B

EDU>> A+B                 %soma das matrizes

 

ans =

 

     3     5

     4     9

 

 

OBS: Quando não se atribui o resultado de um comando a uma variável, o MATLAB atribui o resultado a uma variável ‘ans’ (ou seja, answer)   

 

 

EDU>> A-B                  % subtração 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                 % multiplicação 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 atribuído um valor a um elemento não existente, ou seja, cujos índices (um ou ambos) excedem o tamanho da matriz, então o MATLAB aumenta esta matriz automaticamente preenchendo-a com valores nulos nas demais posições novas, de forma que a matriz permaneça 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 =

 

     9

 

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 número de linhas e de colunas de uma matriz, utilizamos o comando size. Existem duas notações para essa função:

 

EDU>> t=size(D)

 

t =

 

3        3

 

onde a variável t é uma matriz linha contendo duas posições, uma contendo o número de linhas e outra contendo o número de colunas. A outra maneira é:

 

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

 

l =

 

     4

 

c =

 

     3

 

onde as variáveis l e c recebem respectivamente, o número de linhas e o número de colunas.

 

 

2.2 Operações sobre as colunas de uma matriz

 

O MATLAB possui funções 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 funções.

 

 

 

Função

Descrição

sum

Soma dos elementos das colunas da matriz

prod

Produto dos elementos das colunas da matriz

mean

Média aritmética dos elementos das colunas da matriz

std

Desvio padrão dos elementos das colunas da matriz

max

Maiores elementos das colunas da matriz

min

Menores elemento das colunas da matriz

sort

Ordena em ordem crescente os elementos das colunas da matriz

 

 

 

 

Exemplo 2: Considere um quadrado mágico, isto é, uma matriz de ordem n>=3, com valores entre 1 e n2, tal que a soma das linhas, das colunas e das diagonais dão sempre o mesmo valor. Vamos demonstrar as principais operações da tabela acima.

 

 

EDU>> F=magic(3)     % cria uma matriz mágica 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 média aritmética dos elementos das colunas de F

 

ans =

 

     5     5     5

 

EDU>> std(F)    % efetua o desvio padrão 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 funções podem ser aplicadas para se produzir os resultados relativos a cada linha, bastando aplicar as funções à transposta da matriz:

 

EDU>> sum(F.')

 

ans =

 

    15    15    15

 

EDU>> prod(F.')

 

ans =

 

    48   105    72

 

 

2.3 Funções especiais

 

O MATLAB possui algumas funções para manipulação de matrizes, como listadas na tabela abaixo:

 

 

Função

Descrição

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

Obtém a parte triangular inferior de uma matriz

triu

Obtém a parte triangular superior de uma matriz

 

 

Exemplo 3: Utilizaremos a matriz F declarada no exemplo anterior para mostrar as funções 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 são os elementos do vetor d.

 

D =

 

     8     0     0

     0     5     0

     0     0     2

 

EDU>> L=tril(F)     % Obtém a parte triangular inferior da matriz F

 

L =

 

     8     0     0

     3     5     0

     4     9     2

 

EDU>>U=triu(F)     % Obtém a parte triangular superior da matriz F

 

U =

 

     8     1     6

     0     5     7

     0     0     2

 

2.4 Geração de Matrizes Especiais

 

O MATLAB também fornece várias matrizes elementares que são de grande utilidade. Se um único parâmetro for provido, então a matriz será quadrada e se forem dois parâmetros, a matriz será retangular com as dimensões iguais aos valores desses parâmetros. Essas funções estão especificadas na tabela abaixo:

 

 

 

Função

Descrição da matriz

zeros

Cria uma matriz em que todos os elementos são nulos

ones

Cria uma matriz em que todos os elementos são iguais a 1

eye

Cria a matriz identidade ou parte dela

rand

Cria uma matriz de elementos aleatórios uniformemente distribuídos entre 0 e 1

randi*

Cria uma matriz de elementos aleatórios uniformemente distribuídos entre -5 e 5

randn

Cria uma matriz de elementos aleatórios com distribuição normal com média zero e desvio padrão 1

 

* comando do pacote GAAL.                    

 

Exemplo 4: Algumas matrizes construídas com o auxílio dessas funções:

 

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 seção, vamos utilizar os comandos do pacote GAAL para resolvermos sistemas lineares. Instruções sobre a instalação deste pacote você encontra no site http://www.mat.ufmg.br/~regi.

            O método que será utilizado na resolução de sistemas lineares é o método de Gauss-Jordan. No quadro abaixo, estão listados os comandos que efetuam as operações elementares sobres matrizes.

 

           

Comando

Descrição

B=opel(alpha,i,A) *

Faz a operação elementar alpha x linha i è linha i da matriz A e armazena na matriz B.

B=opel(alpha,i,j,A) *

Faz a operação elementar alpha x linha i + linha j è linha j da matriz A e armazena em B.

B=opel(A,i,j) *

Faz a troca da linha i com a linha j da matriz A e armazena a matriz resultante na variável B.

B=escalona(A) *

Calcula passo a passo a forma escalonada reduzida da matriz A e armazena a matriz resultante na variável B.

x=A\b

Retorna o vetor solução 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 conteúdo 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 conteúdo 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 conteúdo 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 conteúdo da matriz B.

 

B =

 

            1     0     0     3

            0     1     0     1

            0     0     1     2

 

            Portanto encontramos o vetor solução 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]

 

eliminação 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

eliminação 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

eliminação 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 solução, X=[3 1 2];

 

Um recurso que o próprio MATLAB oferece para resolver sistemas lineares com rapidez é o operador \. Dado qualquer sistema linear Ax=b, a solução 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 solução encontrado acima quando utilizamos o pacote de GAAL. 

 

 

4. Inversão de matrizes

 

Nesta seção, encontraremos a inversa de matrizes usando o MATLAB. Utilizaremos aqui o mesmo método 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

Descrição

M=[A,B]

Atribui à matriz M a matriz obtida colocando lado a lado as matrizes A e B

B=opel(alpha,i,A)

Faz a operação elementar alpha x linha i è linha i da matriz A e armazena na variável B.

B=opel(alpha,i,j,A)

Faz a operação elementar alpha x linha i + linha j è linha j da matriz A e armazena em B.

B=opel(A,i,j)

Faz a troca da linha i com a linha j da matriz A e armazena a matriz resultante na variável B.

B=escalona(A)

Calcula passo a passo a forma escalonada reduzida da matriz A e armazena a matriz resultante na variável 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 é invertível e sua inversa é a matriz S, ou seja,

 

S=.

 

O MATLAB também oferece um comando muito simples para o cálculo da inversa de uma matriz:

 

Comando

Descrição

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, além de um comando específico do pacote GAAL para encontrarmos o determinante de uma matriz.

 

Comando

Descrição

b=det(A)

Atribui à variável b o determinante da matriz A.

b=detopelp(A)*

Calcula o determinante da matriz A aplicando operações elementares até que a matriz esteja na forma triangular superior e atribui o resultado à variável 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]

 

eliminação 1:

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

 

A =

 

[  1,  2,  3]

[  0, -1, -1]

[  0,  1,  2]

 

Continua ? (s/n) s

eliminação 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