A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Vectores e Matrizes Aplicações à Engenharia Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2007/2008.

Apresentações semelhantes


Apresentação em tema: "Vectores e Matrizes Aplicações à Engenharia Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2007/2008."— Transcrição da apresentação:

1 Vectores e Matrizes Aplicações à Engenharia Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2007/2008

2 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 2 Tipo de Dados Primitivo: a Matriz Ao contrário da generalidade das linguagens de programação, o Octave / MATLAB assume a matriz como o tipo básica de uma variável. Por exemplo, ao se fazer a atribuição de um valor a uma variável V, simples, o Octave está de facto a atribuir esse valor a todos os elementos de uma matriz com uma linha e uma coluna. Para obtermos a dimensão de uma variável X, quer seja simples, vector ou matriz, podemos usar as funções pré- definidas rows(X) e columns(X). No caso de vectores, linha ou coluna, o número de colunas e linhas é retornado pela função lenght(V). >> V = 5 >> V(1) ans = 5 >> V(1,1) ans = 5 >> X = 5 >> columns(X) ans = 1 >> M = [1 ; 2]; >> cols(M) ans = 2

3 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 3 Matrizes De facto, as funções aplicáveis a uma variável simples são sempre distribuídas por todos os elementos de uma matriz. Por exemplo, se a função logaritmo receber como parâmetro um vector ou matriz, retorna uma estrutura idêntica como resultado. Naturalmente, esta atribuição pode ser feita elemento a elemento. Assim, sendo V a anterior matriz, a instrução log(V)/log(2) é equivalente ao programa for i = 1:rows(V) for j = 1:columns(V) X(i,j) = log(V(i,j))/log(2) endfor >> V = [1,2, 4; ] V = >> X = log(V)/log(2) X =

4 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 4 União e Seleccção de Matrizes O facto de a estrutura matriz ser uma primitiva da linguagem Octave permite que a formação de matrizes seja feita não só a partir de elementos simples, como também o seja a partir de vectores ou matrizes. Assim, a partir de dois vectores 1*3, A = [1,2,3] e B = [4,5,6], pode constituir-se Similarmente, a selecção de elementos de uma matriz não tem de ser feita elemento a elemento, podendo ser seleccionadas submatrizes mais complexas. Por exemplo, % uma matriz de 2*3 >> C = [A;B] C = % um vector de 1*6 >> D = [A,B] C = >> S = V(2:3, 1:2) S = >> T = V(:,2:3) T = >> V = [1,2,3; 4 5 6; 7 8 9; 3 6 9] V = S T

5 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 5 Selecção de Sub-Matrizes De notar que esta selecção pode ser feita elemento a elemento, através de 2 ciclos encadeados, havendo necessidade de proceder a uma conversão de índices. Para a matriz anterior de 4*3, a instrução S = V(2:3, 1:2) é equivalente ao programa De notar a utilização de expresssões booleanas compostas, obtidas pela aplicação de operadores booleanos (& - e, | - ou e ! – não) a relações de comparação simples (==, >=,, <, !=). De notar ainda a mudança de índices entre a matriz V e a sua sub-matriz S: i(S) = i(V)+1; j(S) = j(V). for i = 1:rows(V) for j = 1:columns(V) if i >= 2 & i = 1 & j <= 2 s(i-1,j) = v(i,j) endif endfor V S

6 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 6 Funções de Agregação sobre Vectores Por vezes estamos interessados em conhecer propriedades do conjunto dos elementos de um vector, tais como os seus máximo, mínimo ou soma. Estes valores agregados podem ser calculados por funções que utilizam ciclos, em que se vai alterando uma variável de acumulação. Por exemplo, para calcular o máximo ou a média de um vector, podem utilizar-se as seguintes funções Na realidade não é necessário definir estas funções, pois já existem predefinidas as funções max(V), min(V), sum(V), prod(V), mean(X). Estas e outras funções agregadas podem ser obtidas indirectamente, como é o caso da média dos valores de um vector V: mean(X)= sum(V)/length(V). function m = maximo(V); m = -inf; for j = 1:length(M) m = max(m, V(j)); endfor endfunction function s = soma(V); s = 0; for j = 1:length(M) s = s + V(j); endfor endfunction

7 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 7 Soma de Vectores Em geral, qualquer operação entre valores numéricos pode ser estendida a todos os valores corespondentes de vectores e matrizes antecedendo o operador por um ponto, i.e. através do operador.. Desta forma a soma de dois vectores V1 e V2, que implementa a conhecida regra do paralelograma, pode ser especificada através da operação V = V1.+ V2 Por ser a matriz um tipo de dados primitivo, e por estar definida a soma de matrizes, a mesma operação pode ser, no caso da soma, ser especificada como V = V1 + V2 que faz o overload do operador "+. >> V1 = [5,4] >> V2 = [7,-3] >> V = V1 + V2 ans = [12 1] V1 V2 V

