Arranjos multidimensionais3838endnote: 38Consulte a Seção 5.3 fornecem uma estrutura adequada para a representação de matrizes em computador. Uma matriz , assim como um arranjo bidimensional, é uma coleção de valores organizados de forma retangular, por exemplo, a matriz tem a forma
(5.65) |
Seus elementos são organizados por eixos, o eixo das linhas (axis=0) e o eixo das colunas (axis=1).
O sistema linear
(5.66a) | |||
(5.66b) | |||
(5.66c) |
pode ser escrito na seguinte forma matricial
(5.67) |
onde é a matriz de coeficientes
(5.68) |
o vetor dos termos constantes é
(5.69) |
enquanto que o vetor das incógnitas é . No seguinte código, usamos numpy.array para alocamos a matriz dos coeficientes e o vetor dos termos constantes .
Embora úteis para a representação de matrizes, arranjos bidimensionais não são equivalentes a matrizes. Em arranjos, as operações aritméticas elementares (+, -, *, /, etc.) são operações elemento-a-elemento, para matrizes a multiplicação não é assim calculada e a divisão não é definida.
No NumPy, as funções numpy.dot, numpy.matmul ou o operador @ podem ser usados para computar a multiplicação matricial.
Consideramos o sistema linear introduzido no Exemplo 5.4.1. Vamos verificar que sua solução é , e . Equivalentemente, temos que
(5.73) |
com . Isto é, se é solução do sistema, então é nulo o resíduo , i.e.
(5.74) |
Ou equivalentemente, .
Por definição, a transposta de uma matriz é a matriz , i.e. a matriz obtida de pela permutação de suas linhas com suas colunas. No NumPy, a transposta de um arranjo bidimensional pode ser calculado com a função numpy.transpose, com o método numpy.ndarray.transpose ou com o atributo numpy.ndarray.T.
Uma matriz é dita ser simétrica, quando . Observamos que é simétrica a matriz
(5.75) |
Agora, não é simétrica a matriz
(5.76) |
Por definição, o determinante de uma matriz é o escalar
(5.77) | |||
(5.78) |
onde é o conjunto de todas as permutações de e é o sinal (ou assinatura) da permutação . Para matrizes , temos
(5.79) | |||
(5.80) |
Enquanto que no caso de matriz , temos
(5.81) | |||
(5.82) | |||
(5.83) | |||
(5.84) | |||
(5.85) | |||
(5.86) | |||
(5.87) |
A função numpy.linalg.det do NumPy pode ser usado para computar o determinante de um arranjo.
O determinante
(5.88) | |||
(5.89) |
O Método de Cramer3939endnote: 39Gabriel Cramer, 1704 - 1752, matemático suíço. Fonte: Wikipédia: Gabriel Cramer. usa de determinantes para o cálculo da solução de sistemas lineares. Dado um sistema linear
(5.90) |
denotamos a matriz dos coeficientes por
(5.91) |
onde denota a -ésima coluna de . Vamos denotar por a matriz obtida de substituindo pelo vetor dos termos constantes , i.e.
(5.92) |
O método consiste em computar a solução com
(5.93) |
para cada .
Vamos resolver o sistema linear dado no Exercício 5.4.1. Sua forma matricial é
(5.94) |
com matriz dos coeficientes
(5.95) |
e vetor dos termos constantes
(5.96) |
Para aplicação do Método de Cramer, calculamos
(5.97) | |||
(5.98) |
e das matrizes auxiliares
(5.99) | |||
(5.100) |
(5.101) | |||
(5.102) |
(5.103) | |||
(5.104) |
Com isso, obtemos a solução
(5.105) | |||
(5.106) | |||
(5.107) |
Complete as lacunas.
Usualmente, matrizes são computacionalmente modeladas como arrays multidimensionais.
A operação de multiplicação matricial entre dois arrays pode ser feita com o operador @ ou com o método numpy.matmul.
A transposta de um numpy.array bidimensional pode ser obtida com o atributo .T ou o método numpy.transpose.
O submódulo numpy.linalg contém o método det para a computação do determinante de um numpy.array.
a) arrays; b) @; c) .T; d) numpy.linalg
Aloque com numpy.array e imprima as seguintes matrizes:
(5.108) |
(5.109) |
(5.110) |
(5.111) |
Aloque as seguintes matrizes com numpy.array
(5.112) |
e
(5.113) |
Então, compute e imprima o resultado das seguintes operações matriciais
Aloque as seguintes matrizes numpy.array:
(5.114) |
e
(5.115) |
Então, compute e imprima o resultado das seguintes operações matriciais:
Escreva a forma matricial do seguinte sistema linear
(5.116a) | |||
(5.116b) | |||
(5.116c) |
Use numpy.array para alocar a matriz dos coeficientes e o vetor dos termos constantes . Então, verifique quais dos seguintes vetores é solução do sistema
Calcule e compute o determinante das seguintes matrizes
(5.117) |
(5.118) |
(5.119) |
Use o Método de Cramer para computar a solução do sistema dado no Exercício 5.4.5. Verifique sua solução com a computada pelo método numpy.linalg.solve.
Dica: .
Desenvolva sua própria função Python para a computação do determinante de uma matriz .
Dica: use a função intertools.permutations para obter um iterador sobre as permutações.
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.
Arranjos multidimensionais3838endnote: 38Consulte a Seção 5.3 fornecem uma estrutura adequada para a representação de matrizes em computador. Uma matriz , assim como um arranjo bidimensional, é uma coleção de valores organizados de forma retangular, por exemplo, a matriz tem a forma
(5.65) |
Seus elementos são organizados por eixos, o eixo das linhas (axis=0) e o eixo das colunas (axis=1).
O sistema linear
(5.66a) | |||
(5.66b) | |||
(5.66c) |
pode ser escrito na seguinte forma matricial
(5.67) |
onde é a matriz de coeficientes
(5.68) |
o vetor dos termos constantes é
(5.69) |
enquanto que o vetor das incógnitas é . No seguinte código, usamos numpy.array para alocamos a matriz dos coeficientes e o vetor dos termos constantes .
Embora úteis para a representação de matrizes, arranjos bidimensionais não são equivalentes a matrizes. Em arranjos, as operações aritméticas elementares (+, -, *, /, etc.) são operações elemento-a-elemento, para matrizes a multiplicação não é assim calculada e a divisão não é definida.
No NumPy, as funções numpy.dot, numpy.matmul ou o operador @ podem ser usados para computar a multiplicação matricial.
Consideramos o sistema linear introduzido no Exemplo 5.4.1. Vamos verificar que sua solução é , e . Equivalentemente, temos que
(5.73) |
com . Isto é, se é solução do sistema, então é nulo o resíduo , i.e.
(5.74) |
Ou equivalentemente, .
Por definição, a transposta de uma matriz é a matriz , i.e. a matriz obtida de pela permutação de suas linhas com suas colunas. No NumPy, a transposta de um arranjo bidimensional pode ser calculado com a função numpy.transpose, com o método numpy.ndarray.transpose ou com o atributo numpy.ndarray.T.
Uma matriz é dita ser simétrica, quando . Observamos que é simétrica a matriz
(5.75) |
Agora, não é simétrica a matriz
(5.76) |
Por definição, o determinante de uma matriz é o escalar
(5.77) | |||
(5.78) |
onde é o conjunto de todas as permutações de e é o sinal (ou assinatura) da permutação . Para matrizes , temos
(5.79) | |||
(5.80) |
Enquanto que no caso de matriz , temos
(5.81) | |||
(5.82) | |||
(5.83) | |||
(5.84) | |||
(5.85) | |||
(5.86) | |||
(5.87) |
A função numpy.linalg.det do NumPy pode ser usado para computar o determinante de um arranjo.
O determinante
(5.88) | |||
(5.89) |
O Método de Cramer3939endnote: 39Gabriel Cramer, 1704 - 1752, matemático suíço. Fonte: Wikipédia: Gabriel Cramer. usa de determinantes para o cálculo da solução de sistemas lineares. Dado um sistema linear
(5.90) |
denotamos a matriz dos coeficientes por
(5.91) |
onde denota a -ésima coluna de . Vamos denotar por a matriz obtida de substituindo pelo vetor dos termos constantes , i.e.
(5.92) |
O método consiste em computar a solução com
(5.93) |
para cada .
Vamos resolver o sistema linear dado no Exercício 5.4.1. Sua forma matricial é
(5.94) |
com matriz dos coeficientes
(5.95) |
e vetor dos termos constantes
(5.96) |
Para aplicação do Método de Cramer, calculamos
(5.97) | |||
(5.98) |
e das matrizes auxiliares
(5.99) | |||
(5.100) |
(5.101) | |||
(5.102) |
(5.103) | |||
(5.104) |
Com isso, obtemos a solução
(5.105) | |||
(5.106) | |||
(5.107) |
Complete as lacunas.
Usualmente, matrizes são computacionalmente modeladas como arrays multidimensionais.
A operação de multiplicação matricial entre dois arrays pode ser feita com o operador @ ou com o método numpy.matmul.
A transposta de um numpy.array bidimensional pode ser obtida com o atributo .T ou o método numpy.transpose.
O submódulo numpy.linalg contém o método det para a computação do determinante de um numpy.array.
a) arrays; b) @; c) .T; d) numpy.linalg
Aloque com numpy.array e imprima as seguintes matrizes:
(5.108) |
(5.109) |
(5.110) |
(5.111) |
Aloque as seguintes matrizes com numpy.array
(5.112) |
e
(5.113) |
Então, compute e imprima o resultado das seguintes operações matriciais
Aloque as seguintes matrizes numpy.array:
(5.114) |
e
(5.115) |
Então, compute e imprima o resultado das seguintes operações matriciais:
Escreva a forma matricial do seguinte sistema linear
(5.116a) | |||
(5.116b) | |||
(5.116c) |
Use numpy.array para alocar a matriz dos coeficientes e o vetor dos termos constantes . Então, verifique quais dos seguintes vetores é solução do sistema
Calcule e compute o determinante das seguintes matrizes
(5.117) |
(5.118) |
(5.119) |
Use o Método de Cramer para computar a solução do sistema dado no Exercício 5.4.5. Verifique sua solução com a computada pelo método numpy.linalg.solve.
Dica: .
Desenvolva sua própria função Python para a computação do determinante de uma matriz .
Dica: use a função intertools.permutations para obter um iterador sobre as permutações.
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.