• Nenhum resultado encontrado

AULA 06 - MATRIZES

N/A
N/A
Protected

Academic year: 2021

Share "AULA 06 - MATRIZES"

Copied!
6
0
0

Texto

(1)

MATRIZES

Na última aula, uma breve introdução à manipulação de matrizes foi realizada. Na aula de hoje, a manipulação de vetores e matrizes será abordada em detalhes.

Como vimos, matrizes podem ser criadas a partir de atribuição direta, utilizando colchetes, ou através de indexação, conforme pode-se observar no exemplo abaixo.

clear all

A = [1 2 4;-5 -3 1]; B(4,2) = 10;

disp(A) disp(B)

O comando disp() pode ser utilizado para imprimir variáveis e texto na janela de comando, e será estudado em mais detalhes na próxima aula.

Além disso, pode-se criar um vetor utilizando o operador dois-pontos. clear all

C = 0:10;

D = 0 : 0.2 : 1; disp(C)

disp(D)

Esses exemplos são relativamente simples quando comparados a outros tipos de atribuições possíveis no MATLAB quando se trabalha com matrizes.

Estude o exemplo abaixo, onde atribuições mais complexas são utilizadas. clear all A = [ 0:6 ; -5:5:25]; B = [ 2 3 5 6; -2:1]; C = [-3 -5 3 2]; D = [A B] E = [B;C]

Além disso, é possível criar vetores e matrizes utilizando funções. Algumas das funções que podem ser utilizadas para criar vetores e matrizes serão apresentadas agora.

zeros()

A função zeros() no MATLAB cria matrizes onde todos os termos são, como o nome da função sugere, zeros. Seu funcionamento varia conforme os parâmetros passados para a função. Por exemplo, quando zeros(5) é executada, é retornado uma matriz 5x5 onde todos os elementos são zeros. De maneira análoga, zeros(2,5) retorna uma matriz 2x5 contendo somente zeros. Se mais dimensões são necessárias, basta adicioná-las separando-as com vírgulas na função zeros(). Execute comandos semelhantes aos abaixo apresentados.

mat = zeros(5) vet = zeros(1,5) zeros(4,1)

(2)

ones()

Esta função é análoga a função zeros(), porém retorna matrizes onde todos os elementos são uns (1). Repita os mesmos comandos executados anteriormente mudando a função utilizada de zeros() para ones().

eye()

Esta função retorna a matriz onde os elementos da diagonal são uns (1) e os demais elementos são zeros. Como realizado com a função ones(), modifique os comandos de forma a utilizar a função eye() e observe as matrizes geradas.

Todas as funções podem ser utilizadas para criar matrizes de classes numéricas diferentes, bastando adicionar como último parâmetro a classe numérica desejada. Observe essa possibilidade no exemplo abaixo.

clear all A = eye(3,'int8'); B = ones(3,2,'int32'); C = zeros(4,2,'uint64'); D = eye(1,10,'single'); E = eye(1); whos

Perceba que muitas funções no MATLAB são flexíveis não somente quanto ao tipo empregado como parâmetro mas também quanto à quantidade de parâmetros utilizados.

diag()

A função diag() é utilizada para a manipulação de diagonais de matriz, e seu funcionamento depende das dimensões dos parâmetros utilizados.

Caso o primeiro parâmetro seja uma matriz, a função diag() retorna uma diagonal especificada pelo segundo parâmetro da função (caso não seja utilizado o segundo parâmetro é retornado a diagonal principal). Estude e avalie a saída dos comandos.

clear all

A = [0:4;5:9;10:14;15:19;20:24] diag(A)

diag(A,1) diag(A,-2)

Caso o primeiro parâmetro seja um vetor, a função retorna uma matriz onde uma diagonal é formada pelos elementos do vetor. É possível especificar qual diagonal se deseja completar com os elementos do vetor utilizando novamente um segundo parâmetro.

clear all

vet = 1:6; diag(vet)

diag(vet) + diag(2:6,1)

(3)

triu() e tril()

As funções triu() e tril() retornam a matriz triangular acima ou abaixo da diagonal principal. Observe o que os comandos abaixo retornam.

clear all

A = [0:4;5:9;10:14;15:19;20:24] tril(A)

triu(A)

blkdiag()

A função blkdiag() retorna uma matriz formada pela concatenação de outras matrizes, fazendo a concatenação das matrizes na diagonal principal da matriz de retorno.

clear all

A = [1:3;5:7]

