Matlab Octave

Matlab Octave

(Parte 1 de 3)

Mini-curso de MATLAB e Octave para Cálculo Numérico

PET - Engenharia de Computação

Universidade Federal do Espírito Santo http://www.inf.ufes.br/~pet

Sumário

1.1 Matlab4
1.2 Octave4

1 Introdução 4

2.1 Soma5
2.2 Subtração5
2.3 Multiplicação5
2.4 Divisão Direta6
2.5 Divisão indireta6
2.6 Exponenciação6
2.7 Módulo6

2 Operações simples entre escalares 5 3 Representação de matrizes e vetores no MATLAB e Octave 8

4.1 Soma e subtração1
4.2 Multiplicação de uma matriz por um escalar1
4.3 Multiplicação entre matrizes12
4.4 Divisão direta de matrizes12
4.5 Divisão indireta de matrizes13

4 Operações simples entre matrizes 1

com b sendo um escalar13
4.7 Operação elemento por elemento13
4.8 Transposta de uma matriz14
4.9 Posto de uma matriz14
4.10 Número de condição de uma matriz14
4.1 Maior elemento15
4.12 Tamanho da matriz16
4.13 Tamanho do vetor17
4.14 Vetor igualmente espaçado17
4.15 Geração de matrizes18
4.16 Módulo dos elementos da matriz ou vetor21

4.6 Exponenciação Ab 5 Resolução de sistemas lineares 23

6.1 Raízes reais26
6.2 Avaliação de polinômio26
6.3 Interpolação polinomial27
6.3.1 Interpolação pela resolução de um sistema linear27
7.1 Gráficos 2-D30
7.1.1 Coordenadas Cartesianas30
7.1.2 Coordenadas Polares36
7.2 Gráficos 3-D38

7 Gráficos em MATLAB e Octave 30

8.1 Loop FOR4
8.2 Loop WHILE4
8.3 Comando BREAK45
8.4 Comando IF45

8 Fluxo de Controle 4

9.1 Arquivo Script46
9.2 Arquivo Função50

1 Introdução

1.1 Matlab

