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

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

Vectores e Matrizes Aplicações à Engenharia

Apresentações semelhantes


Apresentação em tema: "Vectores e Matrizes Aplicações à Engenharia"— 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 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) >> X = 5 >> columns(X) ans = 1 >> M = [1 ; 2]; >> cols(M) ans = 2 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia

3 Vectores e Matrizes - Aplicações à Engenharia
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 >> V = [1,2, 4; ] V = >> X = log(V)/log(2) X = for i = 1:rows(V) for j = 1:columns(V) X(i,j) = log(V(i,j))/log(2) endfor 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 = >> V = [1,2,3; 4 5 6; 7 8 9; 3 6 9] V = S T >> S = V(2:3, 1:2) S = 4 5 7 8 >> T = V(:,2:3) T = 2 3 5 6 8 9 6 9 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 <= 3 & j >= 1 & j <= 2 s(i-1,j) = v(i,j) endif endfor V S 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 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia

7 Vectores e Matrizes - Aplicações à Engenharia
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 V2 V >> V1 = [5,4] >> V2 = [7,-3] >> V = V1 + V2 ans = [12 1] 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 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia

9 Vectores e Matrizes - Aplicações à Engenharia
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, v1 .. vk, com pesos relativos p1 .. pk 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 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 = [a1, a2, a3, ... , an], é definido como |A| = (a12 + a an2)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 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 ex -3 ey+ 4 ez ; F2 = 1 ex + 2 ey - 2 ez 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 = 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia

12 Vectores e Matrizes - Aplicações à Engenharia
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 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia

13 Vectores e Matrizes - Aplicações à Engenharia
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. Começamos por definir as funções booleanas par e múltiplo de 6. 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; 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia

14 Vectores e Matrizes - Aplicações à Engenharia
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 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 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 = 1 2 3 4 5 6 7 8 >> C = A*B C = % 50 = 1*1 + 2*3 +3*5 + 4*7 44 60 68 80 >> D = (C == mult_mat(A,B)) D = 1 1 1 1 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’= 1 5 2 6 3 7 4 8 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia

18 Vectores e Matrizes - Aplicações à Engenharia
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 = 1 3 5 >> P = [ 5 2 1] P = 5 2 1 >> C = A * P’ C = 16 >> Mp = A * P’/sum(P) Mp = 2 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.. 1 120º 1.8226 2 = abs(1*2*sin(120*pi/180)) 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 = ax x + ay y + az z e B = bx x + by y + bz z o seu produto externo é dado por A  B = (ax x + ay y + az z )  ( bx x + by y + bz z) = (ay bz - az by) x + (az bx - ax bz) y + (ax by - ay bx) z que pode ser obtido pela multiplicação do vector A pela matriz M abaixo indicada x y z [ax ay az]  bz by = [aybz-azby azbx- axbz azbx-axbz] bz bx -by bx 0 M 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, 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 0 -bz by bz 0 -bx -by bx 0 >> A = [ ]; B = [ ]; >> C = cross(A,B) C = >> D = prod_ext(B,A) D = % A  B = - B  A 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 a11 x1 + a12 x a1n xn = b1 a21 x1 + a22 x a2n xn = b A X = B ..... an1 x1 + an2 x ann xn = bn em que A é uma matriz n*n, e X e B são vectores coluna com n elementos, isto é a11 a a1n a21 a a2n ..... an1 an ann x1 x2 ... xn b1 b2 bn * = 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 xn = s1 0 x1 + 1 x xn = s M * A * X = M * B ..... 0 x1 + 0 x xn = sn 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 m11 m m1n m21 m m2n ..... mn1 mn2 ... mnn * = a11 a a1n a21 a a2n an1 an2 ... ann 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-1B. 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 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 2 x1 + 4 x2 – x3 = 7 x1 - 2 x2 + x3 = 0 -3 x1 + 3 x2 – x3 = 2 x1 x2 x3 * = 7 2 >> A = [2 4 -1; ; ] A = >> M = A^-1 M = >> B = [7 ; 0 ; 2] ; >> X = M*[7;0;2] X = 1 2 3 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 = 2 x1 x2 x3 * = 7 2 >> A = [2 4 -1; ; ]; B = [7 ; 0 ; 2]; >> M = A ^-1; D = M * A M = >> X = A\B X = 1 2 3 >> A \ B - M*B ans = 1.0e-16 * % erros de arredondamento! % (A \ B == M * B) = 0 26 Março 2008 Vectores e Matrizes - Aplicações à Engenharia


Carregar ppt "Vectores e Matrizes Aplicações à Engenharia"

Apresentações semelhantes


Anúncios Google