B = [[-3:0]' [1:4]'] C = blkdiag(A,B)

Finalmente, existem duas funções que retornam grandezas relacionadas ao tamanho de matrizes e vetores. São as funções length() e size().

length() Retorna o tamanho de um vetor.

size(

)

Retorna um vetor contendo o tamanho das dimensões de uma matriz.

A = [0:4;5:9;10:14;15:19;20:24;25:29]; v = 0:10; length(A) size(A) length(v) size(v)

I

NDEXAÇÃO DE

M

ATRIZES

Na aula passada foi apresentado a indexação simples de matrizes, porém, o processo de indexação de matrizes no MATLAB pode ser realizado utilizando-se vários índices de uma só vez. Isso permite que mais de um elemento seja acessado em uma única operação. Os índices utilizados no processo de indexação, no MATLAB, podem assumir mais de uma dimensão (podem ser vetores ou até mesmo matrizes). Isto é um pouco complexo em um primeiro momento e é melhor entendido estudando-se exemplos.

A = 1 : 0.2 : 2; A(1) A([1 2]) A([1 2 3]) A([1 4]) A(1:3) A(1:2:5)

Outro exemplo desse tipo de indexação pode ser observado na sequencia: A = [0:4;5:9;10:14;15:19;20:24];

A(2,5)

(4)

É possível ainda acessar todos os elementos de uma dada dimensão. Para realizar tal tarefa basta utilizar o operador dois-pontos (:) na dimensão que se deseja obter todos os elementos. Observe os exemplos.

A = [0:4;5:9;10:14;15:19;20:24];

A(:,2) %retorna todos os elementos da segunda coluna A(4,:) %retorna todos os elementos da quarta linha

É possível ainda obter os elementos de uma matriz de um dado índice até o último índice da dimensão, utilizando a palavra reservada end.

A = [0:4;5:9;10:14;15:19;20:24]; k = 3;

A(k:end,2) %retrona os elementos a partir de k da segunda coluna A(k:end,k:end)

Perceba que é possível utilizar variáveis no processo de indexação de matrizes.

O

PERAÇÕES COM

M

ATRIZES

O MATLAB suporta operações diretas com matrizes, utilizando os mesmos operadores utilizados para manipulação de escalares. Porém, deve-se atentar às regras básicas de álgebra linear, conforme estudado na aula passada. Além de permitir operações algébricas com matrizes, o MATLAB possui alguns operadores com função específica para matrizes, como o operador divisão (/) e barra-invertida (\), bem como funções padrão como a função inv(), que computa a inversa de uma matriz.

As operações básicas (soma, subtração e multiplicação) são análogas àquelas vistas no curso de álgebra linear, portanto não serão explicadas em demasia. Para avaliar essas operações execute os comandos abaixo.

clear all A = [1 2; 4 -1]; B = [-1 0; 1 1]; C = [1 2 3]; D = [3; 1; 4]; A*B B*A A + B A - B C * D D * C D * A D + C * D

O operador divisão (/) e barra-invertida (\) implementam operações diferentes daquelas imaginadas (a operação de divisão não é definida matematicamente para matrizes).

A expressão A\B implementa a operação matemática A−1⋅ enquanto a operação B A/B implementa a operação matemática 1

A B⋅ − . A primeira das expressões é usada amplamente para a solução de um sistema de equações lineares da forma A x⋅ =B, uma vez que multiplicando

(5)

ambos os lados da equação por A-1 se obtém: 1

x= A− ⋅ . Logicamente, deve-se relembrar dos B conceitos e conhecimentos angariados nos cursos de álgebra. O operador divisão ainda mantém sua função original quando manipulado com escalares.

É possível ainda (e é muito comum) a operação de matrizes "elemento por elemento". Imaginemos agora um vetor de tempo definido no MATLAB: t = 0 : 0.1 : 10;

Matematicamente, para calcular os valores de f(t) para uma função dada por 2

( )

f t = por t exemplo, deve-se, para cada instante t calcular t·t, ou seja, para t = 0, f(0) = 0·0, para t = 1, f(1) = 1·1=1, para t = 2, f(2) = 2·2=4 e assim por diante. Isto é, estamos multiplicando cada ponto do vetor tempo por ele mesmo para calcular f(t). É natural, matematicamente, que se tente escrever no MATLAB, então, o comando: f = t*t; ao se deparar com esta situação. Tente então executar os comandos sugeridos e observe o que ocorre.