O MATLAB (de MATrix LABoratory) é um programa produzido pela Mathworks, Inc. (maiores informações em http://www.mathworks.com e a grosso modo serve para trabalhar com matrizes e números complexos da mesma forma como uma calculadora trabalha com números reais. Além disso, ele possui recursos de programação, agindo como uma linguagem procedural, semelhante a C, porém voltada para processamento numérico intensivo. Ele possui também programas de projeto de controle e recursos gráficos.

O MATLAB fornece também um conjunto de aproximadamente 200 subprogramas que solucionam problemas diversos tais como: álgebra matricial, aritmética com complexos, sistemas de equações lineares, determinação de autovalores e autovetores, solução de equações diferenciais, solução de equações não lineares, além de representar e de dar subsídios (sub-módulo) para a análise e para síntese de sistemas lineares e não lineares.

A interface do MATLAB é composta basicamente por uma janela de comandos, com um prompt característico (>>).

1.2 Octave

O Octave é uma linguagem de programação de alto nível, destinada ao tratamento de problemas para computação numérica. Ele é um Software Livre, produzido por uma grande equipe chefiada por John W. Eaton. Maiores informações disponíveis no site oficial do projeto: http://www.gnu.org/software/octave/

O Octave pode efetuar cálculos aritméticos com números reais, escalares complexos e matrizes; resolver sistemas de equações algébricas; integrar funções sobre intervalos finitos e infinitos e integrar sistemas de equações diferenciais ordinárias e diferenciais algébricas.

A interface com o programador é basicamente através de uma linha de comando. Ele ainda gera gráficos 2D e 3D, utilizando o Gnuplot.

O Octave é em grande parte compatível com o MatLab. Os comandos apresentados nessa apostila servem tanto para Matlab quanto para o Octave. Para iniciar o Octave, apenas digite octave no termnial do Linux.

2 Operações simples entre escalares

Conforme dito, um escalar é uma matriz 1x1 em MATLAB e Octave. As principais operações entre dois escalares serão apresentadas a seguir.

2.1 Soma A operação "a + b"realiza a soma entre dois escalares. O exemplo 1 exibe sua execução.

Exemplo 1: Soma entre dois escalares

2.2 Subtração O operador - é responsável pela subtração. O próximo exemplo mostra esta operação.

Exemplo 2: Subtração entre dois escalares

2.3 Multiplicação

Para realizar a multiplicação de dois escalares utiliza-se o operador "* ", conforme o exemplo abaixo.

Exemplo 3: Multiplicação entre dois escalares

2.4 Divisão Direta A divisão direta é realizada com uso da barra "/ ". Veja o exemplo a seguir.

Exemplo 4: Divisão direta entre dois escalares

2.5 Divisão indireta

A divisão indireta é a divisão realizada da direita para esquerda, ou seja, o divisor é primeiro elemento. Nesse caso, utiliza-se o operador "\ ". O exemplo 5 mostra a divisão indireta de dois escalares.

Exemplo 5: Divisão indireta entre dois escalares

2.6 Exponenciação

Para efetuar ab utiliza-se "∧ "entre a base e o expoente. O exemplo 6 ilustra como realizar a exponenciação de escalares.

Exemplo 6: Exponenciação entre dois escalares

2.7 Módulo

A função "abs"retorna o módulo de um número. O exemplo 7 ilustra o uso da função abs.

Exemplo 7: Módulo de escalar

3 Representação de matrizes e vetores no MATLAB e Octave

MATLAB trabalha essencialmente com um tipo de objeto, uma matriz retangular numérica (real ou complexa). Em algumas situações, denominações específicas são atribuídas a matrizes 1 por 1, que são os escalares, e a matrizes com somente uma linha ou coluna, que são os vetores.

A maneira mais fácil de se declarar matrizes é fazendo a explicitação da lista de elementos na linha de comando. Uma matriz pode ser criada, atribuindo a uma variável, valores representados entre colchetes, seguidos de ponto-e-vírgula. Os elementos das linhas são separados por espaços ou vírgulas, e as colunas, com ponto-e-vírgula. O exemplo 8 mostra formas de representação de uma matriz 3x3.

Exemplo 8: Formas de declaração de matrizes

Um vetor nada mais é que uma matriz com uma de suas dimensões igual a 1, assim ele pode ser criado da mesma forma que uma matriz. No exemplo 9, tem-se um vetor-linha de dimensão 3, ou seja uma de uma matriz 1x3:

Exemplo 9: Um vetor linha

O exemplo 10 é de um vetor-coluna de dimensão 3, ou matriz 3x1.

Exemplo 10: Um vetor coluna

Vale destacar que, da forma como foram apresentados a matriz ou o vetor, eles são armazenados na memória do programa, mas se quisermos que eles apareçam na tela, ou seja, visualizar o conteúdo da variável, devemos omitir o ponto-e-vírgula depois dos colchetes.

Depois que o vetor é criado, pode-se alterar um elemento acessando diretamente a sua posição. Observe o exemplo a seguir:

Exemplo 1: Acesso a uma posição de um vetor

No comando v(2) = 0, v é o nome da variável vetor e 2 é a posição cujo valor deve ser alterado, no caso para 0.

Pode-se também acessar uma posição inexistente no vetor. Nesse caso, as posições que não existiam até a posição acessada são automaticamente anuladas. O exemplo 12, mostra o que acontece quando é acessada a posição 5 do vetor do exemplo anterior.

Exemplo 12: Acesso a uma posição inexistente de um vetor

Repare que a nova dimensão do vetor agora é 5, exatamente a posição que não existia antes do acesso, e que a posição 4 foi preenchida com 0, pois não existia antes do acesso a uma posição inexistente do vetor.

Uma operação interessante é criar uma matriz usando uma já definida. No exemplo 13, a matriz z é composta de três elementos, sendo que um deles é uma matriz 1xn, ou vetor linha.

Exemplo 13: Criando uma matriz com um vetor linha como elemento

A matriz resultante é uma matriz coma a dimensão 7, que é devido aos dois elementos não pertencentes ao vetor v mais a dimensão deste, que é 5.

4 Operações simples entre matrizes

4.1 Soma e subtração

A soma e a subtração de duas matrizes seguem a mesma lógica para os escalares, ou seja, é efetuada elemento por elemento. O exemplo 14 mostra essas operações.

Exemplo 14: Adição e subtração de entre duas matrizes 3x3

Vale lembrar que, caso as matrizes envolvidas sejam de dimensões diferentes, o programa acusará erro.

4.2 Multiplicação de uma matriz por um escalar

Na multiplicação de uma matriz por um escalar, cada um dos elementos da matriz é multiplicado por este. O operador utilizado no comando é mesmo que na multiplicação entre escalares. Veja o próximo exemplo, no qual A é a mesma matriz do tópico anterior.

Exemplo 15: Multiplicação de uma matriz por um escalar

4.3 Multiplicação entre matrizes

Na multiplicação entre duas matrizes, A*B, o elemento i x j da matriz resultante é o somatório dos produtos entre os elementos das linhas i da primeira matriz pelos elementos das colunas j da segunda matriz. É necessário que o número de colunas da matriz A seja igual ao número de linhas de B, caso contrário o programa acusará erro. A multiplicação entre duas matrizes pode ser vista no exemplo 16.

Exemplo 16: Multiplicação entre duas matrizes

As matrizes A e B são as mesmas do exemplo 4.1.

4.4 Divisão direta de matrizes

A divisão direta (A/B) entre duas matrizes é equivalente a multiplicar a matriz A pela inversa de B. No exemplo 17, tem-se a divisão direta entre duas matrizes.

Exemplo 17: Divisão direta entre duas matrizes

4.5 Divisão indireta de matrizes

A divisão indireta entre duas matrizes (A\B) é equivalente a multiplicar a matriz B pela inversa de A. O exemplo abaixo mostra o resultado dessa operação entre as mesmas matrizes do exemplo anterior.

Exemplo 18: Divisão indireta entre duas matrizes

4.6 Exponenciação Ab com b sendo um escalar

Ab representa a multiplicação com b fatores iguais à matriz A. No exemplo abaixo, é

Exemplo 19: Operação de exponenciação

4.7 Operação elemento por elemento

O operador "."realiza uma dada operação, entre duas matrizes n x m, elemento por elemento. Se C = A.<operação>B, então cij = aij <operação> bij. Observe o exemplo 20.

Exemplo 20: Multiplicação entre duas matrizes, elemento por elemento

4.8 Transposta de uma matriz

O comando "'"calcula a transposta de uma matriz qualquer, ou seja, transforma as linhas em colunas, e vice-versa. No exemplo 21, é encontrada a transposta da matriz A vista no tópico anterior.

Exemplo 21: Transposta de uma matriz

4.9 Posto de uma matriz

O comando "rank"calcula o posto de uma matriz qualquer. No exemplo 2, é encontrado o posto de uma matriz.

Exemplo 2: Posto de uma matriz

4.10 Número de condição de uma matriz

O comando "cond"calcula o número de condição de uma matriz qualquer. No exemplo 23, é encontrado o número de condição da matriz B usada no exemplo anterior.

Exemplo 23: Número de condição de uma matriz

4.1 Maior elemento

O comando "max"retorna o maior elemento de cada coluna. No exemplo 24, são encontrados os maiores elemetos de cada coluna de uma matriz.

Exemplo 24: Maior valor de cada coluna

Outra forma de usar o comando "max"é passando dois argumentos de entrada, como no exemplo 25. O primeiro argumento é uma matriz ou um vetor e o segundo é um escalar. O comando irá comparar os elementos da matriz ou do vetor com o escalar de entrada e trocará pelo escalar os elementos menores que ele.

Exemplo 25: Usando a função "max"para comparar elementos com um escalar fixo

Existe mais uma forma de usar esse comando. Se for usado sobre uma matriz retorna o maior elemento da coluna e a linha que o elemeto está. Se for usado sobre um vetor retorna o maior elemento e sua posição. No exemplo 26 em 'x' é armazenado o maior valor de cada coluna da matriz e em 'xi' a linha de cada elemento. No exemplo 27 em 'x' é armazenado o maior elemento do vetor e em 'xi' a sua posição.

Exemplo 26: Outra forma de usar a função "max"sobre matriz

Exemplo 27: Outra forma de usar a função "max"sobre vetor

4.12 Tamanho da matriz

O comando "size"retorna a quantidade de linha e de colunas de uma matriz. No exemplo 28, são encontrados a quantidade de linhas e colunas de uma matriz.

Exemplo 28: Quantidade de linhas e colunas

4.13 Tamanho do vetor

O comando "length"retorna a quantidade de elementos de um vetor. No exemplo 29, é encontrado a quantidade de elementos de um vetor.

Exemplo 29: Quandade de elementos

4.14 Vetor igualmente espaçado

O comando "linspace"gera um vetor igualmente espaçado tendo uma base e um limite e a quantidade de elementos desejados. No exemplo 30, é gerado um vetor igualmente espaçado.

Exemplo 30: Vetor igualmente espaçado

4.15 Geração de matrizes

• A=ones(n,m): Retorna uma matriz n por m com todos os elementos sendo '1'. No exemplo 31, é gerada a matriz A 2 por 3.

Exemplo 31: Matriz de uns

Essa função pode ser usada só com um parâmetro gerando uma matriz quadrada como no exemplo 32.

Exemplo 32: Outra de forma de usar a função "ones"

• A=zeros(n,m): Retorna uma matriz n por m com todos os elementos sendo '0'. No exemplo 3, é gerada a matriz A 3 por 2.

Exemplo 3: Matriz de zeros

Essa função pode ser usada só com um parâmetro gerando uma matriz quadrada como no exemplo 34.

Exemplo 34: Outra forma de usar a função "zeros"

• A=eye(n): Retorna uma a matriz identidade de ordem 'n'. No exemplo 35, é gerada a matriz A de ordem 3.

Exemplo 35: Matriz identidade

Essa função pode ser usada com dois parâmetros, indicando o número de linhas e colunas. No exemplo 36, é gerada uma matriz A 3 por 2.

Exemplo 36: Outra forma de usar a função "eye"

• A=hilb(n): Retorna a matriz de Hilb de ordem n. No exemplo 37, é gerada a matriz de Hilb de ordem 3.

Exemplo 37: Matriz de Hilb

• A=rand(n,m): Retorna a matriz n por m com seus elementos gerados aleatoriamente entre 0 e 1. No exemplo 38, é gerada a matriz A 2 por 3.

Exemplo 38: Matriz aleatória

Essa função pode ser usada só com um parâmetro gerando uma matriz quadrada como no exemplo 39.

Exemplo 39: Outra forma de usar a função "rand"

• V=diag(A,n): Retorna um vetor coluna com os elementos da diagonal 'n' da matriz B. Se a diagonal desejada for a diagonal principal, o 'n' será indicado por '0'. Caso seja uma diagonal abaixo da diagonal principal o 'n' será um número negativo, sendo a diagonal logo abaixo da principal indicada por '-1', e se for acima, o 'n' será um número positivo, sendo a diagonal logo acima da principal indicada por '1'. No exemplo 40, é gerado o vetor V com os elementos da diagonal '-1' da matriz A.

Exemplo 40: Vetor com a diagonal

Essa função pode ser usada só com um parâmetro, gerando um vetor coluna contendo a diagonal principal, ou sobre vetores, gerando uma matriz diagonal, como no exemplo 41.

Exemplo 41: Outras formas de usar a função "diag"

4.16 Módulo dos elementos da matriz ou vetor

O comando "abs"que é usado para determinar o módulo de um escalar também pode ser usado sobre matrizes e vetores como no exemplo 42. Quando usado sobre matrizes ou vetores ele retornando uma matriz ou vetor com o módulo de todos os elementos.

Exemplo 42: Módulo dos elementos de uma matriz ou vetor

5 Resolução de sistemas lineares Considere o sistema linear abaixo:

a11x1 + a12x2 ++ a1nxn = b1
a21x1 + a22x2 ++ a2nxn = b2
an1x1 + an2x2 ++ annxn = bn

Esse sistema pode ser escrito, na forma de matrizes, como A*x = b, tal que:

Figura 1: Sistema Ax = b

Pode-se calcular a solução do sistema diretamente, usando os comandos x = A \ b ou x = inv(A)*b. Ambos os comandos fazem a divisão de b por A ou a multiplicação da inversa de A por b.

Na resolução de sistemas lineares por métodos iterativos, é interessante determinar se a solução converge. Nesse caso, deve-se considerar os autovalores da matriz A.

• inv( A ): Calcula a inversa da matriz quadrada A; 1

Exemplo 43: Cálculo da inversa de uma matriz

• eig( A ): Retorna um vetor com os autovalores da matriz A;

1 Uma matriz quadrada é aquela que possui o mesmo número de linhas e de colunas.

Exemplo 4: Cálculo de autovalores de uma matriz

• [V, D] = eig( A ): Produz matrizes de autovalores (D) e auto-vetores (V) da matriz A, de forma que A*V = V*D. A matriz D é a forma canônica de A menos uma matriz diagonal com os autovalores de A na diagonal principal. As colunas da matriz V são os auto-vetores de A;

Exemplo 45: Cálculo de auto-vetores e autovalores de uma matriz

• det( A ): Calcula o determinante da matriz A;

Exemplo 46: Cálculo do determinante de uma matriz

• fliplr( A ): Troca o lado esquerdo pelo lado direito de uma matriz;

Exemplo 47: Troca de colunas de uma matriz

• [L, U, P] = lu( A ): Na resolução de um sistema linear pelo método LU, pode-se usar esse comando, que decompõe A nas matrizes L (triangular inferior com os elementos da diagonal iguais a 1), U (triangular superior) e P (matriz da permutação).

Exemplo 48: Decomposição LU de uma matriz

Os polinômios no Octave/MatLab são representados por um vetor, cujos coeficientes das potências em ordem decrescente são os elementos do vetor. No exemplo 49 temos a representação do polinômio x2 + x + 1 e do polinômio 2x2 − 5x.

(Parte 1 de 3)

Comentários