8 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 8 Produto Interno de Vectores Para além da soma de vectores, o produto interno de vectores é igualmente muito utilizado em Engenharia, por exemplo, para determinação do ângulo entre dois vectores e do módulo (valor absoluto, intensidade) de um vector. Formalmente o produto interno entre dois vectores com o mesmo número de elementos, A e B, (denotado por A B) é a soma do produto de todos os elementos correspondentes. Pode pois ser especificado pela função prod_int abaixo (que pressupõe 2 vectores linha com o mesmo número de colunas) Como será de esperar, este produto interno pode ser obtido directamente através da composição das funções sum e o produto elemento a elemento, isto é X = prod_int(V1,V2) é equivalente a X = sum( V1.* V2) function p = prod_int(V1, V2); p = 0 for j = 1:columns(V1) p = p + V1(j)* V2(j); endfor endfunction

9 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 9 Médias Ponderadas É muito vulgar pretender-se obter a média de um conjunto de valores, ponderada pela sua importância. Por exemplo, a nota final é a média ponderada entre a nota prática e a nota escrita (exame), sendo os pesos relativos, 25% e 75%, respectivamente.. Como é sabido, a média de k valores, v 1.. v k, com pesos relativos p 1.. p k define-se através da expressão Dados os vectores V e P, contendo respectivamente os valores e os pesos, a média ponderada pode ser obtida através da função ou simplesmente através da expressão m = sum(V.* P)/sum(P) function m = media_ponderada(V, P); x = 0; s = 0; for j = 1:columns(V) x = x + V(j)* P(j); s = s + P(j) endfor m = x/s endfunction

10 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 10 Módulo e Ângulo entre Vectores Para além da soma de vectores, o produto interno de vectores é igualmente muito utilizado em Engenharia. Por exemplo, o módulo de um vector A = [a 1, a 2, a 3,..., a n ], é definido como |A| = (a a a n 2 ) 1/2 e portanto, a função vec_mod pode ser definida como Para definir, na função ang_vec, o ângulo entre dois vectores A e B, basta notar que A B = | A | | B | cos( ), e portanto = arccos(A B / (| A | | B | )), donde function p = mod_vec(V); p = sqrt(prod_int(V,V)) endfunction function a = ang_vec(V1,V2); % retorna ângulo em graus M = prod_int(V1,V2)) cos = M /(mod_vec(V1) * mod_vec(V2)) a = acos(cos)*180/pi endfunction

11 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 11 Módulo e Ângulo entre Vectores Exemplo: Um corpo é submetido a duas forças, F1 e F2. –F1 = 2 e x -3 e y + 4 e z ; F2 = 1 e x + 2 e y - 2 e z Qual a intensidade (módulo) de cada uma das forças, qual o ângulo que essas forças fazem entre si, e qual a força resultante, bem como a sua intensidade (Módulo). F1 = [2 -3 4], F2 = [1, 2, -2] >> M1 = mod_vec(F1,F1), M2 = mod_vec(F2) M1 = M2 = >> F = F1 + F2, M = mod_vec(F) F = % vector [3 -1 2] M = >> alfa = ang_vec(F1,F2) % em graus alfa =

12 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 12 Filtros Tipicamente, as expressões booleanas são usadas para decidir condições de entrada e saída de execuções condicionais e/ou iterativas. Na realidade, as expressões booleanas são avaliadas no conjunto {FALSE, TRUE} que no Octave coincide com o conjunto {0,1} de valores numéricos, o que permite trocar execuções condicionais por filtros. Exemplo: Dado um valor numérico x, atribuir a y esse valor, caso seja maior que 5, ou 0, no caso contrário. Este problema pode ser resolvido através de (pelo menos) 2 maneiras distintas. y = x * (x > 5) Filtro if x > 5 y = x else y = 0 endif; Execução Condicional