t = 0 : 0.1 : 10; f = t*t;

Logicamente, o comando resultou em erro, pois não é possível, matematicamente, multiplicar duas matrizes-linha. Porém o problema em se computar t2 persiste. Portanto, o MATLAB permite a operação elemento por elemento entre matrizes. Essas operações são realizadas adicionando-se um ponto (.) antes da operação a ser executada. Estude atentamente a saída gerada pelos comandos abaixo.

A = [1 2; 3 4]; B = [2 3; 4 5];

A*B %multiplica as matrizes

A.*B %multiplicação elemento por elemento A/B %realiza a operação A*B^(-1)

A./B %divisão elemento por elemento A.^B

Portanto, para computar os valores de f(t) utilizando o MATLAB deve-se utilizar os comandos abaixo.

t = 0 : 0.1 : 10; f = t.*t;

f2 = t.^2; %também funciona

Finalmente, existem muitas funções para a manipulação ou processamento de matrizes no MATLAB, algumas são apresentadas no código de exemplo na sequencia deste material.

A = [1 2; 3 4];

t = linspace(-5,5,100); %cria um vetor de -5 a 5 com 100 pontos vet = [5 5 3 -2 3 -1];

mean(vet) %calcula média de vetor

max(vet) % valor máximo (e pode retornar o índice: ver "help") min(vet) % valor mínimo (e pode retornar o índice: ver "help") sort(vet) %ordena vetor

(6)

D

ELETANDO

E

LEMENTOS DE

M

ATRIZES

No MATLAB ainda é possível deletar elementos, utilizando a abertura e fechamento de colchetes []. Observe o exemplo.

A = rand(4); %cria uma matriz randômica com elementos de zero a um V = rand(1,5); A A(:,1) = [] V V([1 3]) = []

O

COMANDO

HELP

O MATLAB possui um comando dedicado a apresentar tópicos de ajuda sobre funções. Portanto, virtualmente para qualquer função é possível obter informações de seu funcionamento digitando help nome_da_função. Por exemplo, para informação sobre a função mean() basta digitar na janela de comando help mean. Além disso, o MATLAB possui uma ferramenta dedicada para ajuda, para acessá-la basta digitar helpdesk na janela de comando.

E

XERCÍCIOS

Exercício 1 Leia a saída apresentada pelo comando help para todas as funções apresentadas nesta aula.

Exercício 2 Escreva um código para obter um vetor com os valores de

10

( ) t cos( ) t sen( ) 2 t 1

f t =e− ⋅ ω⋅ +t e− ⋅ ω⋅ +t e− + para um vetor de tempo de 0 até 5 com 1000 pontos e para ω = 5rad/s. Pode-se computar ex no MATLAB utilizando exp(x).

Exercício 3 Equacione o circuito abaixo algebricamente utilizando análise de malhas e resolva o

sistema utilizando o MATLAB para obter as correntes em todos os resistores (sentido indicado).

Com correntes de malha no sentido horário, obtemos o sistema:

1 2 1 2 2 1 2 1 2 3 4 2 4 3 4 2 4 5 3 2 ( ) ( ) 0 ( ) R R I R I V R I R R R I R I R I R R I V + − =   − + + + − =  − + + = − 

Referências

Documentos relacionados

O Superintendente Municipal de Trânsito e Transporte da Prefeitura Municipal de VERA CRUZ e Autoridade de Trânsito deste Município, com fulcro no artigo 281 e 282 do Código

Left ven - tricular function in patients with and without myocardial infarction and one, two oi^ three vessel coronary artery disease. Changes in left ventricular function produced

Os países participantes deverão proporcionar um EFP que aumente a empregabilidade das pessoas (tanto a curto como a longo prazo), que lhes permita desenvolver carreiras de

 Para criar uma classe extendida, ou derivada de outra, deve ser utilizada a palavra reservada extends, como pode ser visto no exemplo seguinte:.. class Novaconta extends conta {

Abaixo podemos ver um exemplo de função que recebe um vetor (matriz linha ou coluna) como parâmetro e retorna a sua média.. function me = media(vetor) me

Esse segundo parâmetro tem um valor default de zero; com isso, quando chamamos a função com apenas um parâmetro (a string), recebemos de volta todos os seus prefixos com tamanho

[r]

Ficou evidente que todos após a exploração conseguiram enxergar que ao modificarem os parâmetros “a”, “b” e “c”, o gráfico da função aumentava ou diminuía sua