13 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 13 Filtros em Vectores A filtragem de elementos pode ser feita naturalmente para todos os elementos de um vector, utilizando a extensão do operador de filtragem (geralmente a multiplicação, *) pelo correspondenete para todos os elementos do vector (i.e..*). Exemplo: Determinar a soma de todos os elementos de um vector que sejam pares mas não múltiplos de 6. 1.Começamos por definir as funções booleanas par e múltiplo de 6. 2.Podemos agora utilizá-las em expressões/filtros booleanos function p = div_2(x) p = (rem(x,2) == 0) endfunction; Function p = div_6(x) p = (rem(x,6) == 0) endfunction; function s = sum_esp(X) p = sum(X.* (div_2(X) & !div_6(X)) endfunction;

14 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 14 Matrizes As operações descritas para vectores são na generalidade extensíveis a matrizes, com várias linhas e colunas. Por exemplo, –a matriz A pode ser dobrada através da operação A*2 –duas matrizes A e B com o mesmo número de linhas e colunas podem ser somadas quer através da operação A+B quer através de A.+B. Existem no entanto algumas diferenças nas operações de agregação (max, min, sum, e prod) que não retornam os valores agregados de todos os elementos da matriz, mas os agregados, coluna a coluna. Assim para se obter os valores agregados de toda a matriz deverá repetir-se a operação desejada, primeiro para agregação das colunas e depois para agregação da linha resultante. A = [ 1 2 3; 8 5 2]; >> sum(A) ans = >> sum(sum(A)) ans = 21

15 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 15 Multiplicação de Matrizes Sendo a matriz o tipo de dados primitivo, o Octave implementa, como operação primitiva a multiplicação de matrizes. Dadas duas matrizes A e B, com dimensões m*k e k*n, o resultado é uma matriz C de dimensões m*n com elementos Naturalmente, esta operação poderia ser igualmente obtida pela função mult_mat function C = mult_mat(A,B) for i = 1: rows(A) for j = 1: columns(B) C(i,j) = 0; for h = 1: columns(A) C(i,j) = C(i,j)+ A(i,h)*B(h,j); endfor endfunction

16 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 16 Multiplicação de Matrizes Exemplo: >> A = [ ; ; ] A = >> B = [ 1 2; 3 4; 5 6 ; 7 8] B = >> C = A*B C = % 50 = 1*1 + 2*3 +3*5 + 4* >> D = (C == mult_mat(A,B)) D =

17 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 17 Transposição de Matrizes Em engenharia, a multiplicação de matrizes tem várias aplicações práticas. Para além da resolução de sistemas de equações, pode ser ainda utilizada na implementação dos produtos interno e externo de vectores (e ainda para rotação de vectores). Para o produto interno, interessa definir inicialmente a operação de transposição de matrizes, que informalmente corresponde a trocar as linhas pelas colunas. Pode ser especificada formalmente através da função transp(A) definida abaixo. Em Octave esta operação é primitiva, e é denotada pelo operador, posfixo, ou seja A é equivalente a transp(A) function B = transp(A) for i = 1: rows(A) for j = 1: columns(A) B(j,i) = A(i,j); endfor endfunction A = A=

18 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 18 Produto Interno Para se obter o produto interno de dois vectores linha V1 e V2 com k elementos, basta notar que este produto pode ser obtido através da multiplicação da matriz V1 (1*k) com a matriz transposta de V2 (k*1). Igualmente a média dos valores de um vector V, ponderada pelos pesos de outro vector P, pode ser obtida através da operação V * P/sum(P) >> A = [ 1 3 5] A = >> P = [ 5 2 1] P = >> C = A * P C = 16 >> Mp = A * P/sum(P) Mp = 2

19 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 19 Produto Externo de 2 Vectores Um outro produto de vectores (definido em espaços 3D) usado em Engenharia é o produto externo de dois vectores V1 e V2, V1 V2, definido como o vector V, com módulo igual ao produto dos módulos dos vectores V1 e V2 pelo seno do ângulo formado entre eles, com direcção perpendicular a ambos os vectores e com sentido definido pela regra do saca-rolhas. Em particular este produto é usado para determinar a força exercida por uma carga eléctrica sujeita a uma força magnética, tal como acontece nos tubos de raios catódicos (CRT) usados nos antigos monitores de televisão. Para obtermos este produto é conveniente a utilização de matrizes, da forma seguinte º = abs(1*2*sin(120*pi/180))

20 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 20 Produto Externo de 2 Vectores Denotando por x, y e z os vectores unitários dos repectivos eixos, e de acordo com a definição, temos –x x = y y = z z = 0 (pois x faz um ângulo de 0º com x –x y = z ; x z = - y; y z = x (regra do saca-rolhas) ; –y x = - z ; z x = y ; z y = - x (regra do saca-rolhas) Sendo o produto externo distributivo em relação à soma, dados dois vectores A = a x x + a y y + a z z e B = b x x + b y y + b z z o seu produto externo é dado por A B = (a x x + a y y + a z z ) ( b x x + b y y + b z z) = (a y b z - a z b y ) x + (a z b x - a x b z ) y + (a x b y - a y b x ) z que pode ser obtido pela multiplicação do vector A pela matriz M abaixo indicada x y z [a x a y a z ] 0 -b z b y = [ a y b z -a z b y a z b x - a x b z a z b x -a x b z ] b z 0 -b x -b y b x 0 M

21 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 21 Produto Externo de 2 Vectores O produto externo de dois vectores pode pois ser definido através da função Por ser muito utilizado, o produto externo (cross-product em inglês) é disponibilizado em Octave pela função primitiva cross. Assim, 0 -b z b y b z 0 -b x -b y b x 0 function P = prod_ext(A,B) M = zeros(3,3); M(1,2) = -B(3); M(1,3) = B(2); M(2,1) = B(3); M(2,3) = -B(1); M(3,1) = -B(2); M(3,2) = B(1); P = A * M; endfunction >> A = [ ]; B = [ ]; >> C = cross(A,B) C = >> D = prod_ext(B,A) D = % A B = - B A

22 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 22 Matrizes e Sistemas de Equações Uma outra aplicação muito importante de matrizes em engenharia (e não só) é na resolução de sistemas de equações lineares. Um sistema de n equações lineares a n incógnitas, pode ser representado na forma matricial por a 11 x1 + a 12 x a 1n x n = b 1 a 21 x1 + a 22 x a 2n x n = b 2 A X = B..... a n1 x1 + a n2 x a nn x n = b n em que A é uma matriz n*n, e X e B são vectores coluna com n elementos, isto é a 11 a a 1n a 21 a a 2n..... a n1 a n2... a nn x 1 x 2... x n b 1 b 2... b n *=

23 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 23 Matrizes e Sistemas de Equações Um tal sistema ficará resolvido se se colocar na forma 1 x1 + 0 x x n = s 1 0 x1 + 1 x x n = s 2 M * A * X = M * B x1 + 0 x x n = s n I * X = S o que pode ser obtido através da multiplicação de uma matriz M em ambos os lados da equação. Como M * A = I, a matriz M é a matriz inversa da matriz A. De notar que a multiplicação de matrizes não é comutativa, pelo que a multiplicação de B por M à esquerda, M * B, é diferente da multiplicação à direita, B * M, ou seja M * B B * M m 11 m m 1n m 21 m m 2n..... m n1 m n2... m nn * = a 11 a a 1n a 21 a a 2n..... a n1 a n2... a nn

24 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 24 Matrizes e Sistemas de Equações Existem várias formas de inverter uma matriz. Sendo a matriz um tipo de dados primitivo no Octave a operação de inversão de uma matriz A pode ser invocada da forma standard, A -1, ou alternativamente pela chamada da função pré-definida inv(A), ou seja A -1 == inv(A). Assim, para obter as soluções de um sistema de equações A * X = B, basta notar que se A * X = B então é A -1 * A * X = A -1 * B, ou seja I*X = A -1 * B, e finalmente X = A -1 B. Na álgebra real, a -1 * b = b/a, isto é a multiplicação pelo inverso corresponde a uma divisão. A divisão é igualmente uma operação primitiva do Octave. No entanto como as multiplicações à direita e à esquerda são diferentes, o Octave distingue a divisão à esquerda da divisão à direita, sendo representadas como A -1 *B = A\B e B*A -1 = B/A

25 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 25 Matrizes e Sistemas de Equações Exemplo: Consideremos o sistema de 3 equações a 3 incógnitas Para o resolver basta obter a matriz inversa A -1 e multiplicá-la à direita por B >> A = [2 4 -1; ; ] A = >> M = A^-1 M = >> B = [7 ; 0 ; 2] ; >> X = M*[7;0;2] X = x1 + 4 x2 – x3 = 7 x1 - 2 x2 + x3 = 0 -3 x1 + 3 x2 – x3 = x1 x2 x3 *=

26 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia 26 Matrizes e Sistemas de Equações Podemos ainda notar igualmente que 2 x1 + 4 x2 – x3 = 7 x1 - 2 x2 + x3 = 0 -3 x1 + 3 x2 – x3 = x1 x2 x3 *= >> A = [2 4 -1; ; ]; B = [7 ; 0 ; 2]; >> M = A ^-1; D = M * A M = >> X = A\B X = >> A \ B - M*B ans = 1.0e-16 * % erros de arredondamento! % (A \ B == M * B) =


Carregar ppt "Vectores e Matrizes Aplicações à Engenharia Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2007/2008."

Apresentações semelhantes


Anúncios Google